我把407的代码区域分成两个部分,可以相互跳转,分成boot和应用区,boot区不变,应用区用我之前的代码是可以运行的换成RTT的直接跳不进去,分析怀疑rtt有指定地址的函数boot跳转代码如下
uint32_t app_addr; pFunc app_main_func;// USART_Cmd(USART1,DISABLE); // __HAL_SYSCFG_REMAPMEMORY_SYSTEMFLASH(); app_addr = *(uint32_t*)(APP_START_ADDRESS + 4); app_main_func = (pFunc)app_addr; // __set_MSP( *(uint32_t*)APP_START_ADDRESS ); app_main_func();
uint32_t app_addr;
pFunc app_main_func;
// USART_Cmd(USART1,DISABLE); //
__HAL_SYSCFG_REMAPMEMORY_SYSTEMFLASH();
app_addr = *(uint32_t*)(APP_START_ADDRESS + 4);
app_main_func = (pFunc)app_addr;
//
__set_MSP( *(uint32_t*)APP_START_ADDRESS );
app_main_func();
查看更多
rt-thread本身没有,但你所用的芯片软件包里面可能有,407之前标准库时,就在board.c中重设了NVIC地址。你检查下你现在的APP代码是否也有,可以对VTOR寄存器设个写保护,看谁在修改他,一下就可以找到。
https://club.rt-thread.org/ask/question/428671.html这个帖子 看看专家的答复没按照专家做的 都是投机不挂是运气 挂了是正常
跳转前至少要关闭中断吧!
欢迎发表与嵌入式相关的技术分享、开发技巧、工具介绍、技术设想、职业心得、行业评论等对他人有启发,排版优雅的文章
回到 顶部
发布 问题
分享 好友
手机 浏览
投诉 建议
回到 底部
这种写保护,怎么设置啊?比如在RT-Studio或者MDK上面
@HappyTime
set breakpoint at 0x1000034
@HappyTime 对的407在开始的时候也定义了程序的起始地址这里没改,改过来就好了 ,感觉407这里多此一举。本来都跳进来执行程序了 然后执行到这里就崩了
VECT_TAB_OFFSET 就是地址偏移 加上偏移的宏定义就好了