STM32 IAP堆栈问题 stm32f0 iap
最近在搞STM32 的IAP。发现一个很奇怪的问题。
在程序A里面,跳转到程序B执行。
A存放在0x08000000,B存放在0x0800e000.
起初,B使用的内存大概6K,其中堆栈使用了4K。此时如果从程序A跳到程序B,B出现死机。但是如果用仿真器直接运行B是可以运行的。
实在不知道什么问题,后来B的堆栈改小,设为1K,这是就正常了。能从程序A跳转到程序B,并且B也能正常运行。
请问这是什么原因?程序B的运行为什么后它的内存大小的影响呢?
片子是STM32F103R8T6.
望高手解答!! 谢谢了。
----------------------------------------------------------------------------------
Answer:
感觉是你在跳转到B的时候没有把程序B的主堆栈进行初始化,这样程序B在运行的时候还在使用程序A的堆栈指针,很可能会与程序B的全局变量区混到一起了,执行情况就没法预知了,会有某些奇怪现象发生。
----------------------------------------------------------------------------------
A程序用了ucos2,而且不是在中断里跳转到B,那应该是在某个任务里跳转的吧。ucos2的官方移植版本,任务里使用的堆栈指针是PSP,如果你的A程序是在使用PSP的任务里跳转到B程序的,那么函数void JumpBootloaderProgram(void)中的__set_MSP(*(volatile unsigned int*) ApplicationAddress)函数并没有使跳转到B后的堆栈指针初始化为主堆栈指针,即跳转到B后还是使用的程序A的PSP,问题可能会出在这里。
----------------------------------------------------------------------------------
还得再啰嗦几句,楼主所说的“把PSP和MSP都重新设置”指的是在函数JumpBootloaderProgram中又加入了一句__set_PSP(*(volatile unsigned int*) ApplicationAddress)吗?如果是这样,貌似跳转到B之后还有隐患,因为由A跳到B后,主程序用的是PSP,而中断服务程序仍要使用MSP,因为CM3的中断服务是“处理模式”,只能使用MSP。如果在跳转到B之前把MSP和PSP设为同样值的话,那么B程序的中断服务程序在使用堆栈的同时,很可能也改写了主程序的堆栈中的内容。所以我觉得最好在由A跳转到B之前,在调用__set_MSP(*(volatile unsigned int*) ApplicationAddress)之前,把当前使用的堆栈指针由PSP改回MSP,然后再设置MSP,再跳转,这样比较好一些,跳转到B之后,无论主程序还是中断服务程序都只使用MSP,也就不会冲突了。
----------------------------------------------------------------------------------
恩。多谢高手指点。呵呵。
在这里虚心接受建议。
我现在这样改,应该就不会有问题了吧?
JumpAddress = *(volatile unsigned int*) (ApplicationAddress + 4);
Jump_To_Application = (pFunction) JumpAddress;
__set_PSP(*(volatile unsigned int*) ApplicationAddress);
__set_CONTROL(0);
__set_MSP(*(volatile unsigned int*) ApplicationAddress);
Jump_To_Application();
再次感谢。以后我常来这。呵呵。
更多阅读
毕业论文答辩的一般程序及常见问题 研究生毕业论文答辩
毕业论文答辩不会太严,如果差得不是太出格都可以毕业。毕业论文不是自己写的也不用太紧张,一般都不会有什么事,不需要全部背下来,主要的观点记住就可以了,只要你把自己论文的重点内容熟悉了就可以了。 毕业论文答辩的一般程序及常见问题
ie11 for win7优点缺点 ie11兼容性问题 win7优缺点
2、有些地方文件无法上传:如百度经验就无法上传文件,但是其它地方却可以上传。如下图:百度识图上传一张图片一下子就上传好了;而百度经验这边的上传很多年过去了还是一片空白(我试了很多次都无法上传,具体是什么问题不知);还有一些其它
语音麦克风说话话筒没有声音的问题解决方法 铁三角麦克风话筒
语音麦克风说话话筒没有声音的问题解决方法——简介 大家可能也会常常遇到 电脑在打游戏的时候,插上话筒可是说话怎么都没声音的问题。这个方法其它很简单,有的时候只不过是一些细节出现的问题都会让我们找不到门路。这里来看教程:语
解决iOS7卡顿问题 gta5怎么解决卡顿问题
由于iOS7对iPhone硬件要求较高,4s及以下的iPhone在运行上可能会出现卡顿,以下几点设置让你摆脱卡顿问题。设置-通用-辅助功能-减少动态效果(打开)设置-通用-辅助功能-增强对比度(打开)
四快学习法的价格问题
四快学习法的价格问题——简介随着现在的四快学习法的逐渐在我国的各个区域市场的畅销,很多的学生家长都开始积极地关注到这样的热门的教辅材料,因为很多人都想要了解到四快学习法的神奇之处,想要知道为什么简单的教辅方法就能够改