首页 > 其他 > 详细

汇编led试验

时间:2021-05-16 14:19:55      阅读:13      评论:0      收藏:0      [点我收藏+]

为什么学习汇编

  初始化外设、ddr、堆栈(设置sp指针,一般指向ddr,设置好c语言运行环境)

操作流程

  灯原理图、参考手册、

初始化io流程

  时钟

  设置io复用,设为gpio

  配置电气属性

  设置输入、输出

  输出高、低

arm汇编基础

  设置sp指针

  初始化ddr(芯片本身没有ram、或内部ddr控制器不开放给用户,代码需要在ddr中运行,需要汇编来初始化ddr控制器)

  gnu汇编语法

    略

    一条一条指令构成

      处理器内部数据传输指令

      储存器访问指令(ram)

        ldr

        str

      压栈和出栈指令

      跳转指令

      算数运算指令

      逻辑运算指令

a7架构

  9个模式

  寄存器组

    r0 - r15

    cpsr   

编写驱动

  vscode

编译

  编译程序

    将.c  .s文件变为 .o    arm-linux-gnueabihf-gg  -g -c leds.s -o led.o

    将所有的 .o 文件连接为 elf格式的可执行文件  arm-linux-gnueabihf-ld -Ttext 0x87800000 led.o -o led.elf

    将elf文件转为bin文件  arm-linux-gnueabihf-objcopy -O binary -S -g led.elf led.bin

    将elf文件反汇编(可选)arm-linux-gnueabihf-objdump -D led.elf > led.dis

  连接就是:将所有的.o 文件连接在一起,并且连接到指定的地方。连接的时候要指定连接起始地址。连接起始地址就是代码运行的起始地址。对于 来说,连接地址指向ram地址(rom不对外开放)。ram分为内部ram和外部ram(ddr)。内部ram地址范围0x900000 - 0x91ffff;外部ram地址范围0x80000000 - 0x9fffffff(对于512M ddr说)。裸机开发链接地址0x87800000

  要使用ddr,那么必须要初始化ddr。.bin文件要添加一个头部,这个头部信息包含了ddr的初始化参数。

  运行地址和链接地址文章:https://blog.csdn.net/CSDNmianfeixiazai001/article/details/81455692    

烧写程序bin文件

  stm32 flash

  sd卡、emmc、nand、nor、spi flash,裸机烧写到sd卡

  格式化fat32

  在linux下烧写bin文件

    烧写不是将文件拷到sd卡,烧写到sd卡绝对地址上

    找到sd,目录位置/dev/sdx

    烧写

    拨码开关

建一个Makefile文件

1 leds.bin:leds.s
2     arm-linux-gnueabihf-gcc -g -c leds.s -o led.o
3     arm-linux-gnueabihf-ld -Ttext 0x87800000 led.o -o led.elf
4     arm-linux-gnueabihf-objcopy -O binary -S -g led.elf led.bin
5     arm-linux-gnueabihf-objdump led.elf > led.dis
6 
7 clean:
8     rm -rf *.o led.elf led.bin led.dis

注意:

  嵌入式Linux开发中基本上不适用jlink

  调试点灯、串口

 

汇编led试验

原文:https://www.cnblogs.com/chino-ll/p/14773437.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!