完善资料让更多小伙伴认识你,还能领取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) |
|
|
|
|
只有小组成员才能发言,加入小组>>
350 浏览 0 评论
CH582M HOST发送数到设备后,提交IN一直是2A是什么问题?
863 浏览 0 评论
1461 浏览 1 评论
CH579M+RT-Thread,RTC从Sleep模式唤醒失败是什么原因?
3418 浏览 2 评论
2822 浏览 1 评论
安卓手机支持外接otg扩展坞 然后使用ch340+ch9329控制电脑吗
1808浏览 1评论
1461浏览 1评论
350浏览 0评论
CH582M HOST发送数到设备后,提交IN一直是2A是什么问题?
863浏览 0评论
468浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 11:59 , Processed in 0.723826 second(s), Total 77, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
957