之前做了一个IAP程序,bootloader使用裸机,APP使用ucos2系统,IAP可以互相跳转
程序如下:
[C]
纯文本查看 复制代码
void iap_load_app(u32 appxaddr){if(((*(vu32*)appxaddr)&0x2FFE0000)==0x20000000) //检查栈顶地址是否合法.{ jump2app=(iapfun)*(vu32*)(appxaddr+4); //用户代码区第二个字为程序开始地址(复位地址) __set_PSP(*(vola
tile unsigned int*) appxaddr); //重新设置进程PSP堆栈地址 __set_CONTROL(0); //设置为MSP __set_MSP(*(volatile unsigned int*) appxaddr); //重新设置进程MSP堆栈地址 jump2app(); //跳转到APP.}}现在学习FreeRTOS,就把bootloader程序改为了FreeRTOS,但是在jump2app()跳转的时候进入到了HardFault_Handler
尝试在设置堆栈和跳转前,关闭调度器vPortEndScheduler()和挂起调度vTaskSuspendAll()都没有效果。
然后又尝试把所有任务都注释掉,就添加一个任务,就是跳转,然后启用调度,也是不行。
不打开任务和调度,就可以跳转。
感觉是堆栈没设置好,不知道各位有没有试过在FreeRTOS程序跳转或有什么思路?
谢谢!