STM32F429的bootloader跳转到APP时跳转失败,无法进入APP |
您所在的位置:网站首页 › 定时跳转app › STM32F429的bootloader跳转到APP时跳转失败,无法进入APP |
遇到的问题: 1.原有的工程,可以正常从bootloader 跳转到APP,但是在修改了APP里一个结构体后,bootloader无法正常跳转到APP。 结构体修改前: typedef struct { uint32_t drugItems[1000]; } TS_DRUG_ITEMS_COLLECTION; struct TS_DRUG_CATEGORY { uint32_t category_index; TE_STR_ID default_name_id; uint32_t drug_item_count; uint32_t color; char name_strings[4][64]; TS_DRUG_ITEMS_COLLECTION drug_item_collection[4]; }; 结构体修改后: typedef struct { uint8_t flag; uint32_t drug_Item_index; } INFO; typedef struct { INFO drugItems[1000]; } TS_DRUG_ITEMS_COLLECTION; struct TS_DRUG_CATEGORY { uint32_t category_index; TE_STR_ID default_name_id; uint32_t drug_item_count; uint32_t color; char name_strings[4][64]; TS_DRUG_ITEMS_COLLECTION drug_item_collection[4]; }; 问题排查: 1.查看跳转部分代码 void AppEnterApplication(void) { T_U32 jump_address; TF_VOID_FUNCTION jump_fun; if (AppIsApplicationExist()) { /*disable all peripherals referrd to interrupt */ /*disable system tick */ SysTick->CTRL &= ~(SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk); //disable rtc RTC_DeInit(); RTC_ITConfig(RTC_IT_WUT, DISABLE); //disalbe usarts DrvUart2Deinit(); DrvUart1Deinit(); /* Jump to user application */ jump_address = *(T_U32*)(APPLICATION_ADDRESS + 4); jump_fun = (TF_VOID_FUNCTION)jump_address; /* Initialize user application's Stack Pointer */ __set_MSP(*(T_U32*)APPLICATION_ADDRESS); jump_fun(); }} 内存分配表: 0x8000’0000 --> bootloader 栈顶地址 下面是bootloader中断向量表: 0x8000’0004 --> Reset_Handle … --> 其他 中断 0x8000’FFFF --> bootloader end 0x8001’0000 --> app 栈顶地址 以下是app的中断向量表 0x8001’0004 --> Reset_Handle … --> 其他 中断 对照.icf文件(IAR的配置文件) 如下图1 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200528124722626.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTQ0NDk2Mw==,size_16,color_FFFFFF,t_70 发现ROM地址正常。 2. 查看IAR的.map文件 通过调试,获取app的Reset_Handle的地址 jump_address = 0x806’b108 在IAR的.map文件里,发现 .text ro code 0x806’b108 0x10 startup_stm32f429_439xx.o [2] 说明确实进入到启动文件。 顺着,map文件往下看,找到堆栈区 如下图2
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |