stm32f439中怎么让程序在片外SDRAM中执行
想把程序从片内FLASH启动,将片外NOR FLASH中的应用加载到片外SDRAM中,然后跳转到片外SDRAM程序地址执行,可总是跳转不成功?有哪位做过类似的项目,敬请指教。
RE:stm32f439中怎么让程序在片外SDRAM中执行
主要是操作指令指针:指令指针寄存器ip,里面放置的不是指令,而是一个指向下一个将要去获取的指令的内存地址(所以它是一个指针)。它们的关系就是,CPU从指令指针寄存器ip 获得指令的内存地址,然后取出指令,放置到指令寄存器IR。接下来,指令指针寄存器ip自己加1(也就是指向下一条指令)。细节不了解.:L
RE:stm32f439中怎么让程序在片外SDRAM中执行
要想代码在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所在的地址
RE:stm32f439中怎么让程序在片外SDRAM中执行
这个你参考下https://www.stmcu.org.cn/bbs/article_244_539846.html
你需要编写另外一段BOOTLOADER代码负责上电搬移代码到RAM内。
回复:stm32f439中怎么让程序在片外SDRAM中执行
回复第 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();
不过它并没有执行,请楼主帮我看一看,多谢。
RE:stm32f439中怎么让程序在片外SDRAM中执行
是类似于IAP这样的功能么?回复:stm32f439中怎么让程序在片外SDRAM中执行
在启动文件里面要加入代码回复:stm32f439中怎么让程序在片外SDRAM中执行
这个挺麻烦的吧,效率可以么。回复:stm32f439中怎么让程序在片外SDRAM中执行
楼主可以参考一些ARM9移植的例子,做一个bootloader.里面要实现NOR FLASH到SDRAM的复制,内存的管理(SDRAM的初始化及分配)。比如S3C2440的一些例程,再结合STM32的启动文件和sct文件进行修改。 我想弱弱的问下楼主,程序在外扩SDRAM中运行,运行效率高吗?能达到多搞的速率?我做了类似的试验,运行速率很低,能否一起讨论下?
页:
[1]