汇编点亮LED
vscode调整
- 终端字体
terminal>intergrated:font family
monospace
- 加入汇编插件
ARM
- vscode权限受限,修改文件权限。
sudo chmod 777 -R filename
编程步骤
- 使能GPIO时钟
- 设置引脚复用为GPIO
- 设置引脚属性(上下拉、速率、驱动能力)
- 控制GPIO引脚输出高低电平
程序编译步骤
编译->链接->格式转换->添加文件头
- 下载裸机的gcc编译器
sudo apt-get install gcc-arm-none-eabi
- 编译汇编文件为可重定位文件led.o
arm-none-eabi-gcc -c led.s(S/c) -o led.o
- -g:加入GDB能够使用的调试信息,能够使用GDB调试
- -c:对源程序xxx.c(S/s)进行预处理、编译、汇编操作,生成xxx.o文件
- led.S:要编译的源文件
- -o:指定输出文件名,不加“-o led..o”则会默认输出led.o
- 把重定位文件链接起来,得到可执行程序(elf文件)
arm-none-eabi-ld -Ttext 0x80000000 led.o -o led.elf
- -Ttext 0x80000000:设置程序代码段的起始地址为0x80000000
- -o:指定输出文件名
- 把elf文件去掉冗余的段和elf头,得到纯净的bin文件
arm-none-eabi-objcopy -O binary -S -g led.elf led.bin
- -O binary:指定输出文件格式为二进制文件
- -S:不从源文件中复制重定位信和符号信息
- -g:不从源文件中复制可调试信息
- 给bin文件添加6ull特殊的头部信息(IVT+boot data+DCD),并烧录到sd卡
./mkimage.sh XXX.bin
汇编文件.s与.S的区别
.s 汇编语言源程序;汇编
.S 汇编语言源程序;预处理、汇编
.s文件在后期阶段不在进行预处理操作,所以不能在.s文件代码中写预处理代码
.S文件能进行预处理、汇编等操作,所以.S文件中可以写预处理的代码
ubuntu18.08路径
/home/user/…/…/…
比如我的目录结构为:/home/lalalalisa/…/…/