【转载】关于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}
这几天,移植想把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}
相关文章推荐
- 关于在2440上移植rtl8192和rtl8188cus linux驱动遇到的问题及解决方法!!!
- 将水晶报表移植到另一个项目时遇到的问题的解决办法
- 转载:在部署时使用Excel .NET运行库导出Excel遇到问题及解决办法
- 关于搭建Oracle数据库遇到的问题(Oracle10g)及解决办法
- Tomcat6项目移植到weblogic11(10.3)遇到的问题,及解决办法
- 关于今天做项目时遇到的问题 以及解决办法
- 关于android编程遇到java.lang.OutOfMemoryError: bitmap size exceeds VM budget此类问题的原因及解决办法
- [转载]关于移动百宝箱应用打包问题的解决办法
- 关于VISTA遇到“Windows需要您的许可才能继续”的问题解决办法
- ios升级为5后,程序编译时遇到的关于libz 1.2.3.dylib类包的各种问题解决办法
- 关于tomcat环境下上传大文件遇到的问题及解决办法
- 移植cocos2d-x 游戏从Android平台到IOS平台分辨率问题及解决办法
- 关于操作access遇到的问题以及解决办法
- 转载+整理:在部署时使用Excel .NET运行库导出Excel遇到问题及解决办法
- 关于在创建JFrame中遇到的问题及解决办法
- 关于随机数 遇到的一些问题和解决办法
- 关于myeclipse安装extjs4.2提示插件spket遇到的一些问题及解决办法
- ShareSDK向iOS平台移植时问题及解决办法
- ShareSDK向iOS平台移植时问题及解决办法
- 关于SDK更新遇到Failed to fetch URL http://dl-ssl.google.com/android refused问题的解决办法