关于uCOS-II的种种阿呆就不说了,很多初学者从此踏上操作系统之路
uCOS-II在ADS上的移植很常见,而在KEIL MDK下的移植却不是很多,阿呆根据ADS下的移植范例,结合自
己最近使用KEIL MDK的稍许心得,记录一下uCOS-II在KEIL MDK下的移植过程。
一:准备源码
在官网上下载了uCOS-II的源码,好像似乎是2..91的了.
二:编写OS移植文件
1.编写OS_cpu_c.c
这个文件阿呆是在ADS下的移植范例里面copy的,直接使用就可以了
注:2.89开始添加了OS_TaskReturn(),它会调用OSTaskReturnHook(),如果copy的版本低于2.89则需要
自己添加一下。
2.编写OS_cpu_a.s
这个文件也是阿呆在ADS下的一直范例里面copy的,同样的S3C2440平台,这下函数一样的,而KEIL MDK
与ADS相比,在语法上没有什么特别的要求。
3.添加系统心跳定时器
阿呆使用没有输出引脚的Timer4作为系统心跳定时器,具体实现参看:OS_Timer4_c.c
三:修改启动代码
1.如果直接将ADS下的启动代码copy到MDK下,编译会提示出错,一般错误是:.\OutPutFiles\uCOS-
II_Uart.axf: Error: L6238E: 2440_init.o(Init_2440) contains invalid call from '~PRES8 (The
user did not require code to preserve 8-byte aligment of 8-byte data objects)' function to
'REQ8 (Code was permitted to depend on the 8-byte aligment of 8-byte data items)' function
App_Main.
解决方法是在代码段前部添加:PRESERVE8,如图1
2.将IRQ中断交给uC/OS-II管理
代码如下:
;****************************************************
;将OS_CPU_IRQ_ISR地址装入HandleIRQ中,IRQ中断交给uCOS-II管理
;****************************************************
LDR R0,=HandleIRQ ;This routine is needed
LDR R1,=OS_CPU_IRQ_ISR ;if there isn't 'subs pc,lr,#4' at 0x18,
0x1c
STR R1,[r0]
即发生IRQ中断时系统跳转到OS_CPU_IRQ_ISR处执行uC/OS-II中断服务函数,具体事件由它负责。
四:设置MDK编译参数信息
1.选择CPU: