完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
花了半天时间,研究怎样在QQ2440上跑裸核程序,针对在NAND FLASH运行和RAM运行.
开发环境: 1: RED HAT 9 Linux 2: QQ2440开发板 3: 嵌入式应用开发完全手册 针对NAND FLASH运行的源代码 startup.s .text .global _start _start: LDR R0,=0x53000000 MOV R1,#0x00 STR R1,[R0] LDR SP,=1024*4 BL main HALT_LOOP: B HALT_LOOP led_c.c #define GPBCON (*(volatile unsigned long *)0x56000010) #define GPBDAT (*(volatile unsigned long *)0x56000014) int main(void) { long i,j; GPBCON = 0x00000400; GPBDAT = 0x00; while(1) { GPBDAT ^= (1<<5); for(i=0;i<50;i++) { for(j=0;j<5000;j++); } } return 0; } makefile led_c.dis:led_c_elf ARM-linux-objdump -D -m arm led_c_elf > led_on.dis arm-linux-objcopy -O binary -S led_c_elf led_c.bin led_c_elf:startup.o led_c.o arm-linux-ld -Ttext 0x00000000 -g startup.o led_c.o -o led_c_elf led_c.o:led_c.c arm-linux-gcc -g -c -o led_c.o led_c.c startup.o:startup.s arm-linux-gcc -g -c -o startup.o startup.s clean: rm -f *.o led_c_elf led_c.bin led_c.dis 其中,通过startup.s中LDR SP,=1024*4语句把栈地址设置好,并且通过makefile中的arm-linux-ld -Ttext 0x00000000 -g startup.o led_c.o -o led_c_elf在编译的时候指定程序地址,因为我用的笔记本没有并口,所以我实用NOR FLASH启动,通过NOR的VIVI把程序下载NAND的0x00地址,使用VIVI下载选项. 针对RAM运行的源代码 startup.s .text .global _start _start: LDR R0,=0x53000000 MOV R1,#0x00 STR R1,[R0] LDR SP,=0x40001000 BL main HALT_LOOP: B HALT_LOOP led_c.c #define GPBCON (*(volatile unsigned long *)0x56000010) #define GPBDAT (*(volatile unsigned long *)0x56000014) int main(void) { long i,j; GPBCON = 0x00000400; GPBDAT = 0x00; while(1) { GPBDAT ^= (1<<5); for(i=0;i<50;i++) { for(j=0;j<5000;j++); } } return 0; } makefile led_c.dis:led_c_elf arm-linux-objdump -D -m arm led_c_elf > led_on.dis arm-linux-objcopy -O binary -S led_c_elf led_c.bin led_c_elf:startup.o led_c.o arm-linux-ld -Ttext 0x30000000 -g startup.o led_c.o -o led_c_elf led_c.o:led_c.c arm-linux-gcc -g -c -o led_c.o led_c.c startup.o:startup.s arm-linux-gcc -g -c -o startup.o startup.s clean: rm -f *.o led_c_elf led_c.bin led_c.dis 其中,通过startup.s中LDR SP,=0x40001000语句把栈地址设置好,其中0x40001000只是栈指针地址,也可以设置在别的内存地址,只要不是代码段就可以,并且通过makefile中的arm-linux-ld -Ttext 0x30000000 -g startup.o led_c.o -o led_c_elf在编译的时候指定程序地址,因为我用的笔记本没有并口,所以我实用RAM启动,通过NOR的VIVI把程序下载RAM地址,使用DOWNLOAD & RUN下载选项. 我是新手,虽说很简单,但也向作者请教了好久,在此说给大家看看,不知道是否也有人需要. |
|
相关推荐
13个回答
|
|
很好的方法:strong:
|
|
|
|
|
|
|
|
从NOR Flash启动的话,内部的4K RAM地址是0x40000000~0x40001000
|
|
|
|
明白了,Thanks
|
|
|
|
你用那个下载的速度快吗?
|
|
|
|
下载到NAND FLASH 或者RAM的时候都用的是nor flash 里的vivi 的down&run吗?
|
|
|
|
down&run 只是下载到内存,与FLASH无关
|
|
|
|
那他的第一种方法往NAND FLASH里的下的时候,是用nor flash里vivi里的哪个选项下载的呢?
怎么会下载到NAND FLASH里呢?是下到NAND FLASH还是从NAND FLASH的地址运行呢? 如果这个能下到NAND FLASH里,那还要SJF2440做什么? |
|
|
|
我的开发板是优龙的YLE2440,他们自己搞了个bootload,我也是用nor flash 中的bootload下载程序到 nand flash中运行的,就是不能单步运行。
|
|
|
|
这只是bootloader,它们无法实现单步执行
|
|
|
|
如果是从nand flash启动的话,是不是只要写了startup和led的代码烧进flash就可以了,可以自动搬运到SDRAM中运行是这个意思吗?不知道我理解的对不对?
|
|
|
|
从NAND启动的话,会自动把NAND的前4K代码复制到片内ARM去运行
|
|
|
|
哦,在问下版主,我的板子只有64M的nand flash,没有nor flash,那么我在移植bootloader的时后,只要在前4K实现把所有的代码从flash搬运进SDRAM的工作就行了吧,和完全手册介绍的方法相比,是不是只要在start.S中添加搬运的代码就可以了呢?
|
|
|
|
只有小组成员才能发言,加入小组>>
197个成员聚集在这个小组
加入小组为什么点亮LED的例子放在NORFlash上跑会出现奇怪的现象?
2108 浏览 6 评论
1919 浏览 5 评论
韦东山老师推出的《玩转ARM裸机实战》课程将帮你以上问题一扫而光!
4483 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-28 03:18 , Processed in 0.896085 second(s), Total 103, Slave 83 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号