|
发表于 2016-8-19 15:16:47
|
显示全部楼层
本帖最后由 eagle_avr 于 2016-8-19 15:33 编辑
我用UCOS2.9.2,,也碰到了与77楼类似的问题,当从IAP跳转到app里是,就会进入HardFault_Handler,折磨了我两天没找到问题。
看到楼主说的特权模式,把“__set_CONTROL(0);”加进去,再跳转就OK了:
- void CAN_BOOT_JumpToApplication(__IO uint32_t Addr)
- {
- pFunction Jump_To_Application;
- __IO uint32_t JumpAddress;
- /检查栈顶地址是否合法(用户代码的第一个字存放的是栈顶地址,即检查此地址)
- //if (((*(__IO uint32_t*)Addr) & 0x2FFE0000 ) == 0x20000000) { //SRAM=128K
- if (((*(__IO uint32_t*)Addr) & 0x2FFF0000 ) == 0x20000000) { //SRAM=64K
-
- //用户代码区第二个字为程序开始地址(复位中断向量地址),
- //强制把该地址转化为iapfun类型的函数指针,再赋给函数指针jump2app
- JumpAddress = *(__IO uint32_t*) (Addr + 4);
- Jump_To_Application = (pFunction) JumpAddress;
-
- __set_PRIMASK(1);//关闭所有中断
- __set_MSP(*(__IO uint32_t*)Addr); //设置APP堆栈指针(用户代码区的第一个字用于存放栈顶地址)
- __set_CONTROL(0);
- Jump_To_Application(); ////跳转到APP的复位中断,程序由此开始执行
- }
- }
复制代码
万分感谢!
另外我得去看看,关于特权模式这部分的内容了!!! |
|