1.点亮1个led程序分析(C语言)
来源:互联网 发布:ug软件好学吗 编辑:程序博客网 时间:2024/06/09 16:58
启动文件
@******************************************************************************@ File:crt0.S@ 功能:通过它转入C程序@****************************************************************************** .text.global _start_start: ldr r0, =0x53000000 @ WATCHDOG寄存器地址 mov r1, #0x0 str r1, [r0] @ 写入0,禁止WATCHDOG,否则CPU会不断重启 ldr sp, =1024*4 @ 设置堆栈,注意:不能大于4k, 因为现在可用的内存只有4K @ nand flash中的代码在复位后会移到内部ram中,此ram只有4K bl main @ 调用C程序中的main函数 并且保存返回地址到LR(链接寄存器)中halt_loop: b halt_loop
分析:
启动文件,主要完成: 1.关闭看门狗、设置堆栈、调用main函数(设置返回地址)、死循环
#关闭看门狗
ldr r0, =0x53000000 #看门狗 通过手册查找到 watchdog寄存器地址
mov r1, #0x0 #关闭看门狗
#设置堆栈指向4K的地方
ldr sp, =1024*4
#调用main函数
bl main
#死循环
halt_loop:
b halt_loop
----------------------------------------------------------------------
//led_on_c.c#define GPFCON (*(volatile unsigned long *)0x56000050)#define GPFDAT (*(volatile unsigned long *)0x56000054)int main(){ GPFCON = 0x00000100; // 设置GPF4为输出口, 位[9:8]=0b01 GPFDAT = 0x00000000; // GPF4输出0,LED1点亮 return 0;}
C文件 不做分析
----------------------------------------------------------------------
Makefile文件
led_on_c.bin : crt0.S led_on_c.c
arm-linux-gcc -g -c -o crt0.o crt0.S #编译 .S文件
arm-linux-gcc -g -c -o led_on_c.o led_on_c.c #编译.c 文件
arm-linux-ld -Ttext 0x00000000 -g crt0.o led_on_c.o -o led_on_c_elf #链接生成可执行文件 elf,定位代码段入口地址为 0x00000000
arm-linux-objcopy -O binary -S led_on_c_elf led_on_c.bin #elf文件转换成bin文件,方便烧写到开发板
arm-linux-objdump -D -m arm led_on_c_elf > led_on_c.dis #通过elf文件 生成 反汇编代码
clean:
rm -f led_on_c.dis led_on_c.bin led_on_c_elf *.o
- 1.点亮1个led程序分析(C语言)
- 1.点亮1个led程序分析(汇编)
- 点亮LED C语言程序
- mini2440之首个C程序点亮LED分析
- 裸机程序二:GPIO点亮led灯 c语言
- 编写第1个程序点亮LED汇编程序
- Cortex A8 LED 点亮程序分析
- 单片机小白学步系列(十四) 点亮第一个LED的程序分析
- tiny4412 裸机程序 四、设置栈和C语言点亮LED
- 分享一个香橙派PC2的C语言点亮LED程序
- 分享一个香橙派PC2的C语言点亮LED程序
- STM32F103C8T6-LED点亮程序
- 点亮led过程分析
- 【龙芯1c库】龙芯1c上通过pmon引导实现裸机程序点亮led
- 【记录】STM32学习之第一个程序(点亮LED)
- 第一个裸机程序---点亮led小灯
- MSP430F1612 第一个程序,点亮一个LED灯
- PIC单片机之第一个工程分析,点亮LED
- IPicture使用代码
- eclipse几种版本的命名规则
- POJ 1195 - Mobile phones 二维树状数组(单点更新..区间查询)
- 二分图最大团-poj3692
- [5v]Java继承中父类与子类的初始化顺序
- 1.点亮1个led程序分析(C语言)
- 天灾
- 跟我一起写 Makefile(三)-陈皓
- POJ3903 最长递增子序列
- oracle 行转列(用函数和游标完成)
- 编译链接 头文件 与 库
- virtualbox 主机虚拟机互ping通,虚拟机可以上网 ssh连接设置
- UIView的setNeedsDisplay和setNeedsLayout方法
- 捉虫记录:变量名设置出现重名