- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
s3c2440 的LED 点灯裸机 C 程序
gcc 编译的时候-g 选项表示添加一些调试信息。
一个程序一般会经过(针对一个 linux 程序) (1)预处理
编译:.c 文件处理为.s 文件
汇编:.s 文件处理为.o 文件
链接:把多个.o 文件合并为一个可执行文件
nor flash 不能像内存一样写数据,必须先擦除再写。
main 函数被谁调用?main 函数的返回值给谁了?
答:普通应用程序,main 函数会被启动文件或者库文件调用。自己编写裸机函数,那么就需要自己完成 main 函数的调用工作。
启动文件需要完成的软件初始化工作包括:
(1)设置栈以及硬件初始化 (2)设置 main 函数的返回地址
(3)调用 main 函数(4)完成一些清理工作
注:如果使用的 RAM 是 2440 的片内 SRAM,那么设置栈的工作已经不需要做了,但是如果使用片外的 SDRAM,那么设置栈的工作必须要有。
硬件相关的初始化的工作包括:
(1)关闭看门狗(2)初始化时钟
(3)初始化 SDRAM
c 程序的启动文件
.text
.global _start
_start:
ldr r0, =0mov r1, #0x0 str r1, [r0]
ldr sp, =1024*4
@ WATCHDOG 寄存器地址
@ 写入 0,禁止 WATCHDOG,否则 CPU 会不断重启
@ 设置堆栈,注意:不能大于 4k, 因为现在可用的内存只有 4K @ nand flash 中的代码在复位后会移到内部 ram 中,此 ram 只有
4K
bl main @ 调用 C 程序中的 main 函数
halt_loop:
b halt_loop
C 程序文件:
#define GPBCON (*(volatile unsigned long *)0 #define GPBDAT (*(volatile unsigned long *)0
int main()
{
GPBCON = 0 // 设置 GPB5 为输出口, 位[11:10]=0b01 GPBDAT = 0 // GPB5 输出 0,LED1 点亮
return 0;
}
对 应 的 makefile 文 件 : led_on_c.bin : crt0.S led_on_c.c arm-linux-gcc -g -c -o crt0.o crt0.S
arm-linux-gcc -g -c -o led_on_c.o led_on_c.c
arm-linux-ld -Ttext 0x0000000 -g crt0.o led_on_c.o -o led_on_c_elf arm-linux-objcopy -O binary -S led_on_c_elf led_on_c.bin
arm-linux-objdump -D -m arm led_on_c_elf led_on_c.dis clean:
rm -f led_on_c.dis led_on_c.bin led_on_c_elf *.o
在下面的 makefile 文件中
CFLAGS := -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -ffreestanding leds.bin : crt0.S leds.c
arm-linux-gcc $(CFLAGS) -c -o crt0.o crt0.S arm-linux-gcc $(CFLAGS) -c -o leds.o leds.c
arm-linux-ld -Ttext 0x0000000 crt0.o leds.o -o leds_elf # arm-linux-ld -Tleds.lds crt0.o leds.o -o leds_elf
arm-linux-objcopy -O binary -S leds_elf leds.bin arm-linux-objdump -D -m arm leds_elf leds.dis clean:
rm -f leds.dis leds.bin leds_elf *.o
其中:
-Wall 是打开警告开关
s3c2440 裸机 LED 点灯代码(汇编代码)
.text
.global _start
_start:
LDR R0,=0@ R0 设为 GPBCON 寄存器。此寄存器
@ 用于选择端口B 各引脚的功能: @ 是输出、是输入、还是其他
MOV R1,#0STR LDR
R1,[R0] R0,=0x5600001
您可能关注的文档
- Python程序设计课后习题答案第三单元.docx
- Python程序设计课后习题答案第一单元.docx
- python的egg包的安装和制作.docx
- python分析和总结分析和总结.docx
- Python格式化输出分析和总结.docx
- python关键字分析和总结.docx
- python后台开发岗位职责和任职要求.docx
- Python环境安装分析和总结.docx
- python基础教程至60课.docx
- python基础总结分析和总结.docx
- 2025年无人机低空医疗物资投放社会效益报告.docx
- 2025年再生塑料行业包装回收利用产业链重构研究.docx
- 《AI眼镜周边产品市场机遇:2025年终端销售与需求增长洞察》.docx
- 2025年坚果加工行业深加工技术突破与市场拓展策略报告.docx
- 2025年通信芯片行业技术竞争与未来趋势报告.docx
- 《2025年生鲜电商配送冷链事故分析与预防措施》.docx
- 《商业航天融资新趋势2025民营卫星企业资本涌入估值分析市场动态》.docx
- 2025年能源绿色健康行业创新技术与市场应用报告.docx
- 2025年无人机低空医疗救援通信方案分析报告.docx
- 2025年烹饪机器人行业市场集中度分析报告.docx
原创力文档


文档评论(0)