STM32 IAP堆栈问题 stm32f0 iap

Question:

最近在搞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的全局变量区混到一起了,执行情况就没法预知了,会有某些奇怪现象发生。

----------------------------------------------------------------------------------

STM32 IAP堆栈问题 stm32f0 iap
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();

再次感谢。以后我常来这。呵呵。

  

爱华网本文地址 » http://www.413yy.cn/a/25101012/122010.html

更多阅读

毕业论文答辩的一般程序及常见问题 研究生毕业论文答辩

毕业论文答辩不会太严,如果差得不是太出格都可以毕业。毕业论文不是自己写的也不用太紧张,一般都不会有什么事,不需要全部背下来,主要的观点记住就可以了,只要你把自己论文的重点内容熟悉了就可以了。 毕业论文答辩的一般程序及常见问题

ie11 for win7优点缺点 ie11兼容性问题 win7优缺点

2、有些地方文件无法上传:如百度经验就无法上传文件,但是其它地方却可以上传。如下图:百度识图上传一张图片一下子就上传好了;而百度经验这边的上传很多年过去了还是一片空白(我试了很多次都无法上传,具体是什么问题不知);还有一些其它

解决iOS7卡顿问题 gta5怎么解决卡顿问题

由于iOS7对iPhone硬件要求较高,4s及以下的iPhone在运行上可能会出现卡顿,以下几点设置让你摆脱卡顿问题。设置-通用-辅助功能-减少动态效果(打开)设置-通用-辅助功能-增强对比度(打开)

四快学习法的价格问题

四快学习法的价格问题——简介随着现在的四快学习法的逐渐在我国的各个区域市场的畅销,很多的学生家长都开始积极地关注到这样的热门的教辅材料,因为很多人都想要了解到四快学习法的神奇之处,想要知道为什么简单的教辅方法就能够改

声明:《STM32 IAP堆栈问题 stm32f0 iap》为网友穿透灵魂的强音分享!如侵犯到您的合法权益请联系我们删除