当前位置: 首页 > Linux

魏东山一期视频学习笔记-BareMetalLED

时间:2023-04-06 18:48:30 Linux

1、学习汇编指令ldrr0,[r1]:假设r1的值为x,将地址x处的数据(4字节)读取到r0strr0,[r1]:假设r1的值为x,把值ofr0将值(4字节)写入地址xmovr0,r1:将r1的值赋给r0,相当于c语言中的r0=r1movr0,#0x100:直接赋值操作r0=0x100ldrr0,=0x12345678:伪指令,最终会实现r0=0x12345678。因为一条arm指令是32位的,除了数据本身,它还包含指令,一条指令不能操作太长的数据subr0,r1,#4/register:subtraction表示r0=r1-4/registervalueaddr0,r1,#4/register:加法表示r0=r1+4/register值blxxx:执行两个操作1.跳转到xxx2.保存返回地址(下一条指令的地址)到lr寄存器2.代码编写和硬件连接(低电平点亮)寄存器地址PBCONGPBDAT表示PBCON需要配置为输出,GPBDAT对应位置设置为输出0/1电平。配置GPB5,6,7,8输出PBCON写入0x00015400+配置GPB5,6,7,8输出0100值0x00000040代码编译环境代码体积小Nas上使用docker版本ubuntu编译运行/etc/init.dd/sshstart:enablesshssh-p1922root@10.0.0.2:ssh指定端口assembly.text.global_start_start:ldrr0,=0x56000010movr1,#0x00015400strr1,[r0]ldrr0,=0x56000014ldrr1,=0x00000040strr1,[r0]halt:bhaltMakefileall:arm-linux-gcc-c-oled_on。oled_on.sarm-linux-ld-Ttext0x00000000led_on.o-oled_on_elfarm-linux-objcopy-Obinary-Sled_on_elfled_on.binclean:rm-fled_on.binled_on_elf*.oc指针的类型决定写入的字节数。C代码(点亮0010)intmain(){unsignedint*pGPBCON=(unsignedint*)0x56000010;无符号整数*pGPBDAT=(无符号整数*)0x56000014;*pGPBCON=0x00015400;*pGPBDAT=0x00000080;return0;}汇编代码(bootstrapC函数).text.global_start_start:/*setupstack*/ldrsp,=4096/*nandstartsetupat4ktop*///ldrsp,=0x4000000+4096/*norstart*//*callmain*/blmainhalt:bhaltMakefileall:arm-linux-gcc-c-oled.oled.carm-linux-gcc-c-ostart.ostart.Sarm-linux-ld-Ttext0x00000000start.oled.o-oled_elfarm-linux-objcopy-Obinary-Sled_elfled.binclean:rm-fled_on.binled_on_elf*.o目前使用的64M版本不支持minitools工具,所以使用supervivi与DNW相结合。win10可以使用DNW解释supervivi截图,选择v下载到nandflash