环境配置windows下的VS codeUbuntu安装交叉编译器 arm-linux-gnueabihf-gcc使用filezilla将windows上的vscode文件上传至Linux Ubuntu启动代码异常向量表配置.gobal全局定义标签_start作为汇编程序的默认起点标签配置配置标签时可以前置加_ 以便和普通标签或系统标签做区分异常向量表ARM架构 规定异常向量表位置固定配置对应位置的异常向量复位时钟配置_enable_clocks: // CCGR0 ldr r0, 0x020C4068 ldr r1, 0xFFFFFFFF str r1, [r0] //CCGR1 ldr r0, 0x020C406C ldr r1, 0xFFFFFFFF str r1, [r0] //CCGR2 ldr r0, 0x020C4070 ldr r1, 0xFFFFFFFF str r1, [r0] //CCGR3 ldr r0, 0x020C4074 ldr r1, 0xFFFFFFFF str r1, [r0] //CCGR4 ldr r0, 0x020C4078 ldr r1, 0xFFFFFFFF str r1, [r0] //CCGR5 ldr r0, 0x020C407C ldr r1, 0xFFFFFFFF str r1, [r0] //CCGR6 ldr r0, 0x020C4080 ldr r1, 0xFFFFFFFF str r1, [r0] bx lrLED初始化原理引脚i.max6ull中GPIO后没有数字时归属GPIO1_led_init: // 配置GPIO1_IO03引脚复用功能GPIO1_IO03 ldr r0, 0x020E0068 mov r1, #0x05 str r1, [r0] // 配置引脚电气属性: 默认属性 ldr r0, 0x020E02F4 ldr r1, 0x10B0 str r1, [r0] // 配置引脚工作模式输出模式 ldr r0, 0x0209C004 ldr r1, [r0] orr r1, r1, #(1 3) str r1, [r0] bx lr功能复用加载IOMUX控制寄存器地址 20E_0000h base 68h offset 0x20E 0068将引脚功能从默认模式切换为GPIO GPIO_IO03 gpio1模式代码 0101 0x05str指令将配置写回寄存器 将0x05 模式存放在控制寄存器的地址实现引脚初始化电气属性加载PAD控制寄存器地址 20E_0000h base 2F4h offset 0x20E 02F4配置电气参数驱动强度、压摆率、上下拉、开漏/推挽 0x10B0 0001 0000 1011 0000str指令将配置写回寄存器 将0x10B0 模式存放在PAD寄存器的地址实现电气配置工作模式输出模式加载GPIO1的GDIR方向控制寄存器地址将GPIO_IO03设为输出即通过orr指令将第三位置1str指令将配置写回寄存器 将结果返回寄存器地址实现配置输出模式LED亮_led_on: // LED亮:向GPIO1_IO03写入低电平 ldr r0, 0x0209C000 ldr r1, [r0] bic r1, r1, #(1 3) str r1, [r0] bx lr测试只汇编不链接 -o只编译不链接 -g保留编译信息arm-linux-gnueabihf-gcc -g -c led.S -o led.o链接代码到特定地址 得到可执行可连接程序 linux executable linkable fileTtext指定代码段加载地址-o输出ELF格式可执行文件arm-linux-gnueabihf-ld -Ttext 0x87800000 led.o -o led.elf格式转换-O binary输出二进制格式-S去除符号表-g去除调试信息arm-linux-gnueabihf-objcopy -O binary -S -g led.elf led.bin反汇编可省略 -D反汇编所有段arm-linux-gnueabihf-objdump -D led.elf led.dis烧录imxdownload 是正点原子开发、面向 NXP i.MX6ULLi.MX6U 的 Linux 平台命令行工具可执行程序原理给普通.bin裸机程序自动加上IVT、DCD、Boot Data启动头部生成 i.MX 芯片 BootROM 能够识别的启动镜像直接烧写到 SD 卡。./imxdownload led.bin /dev/sdbBOOT