您的位置:首页 > 其它

【转载】关于2440的MDK平台下移植ucOS2,遇到的问题,及解决办法

2015-04-26 20:41 483 查看
转载自: http://blog.sina.com.cn/s/blog_a4acf5ea0101g9lk.html
这几天,移植想把ucos2移植到自己的2440开发板上,可是苦于没资料啊,于是网上到处找资料,今晚终于调试通过了,把自己的问题及解决办法跟大家分享分享:

首先,建议大家到网上下载一个简单的ADS的例程,网上的在ADS上移植ucOS的例程很多,我也是随便下的一个,然后像移植单片机程序那样直接移植UCOS2就行了,编译的时候可能会报以下错误:

.\out_put\led.axf: Error: L6238E: 2440init.o(Init) 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 CopyProgramFromNand.

决解办法:在2440init中找到

AREA

Init,CODE,READONLY

ENTRY

__ENTRY

在这段断码前面加一句PRESERVE8就可以了

.\out_put\led.axf: Error: L6238E: os_cpu_a.o(UCOS_ARM) 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 OSTaskSwHook.

解决办法:找到Os_cpu_a.s中找到AREA UCOS_ARM, CODE, READONLY,在前面加上个 PRESERVE8,就OK了

warning: #550-D: variable "d" was set but never used

描述:变量'd'定义但从未使用,或者是,虽然这个变量你使用了,但编译器认为变量d所在的语句没有意义,编译器把它优化了.

解决:仔细衡量所定义的变量d是否有用,若是认定变量d所在语句有意义,那么尝试用volatile关键字修饰变量d,若是真的没有用,那么删除掉以释放可能的内存.

warning: #1-D: last line of file ends
without a newline

描述:文件最后一行不是新的一行.编译器要求程序文件的最后一行必须是空行,想了半天没想通为什么要这样.

解决:可以不理会.若是觉得出现警告不爽,那么在出现警告的文件的最后一行敲个回车,空出一行.

warning: A1876W: Use of '|' as a synonym for the :OR: operator is
deprecated.

部分源代码:

MSR CPSR_c, #(NoInt|IRQ32Mode) ;进入IRQ模式。

warning: A1608W:
MOV pc, instruction used, but BX is preferred

解决:把MOV
pc, 替换为 BX 即从子程序返回

子程序返回的三种方法

现在总结如下

1.MOV PC,LR

2.BL LR

3.在子程序入口处使用以下指令将R14存入堆栈

STMFD SP!,{,LR}

对应的,使用以下指令可以完成子程序的返回

LDMFD SP!, {,LR}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐