完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
void SW_Handler(void) { typedef void (*jump_func_t)(void); jump_func_t jmp = (jump_func_t)FLASH_AREA_BLD_SIZE;//FLASH_AREA_APP_SADDR jmp(); } 论坛已经搜索过IAP相关帖子,也有搜索到相关例程。 上述代码,FLASH_AREA_BLD_SIZE是0x8000,FLASH_AREA_APP_SADDR是0x08000000+FLASH_AREA_BLD_SIZE。 如果用FLASH_AREA_BLD_SIZE是可以跳转成功的,但是FLASH_AREA_APP_SADDR就无法成功跳转。这是什么问题?在其他帖子上看到回复,使用绝对地址和映射地址上一样的。但是实际上就不行。这是什么问题? 如果用FLASH_AREA_APP_SADDR的时候,汇编是这样的: 0x2b6 : lui a6,0x8008 0x2ba : jr a6 0x2bc : j 0x2bc |
|
相关推荐
2个回答
|
|
弄出来了,如果要用FLASH的实际地址,app的链接文件里面的FLASH也需要使用实际地址链接才行。
|
|
|
|
您好,如果需要用8000000这种去跳转,app的ld也要用物理地址,如果用基于0的这种去偏移,app的ld就从0开始,因为程序中会有基于当前pc去计算偏移的操作,如果用了基地址0的ld编译的程序,采样基地址800xxxx的跳转执行,会导致机器当前pc是基于8000xxxx偏移,但是机器码确是基于0去偏移的,指令执行错误是正常的。此外,如果需要 ld 文件中为实际物理地址,需要修改 ld 文件 flash 起始地址为 0x08000000,然后需要在启动文件最前面增加两行代码,如下:
lui t0,0x08000 jr 8(t0) |
|
|
|
只有小组成员才能发言,加入小组>>
522 浏览 1 评论
CH579M+RT-Thread,RTC从Sleep模式唤醒失败是什么原因?
2903 浏览 2 评论
2399 浏览 1 评论
868浏览 2评论
688浏览 1评论
riscv-none-embed-objcopy: \'PWM_Output.elf\': No such file这个咋解决,
418浏览 1评论
523浏览 1评论
请教一下,Mounriver 编译不成功:找不到库文件,怎么整
814浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 08:49 , Processed in 1.139087 second(s), Total 81, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号