共2条
1/1 1 跳转至页
FLASH,SDRAM 从FLASH把程序拷贝到SDRAM

问
大家好!
我用的三星的S3C44B0X 我烧写了FLASH 但是在程序当中我要对FLASH进行操作。所以我想做一段程序,把在FLASH中烧写的所有程序在SDRAM中运行,我觉得这样不仅运行速度快了,而且不会造成在对FLASH操作过程中的冲突。
我现在主要的麻烦是:不知道该怎么下手做?
我初步认为:本来在FLASH 中烧写的程序首先是 进行存储器设置,和其它设置。然后程序跳转到中程序MAIN,我认为应该在主程序刚一开始就执行,把FLASH中除了初始化程序外所有的程序都复制到SDRAM 然后使程序跳转到SDRAM 中开始执行,当然要考虑代码量,给SDRAM 留出足够的堆栈,数据交换空间。
请哪位能给我指点一下,提供点思路,要是有例子让我参考一下就更好了。 答 1: 顶一下顶一下 答 2: 看u-boot代码 答 3: 参考 at91rm9200的loaderextern void AT91F_DBGU_Printk(char *);
extern char _stext,_etext,_sdata,_edata;
#define BOOT_VERSION "boot 1.01"
#define SRC 0x10020000
#define DST 0x21f00000
#define LEN 0x020000
void boot() {
int i;
char* ptr1=(char*)DST;
char* ptr2=(char*)SRC;
AT91F_DBGU_Printk ("\n\n\r"BOOT_VERSION" (" __DATE__ " - " __TIME__ ")\n\r");
AT91F_DBGU_Printk("\n\rCopying image...\n\n\r");
for(i=0; i<LEN; i++)
*ptr1++=*ptr2++;
asm("mov pc,%0" : : "r" (DST));
};
void recover(char* s) {
for(;;);
}; 答 4: 我的看法 S3C44B0X我毕设的时候玩过,不过没玩好.你说的不就是从计算机中把程序下载到SDRAM里吗?
只要在计算机上设置好下载到SDRAM的地址就可以了吧,那时我调试的时候,导师就是叫我这么做的. 答 5: 偶是在跳到MAIN之前执行程序COPY。 答 6: 各位都说的有各的道理我先弄弄先品 那是用仿真器 把程序全部下载到SDRAM 的.我说的是不用仿真器.要是没有COPY 到SDRAM 中的程序.下载的代码还是存储在FLASH当中运行的. 答 7: 参考以下以下一段代码这是philips的LPC2000系列ARM启动代码的一部分,实现的就是从FLASH中把数据区搬移到SRAM中。
.extern Image_RO_Limit /* End of ROM code (=start of ROM data) */
.extern Image_RW_Base /* Base of RAM to initialise */
.extern Image_ZI_Base /* Base and limit of area */
.extern Image_ZI_Limit /* to zero initialise */
ldr r0, =Image_RO_Limit /* Get pointer to ROM data */
ldr r1, =Image_RW_Base /* and RAM copy */
ldr r3, =Image_ZI_Base /* Zero init base => top of initialised data */
cmp r0, r1 /* Check that they are different */
beq NoRW
LoopRw: cmp r1, r3 /* Copy init data */
ldrcc r2, [r0], #4
strcc r2, [r1], #4
bcc LoopRw
NoRW: ldr r1, =Image_ZI_Limit /* Top of zero init segment */
mov r2, #0
LoopZI: cmp r3, r1 /* Zero init */
strcc r2, [r3], #4
bcc LoopZI 答 8: .u-boot-1.1.4/cpu/s3c44b0/start.S
被改烂了代码.
我用的三星的S3C44B0X 我烧写了FLASH 但是在程序当中我要对FLASH进行操作。所以我想做一段程序,把在FLASH中烧写的所有程序在SDRAM中运行,我觉得这样不仅运行速度快了,而且不会造成在对FLASH操作过程中的冲突。
我现在主要的麻烦是:不知道该怎么下手做?
我初步认为:本来在FLASH 中烧写的程序首先是 进行存储器设置,和其它设置。然后程序跳转到中程序MAIN,我认为应该在主程序刚一开始就执行,把FLASH中除了初始化程序外所有的程序都复制到SDRAM 然后使程序跳转到SDRAM 中开始执行,当然要考虑代码量,给SDRAM 留出足够的堆栈,数据交换空间。
请哪位能给我指点一下,提供点思路,要是有例子让我参考一下就更好了。 答 1: 顶一下顶一下 答 2: 看u-boot代码 答 3: 参考 at91rm9200的loaderextern void AT91F_DBGU_Printk(char *);
extern char _stext,_etext,_sdata,_edata;
#define BOOT_VERSION "boot 1.01"
#define SRC 0x10020000
#define DST 0x21f00000
#define LEN 0x020000
void boot() {
int i;
char* ptr1=(char*)DST;
char* ptr2=(char*)SRC;
AT91F_DBGU_Printk ("\n\n\r"BOOT_VERSION" (" __DATE__ " - " __TIME__ ")\n\r");
AT91F_DBGU_Printk("\n\rCopying image...\n\n\r");
for(i=0; i<LEN; i++)
*ptr1++=*ptr2++;
asm("mov pc,%0" : : "r" (DST));
};
void recover(char* s) {
for(;;);
}; 答 4: 我的看法 S3C44B0X我毕设的时候玩过,不过没玩好.你说的不就是从计算机中把程序下载到SDRAM里吗?
只要在计算机上设置好下载到SDRAM的地址就可以了吧,那时我调试的时候,导师就是叫我这么做的. 答 5: 偶是在跳到MAIN之前执行程序COPY。 答 6: 各位都说的有各的道理我先弄弄先品 那是用仿真器 把程序全部下载到SDRAM 的.我说的是不用仿真器.要是没有COPY 到SDRAM 中的程序.下载的代码还是存储在FLASH当中运行的. 答 7: 参考以下以下一段代码这是philips的LPC2000系列ARM启动代码的一部分,实现的就是从FLASH中把数据区搬移到SRAM中。
.extern Image_RO_Limit /* End of ROM code (=start of ROM data) */
.extern Image_RW_Base /* Base of RAM to initialise */
.extern Image_ZI_Base /* Base and limit of area */
.extern Image_ZI_Limit /* to zero initialise */
ldr r0, =Image_RO_Limit /* Get pointer to ROM data */
ldr r1, =Image_RW_Base /* and RAM copy */
ldr r3, =Image_ZI_Base /* Zero init base => top of initialised data */
cmp r0, r1 /* Check that they are different */
beq NoRW
LoopRw: cmp r1, r3 /* Copy init data */
ldrcc r2, [r0], #4
strcc r2, [r1], #4
bcc LoopRw
NoRW: ldr r1, =Image_ZI_Limit /* Top of zero init segment */
mov r2, #0
LoopZI: cmp r3, r1 /* Zero init */
strcc r2, [r3], #4
bcc LoopZI 答 8: .u-boot-1.1.4/cpu/s3c44b0/start.S
被改烂了代码.
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【EEPW电子工程师创研计划】技术变现通道已开启~ | |
发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
【EEPW在线】E起听工程师的声音! | |
“我踩过的那些坑”主题活动——第001期 | |
高校联络员开始招募啦!有惊喜!! | |
【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
送您一块开发板,2025年“我要开发板活动”又开始了! | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
分享汽车通信和多媒体总线结构被打赏20分 | |
【我踩过的那些坑】结构堵孔导致的喇叭无声问题被打赏50分 | |
NUCLEO-U083RC学习历程38+串口通过队列的方式输出两个字符串被打赏20分 | |
【我踩过的那些坑】分享一下调试一款AD芯片的遇到的“坑”被打赏50分 | |
电流检测模块MAX4080S被打赏10分 | |
【我踩过的那些坑】calloc和malloc错误使用导致跑飞问题排查被打赏50分 | |
分享电控悬架的结构与工作原理(一)被打赏20分 | |
多组DCTODC电源方案被打赏50分 | |
【我踩过的那些坑】STM32cubeMX软件的使用过程中的“坑”被打赏50分 | |
新手必看!C语言精华知识:表驱动法被打赏50分 |