完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
生成.bin但是烧进开发板,看不见灯闪烁,是什么原因,是链接脚本写错了吗
start.文件 .equ MEM_CTL_BASE, 0x48000000 //@.equ 命令用于把常量值设置为可以在文本段中使用的符号 .equ SDRAM_BASE, 0x30000000 //@类似于C语言中#define @0x48000000-BWSCON,0x30000000-BANK6 .text .global _start _start: bl diable_watch_dog //关看门狗 bl memsteup //设置存储器 bl copy_sdram //把代码复制到SDRAM中 ldr pc,=on_sdram on_sdram: ldr sp ,=0x34000000//设置堆栈的指针 ldr lr ,=halt_loop//lr链接地址寄存器, ldr pc ,=main//调用C函数因为C函数执行完需要返回返回的时候pc指针指向lr中的地址 halt_loop: b halt_loop init.c文件 #include"s3c24xx.h" void diable_watch_dog(); //关看门狗 void memsteup(); //设置存储器 void copy_sdram(); //把代码复制到SDRAM中 //关看门狗 void diable_watch_dog() { WTCON=0; } //设置存储控制器 使用SDRAM void memsteup() { volatile unsigned long *p = (volatile unsigned long *)MEM_CTL_BASE; /* 这个函数之所以这样赋值,而不是像前面的实验(比如mmu实验)那样将配置值 * 写在数组中,是因为要生成”位置无关的代码”,使得这个函数可以在被复制到 * SDRAM之前就可以在steppingstone中运行 */ /* 存储控制器13个寄存器的值 */ p[0] = 0x22011110; //BWSCON p[1] = 0x00000700; //BANKCON0 p[2] = 0x00000700; //BANKCON1 p[3] = 0x00000700; //BANKCON2 p[4] = 0x00000700; //BANKCON3 p[5] = 0x00000700; //BANKCON4 p[6] = 0x00000700; //BANKCON5 p[7] = 0x00018005; //BANKCON6 p[8] = 0x00018005; //BANKCON7 p[9] = 0x008C04F4; p[10] = 0x000000B1; //BANKSIZE p[11] = 0x00000030; //MRSRB6 p[12] = 0x00000030; //MRSRB7 } //把代码复制到SDRAM中 void copy_sdram() { unsigned int *pdwSrc = (unsigned int *)0; unsigned int *pdwDest = (unsigned int *)0x30000000; while (pdwSrc < (unsigned int *)4096) { *pdwDest = *pdwSrc; pdwDest++; pdwSrc++; } } main.c文件 #include"s3c24xx.h" #include #define GPFCON (*(volatile unsigned long *)0x56000050) #define GOFDAT (*(volatile unsigned long *)0x56000054) #define GPF4_OUT (1<<8) #define GPF5_OUT (1<<10) #define GPF6_OUT (1<<12) void delay(int x) { int i; for(i=x;i>0;i--); } int main() { int s; GPFCON=GPF4_OUT|GPF5_OUT|GPF6_OUT; while(1) { delay(30000); GPFDAT=~(s<<4); if(++s==8) s=0; } return 0; } 链接脚本文件 SECTIONS{ . =0x30000000; . = ALIGN(4) ; .text : {*(.text)} . = ALIGN(4) ; .data : {*(.data)} . = ALIGN(4) ; .bss : {*(.bss)} } makefile objs:=start.o init.o main.o sdram.bin:$(objs) ARM-linux-ld -Tsdram.lds -o sdram_elf $^ arm-linux-objcopy -O binary -S sdram_elf $@ arm-linux-objdump -D -m arm sdram_elf>sdram.dis %.o:%.c arm-linux-gcc -Wall -O2 -c -o $@ $< %.o:%.S arm-linux-gcc -Wall -O2 -c -o $@ $< .PHONY:clean clean : rm -f *.o sdram_elf sdram_dis sdram.bin |
|
相关推荐
3个回答
|
|
老师代码都有提供,你先用老师代码实验,然后用对比软件对比差异,来定位。
|
|
|
|
老师讲的我可以运行,但学到后面看好多都是这样写的,所以我才这样写
|
|
|
|
第一行忘记设置栈指针
|
|
|
|
只有小组成员才能发言,加入小组>>
197个成员聚集在这个小组
加入小组为什么点亮LED的例子放在NORFlash上跑会出现奇怪的现象?
2156 浏览 6 评论
1964 浏览 5 评论
韦东山老师推出的《玩转ARM裸机实战》课程将帮你以上问题一扫而光!
4521 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 10:34 , Processed in 0.713517 second(s), Total 81, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号