完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我的 Jump to boot 功能有问题。我在地址 0x00000000 到 0x00010000 的闪存代码中有一个引导加载程序,在地址 0x00010000 到 0x00040000 的闪存代码中有一个应用程序。
这是我的链接器文件 开机 /* Specify the memory areas */ MEMORY { /* Flash */ m_interrupts (RX) : ORIGIN = 0x00000000, LENGTH = 0x00000400 m_flash_config (RX) : ORIGIN = 0x00000400, LENGTH = 0x00000010 m_text (RX) : ORIGIN = 0x00000410, LENGTH = 0x0f000 - 0x410 /* programe_flash*/ m_boot_version (RWX) : ORIGIN = 0x0000f000, LENGTH = 0x00000040 /*version number */ /* SRAM_L */ m_data (RW) : ORIGIN = 0x1FFFC000, LENGTH = 0x00004000 /* SRAM_U */ m_data_2 (RW) : ORIGIN = 0x20000000, LENGTH = 0x00003000 } 应用 /* Specify the memory areas */ MEMORY { /* Flash */ m_interrupts (RXW) : ORIGIN = 0x00010000, LENGTH = 0x00000400 m_flash_config (RXW) : ORIGIN = 0x00010400, LENGTH = 0x00000010 m_text (RXW) : ORIGIN = 0x00010410, LENGTH = 0x00030000 - 0x410 /* programe_flash*/ ccp_code_sav (RWX) : ORIGIN = 0x00030000, LENGTH = 0x00002000 /*8k*/ ccp_code_tem (RWX) : ORIGIN = 0x00032000, LENGTH = 0x00002000 /*8k*/ m_app_version (RWX) : ORIGIN = 0x00034000, LENGTH = 0x00001000 /*version number 4k*/ ROM_writeflas (RWX) : ORIGIN = 0x00035000, LENGTH = 0x00001000 /* ROM_writeflash 4k*/ /* data_flash */ app_programe_dat (RW) : ORIGIN = 0x10000000, LENGTH = 0x00001000 /*8k*/ eeprom_dat (RW) : ORIGIN = 0x10002000, LENGTH = 0x00002000 /*8k*/ /* SRAM_L */ m_data (RW) : ORIGIN = 0x1FFFC000, LENGTH = 0X00001000 /*4K place have initialize global variable that not include 0*/ m_data_2 (RW) : ORIGIN = 0x1FFFD000, LENGTH = 0x00003000 /*12k heap and stack size*/ /* SRAM_U */ m_data_RAM0 (RW) : ORIGIN = 0X20000000, LENGTH = 0x00001000/* 4k gloab */ m_data_RAM1 (RW) : ORIGIN = 0x20001000, LENGTH = 0x00001000/* 4k app data*/ m_data_RAM3 (RW) : ORIGIN = 0x20002000, LENGTH = 0x00001000/* 4k CCP data*/ } 只有 0x10000 的偏移量。这是我跳转到应用程序的代码: void JumpToExecute(uint32_t SP, uint32_t Startup) { /* Mask interrupt */ DISABLE_INTERRUPTS() __asm__("mov r0, #0x00"); __asm__("msr control, r0"); // nPRIV = 0 /* Set up Main and Process stack pointer (MSP, PSP)*/ __asm("ldr r0, =0x00010000"); __asm("msr msp, r0"); __asm("msr psp, r0"); /* Relocate Vector table */ S32_SCB->VTOR = (uint32_t)APP_IMAGE_START;// & S32_SCB_VTOR_TBLOFF_MASK; /* Set program counter (PC) to the start of the reset handler */ __asm("ldr r1, =0x00010004"); __asm("mov pc, r1"); } 当我在最后一条指令上设置断点时,即 __asm("mov pc, r1"); 它跳转到未知代码: 但是正如您在寄存器视图中看到的那样,我可以看到 sp 设置为 0x10000,pc 设置为 0x10004。 |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
1932个成员聚集在这个小组
加入小组我的项目我做主,使用GN+Ninja来完成构建系统(VSCode开发RT106X)
36420 浏览 0 评论
NXP IMX8应用处理器快速入门必备:技巧、使用、设计指南
4860 浏览 1 评论
6107 浏览 1 评论
6817 浏览 0 评论
NXP i.MX6UL开发板(linux系统烧录+规格+硬件+模块移植)使用手册
4248 浏览 0 评论
645浏览 2评论
求助,S32G上Core M启动后如何让Core A在Flash指定位置加载uboot?
641浏览 2评论
ESP32-WROVER-IE + LAN8720以太网,GPIO0电压只有1.6v,无法正常进入spi flash boot模式如何解决?
643浏览 2评论
求分享适用于PN7160 Android的NFC工厂测试应用程序
729浏览 2评论
844浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 23:54 , Processed in 1.009321 second(s), Total 75, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号