当前位置: 代码迷 >> 单片机 >> 在非0地址运行UCOS2
  详细解决方案

在非0地址运行UCOS2

热度:91   发布时间:2016-04-28 15:49:16.0
在非零地址运行UCOS2
求教一下在ARM上做过UCOS2和IAP的高手,怎么样从零地址的程序跳转到非零地址的UCOS2上来正常运行起来。
例如A程序的加载/运行地址为0地址,B程序为带UCOS2的程序,加载/运行地址为10000。
A运行起来后,将拷贝B程序所在FLASH地址10000的前64字节,也就是B的中断向量表的64字节到RAM的首地址中,再将MEMMAP = 2,最后跳转到RAM首地址中,却发现B程序运行起来后,连上调试器后发现UCOS2没有正常运行起来,一行一行的代码运行完后,竟然从main()中return了,那些注册的任务函数(线程函数)没有得到调用。
具体查了下,在B程序中第一个进入异常向量表的是软中断swi 2,也就是关中断,也没有跳到向量表中,直接往下走了。查了几天,也不知道是怎么回事,不知道接下来该怎么下手。

补充说明一下:
1.B程序如果把加载/运行地址改成0地址的话,可以很好的运行。
2.如果将B程序换成裸机程序C,A跳到C后运行正常。

------解决方案--------------------
严重超过实力范围...帮顶...
------解决方案--------------------
哥们,我用LPC2214玩过类似功能。

时间有点久,具体步骤不记得,但是可以给一点建议,仔细阅读周立功关于IAP部分文档,有关于IAP的详细文档和示例代码的,模仿。

A程序运行完,到B程序,主要工作是跳转,代码很简洁。好像在启动代码里面要做一些手脚的,坑爹的技术文档我都不记得自己还有没有了。如果有就可以帮助你了。

回家找找看。
------解决方案--------------------
我曾经做的,B也是UCOSII代码。

按你说的B是裸奔可以,加UCOSII不可以,这个问题会不会是堆栈大小等问题啊。你可以把B代码做一个极其简单的UCOSII看看怎么样。

换句话先验证跳转的功能,跳转成功了再看下一步,逐步缩小范围。
------解决方案--------------------
我在做cortexM3的iap,第一个创建的ucos任务可以执行,但是别的任务不能正常执行,也没找到原因。。。