电子工程师技术服务社区
- 社区首页
- 下载
- BSP.zip
资料描述
本帖最后由 apleilx 于 2016-12-10 17:10 编辑
相比rtx,移植ucosiii可真是不顺利,刚开始移植的3.04运行了一段时间,但是添加浮点数运算的任务后,一运行竟然fault了,编译选项中是使用了fpu的,并且启动文件也开启了fpu。刚开始以为是代码有问题,仔细想想有不对,这些代码在m3上运行都是好好的,m4应该是兼容m3的,猜测可能是fpu配置不对。后来把断点设置在包含浮点数处理的程序中,打断后单步执行看汇编代码,确实使用了fup指令集,单步执行直到代码结束,没有fault,这下更郁闷了,可以确定不是fpu配置问题了。继续跟踪一直到调用系统调度器后,死了。之前没添加浮点数代码的时候运行正常,添加后调度器就死翘翘,没办法了,只好去找度娘,基本上都是说ucosiii官方的代码还不支持m4的fpu,可以通过修改cpu相关的代码来支持,总共有三处要修改,按照网上说的改了两个代码文件,但事实上并没有什么卵用,可能是我的版本不对,也可能是配置不匹配。不管了,去ucos官网找了找,发现有新版本的3.06,下来看看,代码里已经包含了fpu堆栈管理的代码,复制替换掉3.04的文件后再编译下载,一下子就好,那个感觉真是柳暗花明啊。倒腾大半天没搞定,结果换个系统几分钟九好,真应了那句“踏破铁鞋无觅处,得来全不费工夫”.....
下面把ucosiii移植到s6e2cc需要修改的地方罗列一下:
1、启动文件,ucosiii用到两个中断,复制官方的启动文件修改systick 和 pendsv的中断入口代码,用下面的代码替换原有的就可以了。
dcd os_cpu_pendsvhandler ; pendsv
dcd os_cpu_systickhandler ; systick
pubweak os_cpu_pendsvhandler
section .text:code:reorder:noroot(1)
os_cpu_pendsvhandler
b