论文部分内容阅读
对于嵌入式系统而言,uC/OS-II内核是一款性能优异且应用广泛的实时操作系统内核。随着32位MCU的出现,让uC/OS-II这样的实时内核集中管理外设资源、统一进行多任务调度才能够使开发人员更加专注于具体业务。本文在分析uC/OS-II内核和Cortex-M3内核的基础上,阐述了将uC/OS-II内核移植到基于Cortex-M3内核的STM32系列芯片上的方法并构建了基于以太网控制器ENC28J60和开源TCP/IP协议栈uIP的嵌入式网络通讯模块,拓展了uC/OS-II的内核功能。按照内核移植方案,论文从内核结构、任务管理,文件系统结构等方面剖析了uC/OS-II内核,从寄存器配置、NVIC中断机制、存储器映射以及外设控制等多个方面详述了Cortex-M3内核以及STM32系列芯片,采用RealView MDK开发套件,在STM32固件函数库的支持下,建立了内核移植工程,开发了移植uC/OS-II内核所必须的板级支持包。在内核移植过程中,结合STM32F103VET6芯片的特点,修改了OS_CPU.H、OS_CPU.C以及OS_CPU_A.ASM这三个uC/OS-II内核文件,使用PendSV中断机制实现了uC/OS-II内核任务切换功能,结合Cortex-M3内核专为多任务调度而设计的新型指令“CLZ”提出了一种uC/OS-II内核任务调度机制的改进思路,分析了STM32F103VET6芯片启动代码,详述了uC/OS-II内核启动过程。针对uC/OS-II内核本身没有集成TCP/IP网络协议栈的问题,详述了以太网控制器ENC28J60的配置方法并编写其驱动程序,选用开源的TCP/IP网络协议栈uIP,构建了基于ENC28J60和uIP的网络通信模块并修复了uIP协议栈在UDP协议中的bug,完成了对uC/OS-II内核功能的扩展。论文对移植后的uC/OS-II内核进行了测试,设计了相关测试用例以验证移植后的uC/OS-II内核能否正常运行、多任务调度机制是否能够进行。测试结果显示移植后的uC/OS-II内核中OSCtxSwCtr的值能够不断自增,说明uC/OS-II内核能够正常启动并运行。用于控制各个LED灯闪烁的任务也能够依次得到调度,说明uC/OS-II内核多任务调度能够正常进行。针对基于ENC28J60和uIP的嵌入式网络通信模块,设计了ICMP、TCP和UDP等基础通信测试用例,测试结果表明,评估板能够正常反馈ICMP数据包请求,能够和PC机上的测试软件建立TCP连接,uIP协议中的UDP通信bug也得到修复,UDP通信能够正常进行。