完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
想把程序从片内FLASH启动,将片外NOR FLASH中的应用加载到片外SDRAM中,然后跳转到片外SDRAM程序地址执行,可总是跳转不成功?
有哪位做过类似的项目,敬请指教。 |
|
相关推荐
9个回答
|
|
主要是操作指令指针:
指令指针寄存器ip,里面放置的不是指令,而是一个指向下一个将要去获取的指令的内存地址(所以它是一个指针)。它们的关系就是,CPU从指令指针寄存器ip 获得指令的内存地址,然后取出指令,放置到指令寄存器IR。接下来,指令指针寄存器ip自己加1(也就是指向下一条指令)。细节不了解. |
|
|
|
要想代码在SRAM中运行。有几个步骤需要做。
1、中断向量表需要修改,这样才能把中断向量表重新映射一遍。 #ifdef VECT_TAB_SRAM NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); #else NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0); #endif 2、分散加载要设置,就是设置你的代码段和数据段在ram的运行地址,就是arm手册中的运行域。 3、你的代码相当于boot 和app模式,boot在flash中执行,然后把app从nor flash搬到sram所在地址。 你的运行域地址就是代码搬移到sram所在的地址 |
|
|
|
这个你参考下
http://www.stmcu.org/bbs/article_244_539846.html 你需要编写另外一段BOOTLOADER代码负责上电搬移代码到RAM内。 |
|
|
|
回复第 3 楼 于2014-04-06 23:49:53发表:
要想代码在SRAM中运行。有几个步骤需要做。 1、中断向量表需要修改,这样才能把中断向量表重新映射一遍。 #ifdef VECT_TAB_SRAM NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); #else NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0); #endif 2、分散加载要设置,就是设置你的代码段和数据段在ram的运行地址,就是arm手册中的运行域。 3、你的代码相当于boot 和app模式,boot在flash中执行,然后把app从nor flash搬到sram所在地址。 你的运行域地址就是代码搬移到sram所在的地址 谢谢楼上的指导。不过看楼主的代码,好象是让它在片内SRAM上运行。我的意图是想让它在片外SDRAM上运行。 我跟踪过去看NVIC_SetVectorTable这个函数的源代码,它好象只有片内SRAM,片内FLASH两个定义。 我需要再增加一个到片外SDRAM的定义? 我自己在网上查资料是说,如果是片外SDRAM的话,好象不是直接跳转到片外SDRAM上执行,而是要配置SYSCFG_MEMRMP,将它映射到0x0000000那个地方。 现在我的程序是这样子的: #define APPLICATION_ADDRESS 0xd0000000 RCC_APB2PeriphResetCmd(RCC_APB2Periph_SYSCFG, ENABLE); SYSCFG_MemoryRemapConfig(SYSCFG_MemoryRemap_SDRAM); #define NVIC_VectTab_SDRAM ((uint32_t)0x10000000) NVIC_SetVectorTable(NVIC_VectTab_SDRAM, 0x0); /* Jump to user application */ JumpAddress = *(__IO uint32_t*) (APPLICATION_ADDRESS + 4); Jump_To_Application = (pFunction) JumpAddress; /* Initialize user application's Stack Pointer */ __set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS); Jump_To_Application(); 不过它并没有执行,请楼主帮我看一看,多谢。 |
|
|
|
是类似于IAP这样的功能么?
|
|
|
|
|
|
|
|
这个挺麻烦的吧,效率可以么。
|
|
|
|
楼主可以参考一些ARM9移植的例子,做一个bootloader.里面要实现NOR FLASH到SDRAM的复制,内存的管理(SDRAM的初始化及分配)。比如S3C2440的一些例程,再结合STM32的启动文件和sct文件进行修改。
|
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
881 浏览 0 评论
国产NSI1300D05-DSWVR放大芯片放大增益8.2或41的问题
895 浏览 0 评论
STM32串口接受中断使用C++STL中的queue导致所有中断失效
8670 浏览 1 评论
3394 浏览 0 评论
STM32配合可编程加密芯片SMEC88ST的防抄板加密方案设计
1379 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-2-24 19:43 , Processed in 0.610769 second(s), Total 56, Slave 51 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191