完善资料让更多小伙伴认识你,还能领取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) |
|
|
|
只有小组成员才能发言,加入小组>>
463 浏览 1 评论
CH579M+RT-Thread,RTC从Sleep模式唤醒失败是什么原因?
2868 浏览 2 评论
2357 浏览 1 评论
810浏览 2评论
CH569通过HSPI实现USB3.0和FPGA高速双向通讯
632浏览 1评论
494浏览 1评论
CH32F103C8T6使用当前官网上的CDC例程会出现设备描述符请求失败
358浏览 1评论
632浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 12:11 , Processed in 0.969045 second(s), Total 83, Slave 66 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号