汇编点亮LED

vscode调整

  • 终端字体
  1. terminal>intergrated:font family
  2. monospace
  • 加入汇编插件
ARM
  • vscode权限受限,修改文件权限。
sudo chmod 777 -R filename

编程步骤

  • 使能GPIO时钟
  • 设置引脚复用为GPIO
  • 设置引脚属性(上下拉、速率、驱动能力)
  • 控制GPIO引脚输出高低电平

程序编译步骤

编译->链接->格式转换->添加文件头
  1. 下载裸机的gcc编译器
sudo apt-get install gcc-arm-none-eabi
  1. 编译汇编文件为可重定位文件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
  1. 把重定位文件链接起来,得到可执行程序(elf文件)
arm-none-eabi-ld -Ttext 0x80000000 led.o -o led.elf
  • -Ttext 0x80000000:设置程序代码段的起始地址为0x80000000
  • -o:指定输出文件名
  1. 把elf文件去掉冗余的段和elf头,得到纯净的bin文件
arm-none-eabi-objcopy -O binary -S -g led.elf led.bin
  • -O binary:指定输出文件格式为二进制文件
  • -S:不从源文件中复制重定位信和符号信息
  • -g:不从源文件中复制可调试信息
  1. 给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/…/…/

ubuntu使用SD card烧录程序成功

Ubuntu 18.04-2020-09-30-16-18-25.png