首页 > 编程语言 >汇编LED点灯下载验证

汇编LED点灯下载验证

时间:2022-10-31 20:48:05浏览次数:35  
标签:汇编 gnueabihf led 点灯 文件 gcc linux LED arm

摘要:学习开发板都会从简单地点灯实验开始对开发板或单片机的学习之路,这里也不例外,因为点灯的步骤不像普通的32那样简单,需要对步骤做一定的记录,方便后面需要的时候在拿出来看。

编译代码

  1. arm-linux-gnueabihf-gcc 编译文件
    arm-linux-gnueabihf-gcc -g -c led.s -o led.o
    这里生成一个.o文件,需要将.o文件链接起来组合成可执行文件。
  2. arm-linux-gnueabihf-ld 链接文件
    arm-linux-gnueabihf-ld -Ttext 0X87800000 led.o -o led.elf

    这里的链接.o文件到.elf文件,是类似于STM32中被封装好的.o文件指向芯片ROM地址。同样的我们这里的.o文件也需要链接地址,这里的0X87800000就是需要链接的地址(全都链接在DDR中),在参考手册中,这个地址是Uboot的地址(统一的)

  3. arm-linux-gnueabihf-objcopy 格式转换

    arm-linux-gnueabihf-objcopy -O binary -S -g led.elf led.bin

    这里将.elf文件转换为.bin可执行文件

  4.  arm-linux-gnueabihf-objdump 反汇编

    arm-linux-gnueabihf-objdump -D led.elf > led.dis

     这个是需要查看汇编代码来调试代码,所以进行反汇编的(里面都是汇编代码,还有内存分配情况),事实上我们写Makefile的时候的目标还是可执行文件.bin文件。

     

Makefile使用:

 在如果需要修改上面的.s文件,那么就需要把上面的代码重新敲一遍,所以Makefile会简化这种操作。首先简单介绍Makefile的用法(手册第三章具体讲过了)。

led.bin:led.s
    arm-linux-gnueabihf-gcc -g -c led.s -o led.o
    arm-linux-gnueabihf-ld -Ttext 0X87800000 led.o -o led.elf
    arm-linux-gnueabihf-objcopy -O binary -S -g led.elf led.bin
    arm-linux-gnueabihf-objdump -D led.elf > led.dis
clean:
    rm -rf *.o led.bin led.elf led.dis

这里Makefile按照一定的格式写的,从CSDN上复制了一个方便理解的。我们的led.s就是我们需要的可执行文件,也就是目标target,这里的有源文件只有led.s一个,也就是depend依赖,下面的就是command命令。

# 举例: 有源文件 a.c b.c c.c head.h, 需要生成可执行程序 app
################# 例1 #################
app:a.c b.c c.c
	gcc a.c b.c c.c -o app

################# 例2 #################
# 有多个目标, 多个依赖, 多个命令
app,app1:a.c b.c c.c d.c
	gcc a.c b.c -o app
	gcc c.c d.c -o app1
	
################# 例3 #################	
# 规则之间的嵌套
app:a.o b.o c.o
	gcc a.o b.o c.o -o app
# a.o 是第一条规则中的依赖
a.o:a.c
	gcc -c a.c
# b.o 是第一条规则中的依赖
b.o:b.c
	gcc -c b.c
# c.o 是第一条规则中的依赖
c.o:c.c
	gcc -c c.c

在工程文件中,我们输入touch Makefile创造一个文件,在里面写之前的代码,然后就可以保存退出。出来敲make就能运行四行程序,敲make clean就能清除多余的文件。

注意:在敲Makefile代码的时候一定要用TAB键代替空格键,如果不习惯就去搜一下如何修改(建议还是用tab)。

代码烧写:(因为疫情,开发板在实验室,所以等疫情后再补上这部分内容。先把步骤写下来)

  1. 将Ubuntu下烧写工具imxdownload复制到项目文件中,与可执行文件led.bin文件一个目录
  2. 给予imxdownload可执行权限chmod 777 imxdownload,文件会变成绿色,证明权限给予成功
  3. 确定烧写的SD卡,拔插实验
  4. 向SD卡烧写bin文件./imxdownload led.bin /dev/sdd //不能烧写到/dev/sda 或 sda1 设备里面!那是系统磁盘,生成一个load.imx文件
  5. 代码验证,将板子上的BOOT——CFG拨码,1和7拨上去。按下复位键,一秒后灯亮起。

标签:汇编,gnueabihf,led,点灯,文件,gcc,linux,LED,arm
From: https://www.cnblogs.com/cjl520/p/16845684.html

相关文章

  • 记录一个注意点:SimpleDateFormat转化问题
    SimpleDateFormatsimpleDateFormat=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss");Stringformatdate=simpleDateFormat.format(newDate());//formatdate就是当前......
  • c#的sealed修饰符
    看书时发现sealed可以阻止类被继承,但是sealed能否作用于方法或者属性呢?答案是肯定的!当sealed用来修饰方法时,只能对派生类使用,这个方法将重写基类的方法,但是该类的派生类......
  • [单片机框架][bsp层][cx32l003][bsp_led] LED配置和使用
    LED是一种半导体器件,大家其实对LED并不陌生,各种电器的指示灯、手机键盘灯、LED液晶屏的背光、高亮LED手电筒等,都是通过LED发光的。LED有两种主要用途,一种是作为指示灯;另一种......
  • [单片机框架][bsp层][AT32F415][bsp_led] LED配置和使用
    重新封装一层函数,用于bsp层函数,方便调用。voidbsp_led_init(void);voidbsp_led_deinit(void);voidbsp_led_on(bsp_led_tch);voidbsp_led_off(bsp_led_tch);voidb......
  • springboot之spring-boot-admin显示actuator数据报错: Application run failed org.yam
    1.报错显示:13:43:13.869[restartedMain]DEBUGorg.springframework.boot.diagnostics.FailureAnalyzers-FailureAnalyzerorg.springframework.boot.diagnostics.anal......
  • 驱动开发:内核LDE64引擎计算汇编长度
    本章开始LyShark将介绍如何在内核中实现InlineHook挂钩这门技术,内核挂钩的第一步需要实现一个动态计算汇编指令长度的功能,该功能可以使用LDE64这个反汇编引擎,该引擎小巧简......
  • 帝国CMS:审核文章报错-“Unknown column 'isbeautify' in 'filed list' select id,clas
    帝国插件isbeautify安装开启后,审核文章报错:“Unknowncolumn'isbeautify'in'filedlist'selectid,classid,groupid,newspath.......isbeautifyfrom***_ecms_app_che......
  • esp32点亮OLED屏幕
    esp32点亮4pinOLED屏幕接线方法屏幕是4pin的使用iic的协议使用SSD1306屏库测试代码#include<Wire.h>#include"SSD1306.h"SSD1306display(0x3c,21,18);void......
  • Linux汇编LED驱动
    MX6U的IO口作为GPIO的步骤总结:使能GPIO对应的时钟设置寄存器IOMUXC_SW_MUX_CTL_PAD_XX_XX,设置IO的复用功能,使其复用为GPIO功能。设置寄存器IOMUXC_SW_PAD_CTL_PAD......
  • 关于内联汇编中的分号;
    在内联汇编中常看到分号,尤其在Linux内核源码中,内联汇编中的分号经常出现,例如下面的代码片段.可以看到在vscode中,分号被错误地解析成了纯汇编中的注释符,而实际上分号是两条......