Assembly 编程esp32和esp8266
如何使用汇编对ESP32或ESP8266模块进行编程?我不想使用arduino ide。我想出了一种用汇编语言编程atmel芯片的方法。我想学习如何在汇编中编程esp32和esp8266。这些工具很容易找到。我安装了一个预制柏油球 这是C和asm的混合,但您可以在所有asm中执行此操作 这是为esp8266准备的 向量Assembly 编程esp32和esp8266,assembly,iot,esp8266,esp32,esp8266wifi,Assembly,Iot,Esp8266,Esp32,Esp8266wifi,如何使用汇编对ESP32或ESP8266模块进行编程?我不想使用arduino ide。我想出了一种用汇编语言编程atmel芯片的方法。我想学习如何在汇编中编程esp32和esp8266。这些工具很容易找到。我安装了一个预制柏油球 这是C和asm的混合,但您可以在所有asm中执行此操作 这是为esp8266准备的 向量 .section .init .globl _start _start: call0 notmain ill .balign 0x100 .globl dummy
.section .init
.globl _start
_start:
call0 notmain
ill
.balign 0x100
.globl dummy
dummy:
ret.n
.balign 0x10
.globl PUT32
PUT32:
memw
s32i.n a3,a2,0
ret.n
.balign 0x10
.globl GET32
GET32:
memw
l32i.n a2,a2,0
ret.n
所以,c
建造
拆卸
Disassembly of section .init:
40100000 <_start>:
40100000: 001385 call0 4010013c <notmain>
...
40100100 <dummy>:
40100100: f00d ret.n
...
40100110 <PUT32>:
40100110: 0020c0 memw
40100113: 0239 s32i.n a3, a2, 0
40100115: f00d ret.n
...
40100120 <GET32>:
40100120: 0020c0 memw
40100123: 0228 l32i.n a2, a2, 0
40100125: f00d ret.n
Disassembly of section .literal:
40100128 <.literal>:
40100128: 0838 l32i.n a3, a8, 0
4010012a: 106000 and a6, a0, a0
4010012d: 03 .byte 0x3
4010012e: 046000 extui a6, a0, 0, 1
40100131: 03 .byte 0x3
40100132: 006000 rsil a0, 0
40100135: 35 .byte 0x35
40100136: 000c movi.n a0, 0
40100138: 0308 l32i.n a0, a3, 0
4010013a: 00 .byte 00
4010013b: 60 .byte 0x60
Disassembly of section .text:
4010013c <notmain>:
4010013c: e0c112 addi a1, a1, -32
4010013f: 61c9 s32i.n a12, a1, 24
40100141: fff9c1 l32r a12, 40100128 <GET32+0x8>
40100144: 7109 s32i.n a0, a1, 28
40100146: 0c2d mov.n a2, a12
40100148: 51d9 s32i.n a13, a1, 20
4010014a: 41e9 s32i.n a14, a1, 16
4010014c: 31f9 s32i.n a15, a1, 12
4010014e: fffd05 call0 40100120 <GET32>
40100151: cfae32 movi a3, 0xfffffecf
40100154: 103230 and a3, a2, a3
40100157: 0c2d mov.n a2, a12
40100159: fffb45 call0 40100110 <PUT32>
4010015c: fff421 l32r a2, 4010012c <GET32+0xc>
4010015f: 430c movi.n a3, 4
40100161: fffac5 call0 40100110 <PUT32>
40100164: fff3f1 l32r a15, 40100130 <GET32+0x10>
40100167: fff3d1 l32r a13, 40100134 <GET32+0x14>
4010016a: fff3e1 l32r a14, 40100138 <GET32+0x18>
4010016d: 430c movi.n a3, 4
4010016f: 0f2d mov.n a2, a15
40100171: fff9c5 call0 40100110 <PUT32>
40100174: 0c0c movi.n a12, 0
40100176: 0c2d mov.n a2, a12
40100178: cc1b addi.n a12, a12, 1
4010017a: fff845 call0 40100100 <dummy>
4010017d: f59cd7 bne a12, a13, 40100176 <notmain+0x3a>
40100180: 430c movi.n a3, 4
40100182: 202ee0 or a2, a14, a14
40100185: fff885 call0 40100110 <PUT32>
40100188: 0c0c movi.n a12, 0
4010018a: 0c2d mov.n a2, a12
4010018c: cc1b addi.n a12, a12, 1
4010018e: fff705 call0 40100100 <dummy>
40100191: f59cd7 bne a12, a13, 4010018a <notmain+0x4e>
40100194: fff546 j 4010016d <notmain+0x31>
把它变成这个
hexdump -C so.esp.bin
00000000 e9 01 00 00 00 00 10 40 00 00 10 40 98 01 00 00 |.......@...@....|
00000010 85 13 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00000110 0d f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000120 c0 20 00 39 02 0d f0 00 00 00 00 00 00 00 00 00 |. .9............|
00000130 c0 20 00 28 02 0d f0 00 38 08 00 60 10 03 00 60 |. .(....8..`...`|
00000140 04 03 00 60 00 35 0c 00 08 03 00 60 12 c1 e0 c9 |...`.5.....`....|
00000150 61 c1 f9 ff 09 71 2d 0c d9 51 e9 41 f9 31 05 fd |a....q-..Q.A.1..|
00000160 ff 32 ae cf 30 32 10 2d 0c 45 fb ff 21 f4 ff 0c |.2..02.-.E..!...|
00000170 43 c5 fa ff f1 f3 ff d1 f3 ff e1 f3 ff 0c 43 2d |C.............C-|
00000180 0f c5 f9 ff 0c 0c 2d 0c 1b cc 45 f8 ff d7 9c f5 |......-...E.....|
00000190 0c 43 e0 2e 20 85 f8 ff 0c 0c 2d 0c 1b cc 05 f7 |.C.. .....-.....|
000001a0 ff d7 9c f5 46 f5 ff 00 00 00 00 00 00 00 00 ae |....F...........|
000001b0
我会让你弄明白,工具源是可用的
如果这个链接停止工作,那么谷歌esptool.py很有希望找到一个
然后闪一下
esptool.py --port /dev/ttyUSB5 write_flash -fm qio 0x00000 so.esp.bin
我正在使用一个便宜的nodemcu克隆。我在亚马逊上花15美元买了5个。不需要额外的电线/usb uart等
改变这些
for(rx=0;rx<800000;rx++)
用于(rx=0;rx没有关于如何在低水平上使用wifi的文档。制造商提供了一个封闭源代码的C SDK来连接MCU外围设备,wifi的很大一部分是软件。esp MCU的CPU是Tensilica XtensaI强烈建议不要在汇编程序中对这些芯片进行编程。wifi和蓝牙需要大量si的软件堆栈ze是用C/C++编写的,在汇编程序中不容易使用。如果您想避免使用Arduino IDE或Arduino框架,有很多选择:ESP32的ESP-IDF框架,带有IDE集成的平台构建系统等。如果您想要wifi,请参阅上面关于这些库的内容。否则gnu工具是ea该芯片提供了一个相对简单的下载解决方案(从我关于这个平台的baremetal的笔记中可以看出,在你的代码之前有一个引导加载程序)。C或汇编你仍然可以链接和调用(wifi)库…@old\u timer这些工具是什么?比如我用avr gcc或avra编译代码,用avrdude上传到atmel芯片。是同样的方法吗?我应该用哪个c编译器来编程esp32和esp8266?是的,我明白了你的意思。谢谢大家。链接在这里是不受欢迎的-这完全是对仅链接答案规则的误解。T他的政策是,如果链接全部消失,答案仍然必须充分回答这个问题,但这并不总是发生的,因此链接仍然可以增加价值。包含链接不是一件坏事。这意味着只能通过链接到工具或其他东西来回答的问题不是好问题。但这里不是这样;a最低限度的教程适合于SO的答案,主要是关于编写什么代码,而不是在哪里找到工具。欢迎您,向前支付,回答一个或几个问题……嗨,老定时器。我可以请您使用拼写检查工具吗。@halfer感谢所有编辑,我正在努力做得更好。我想您已经修复了拼写。。。
hexdump -C so.bin
00000000 85 13 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00000100 0d f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000110 c0 20 00 39 02 0d f0 00 00 00 00 00 00 00 00 00 |. .9............|
00000120 c0 20 00 28 02 0d f0 00 38 08 00 60 10 03 00 60 |. .(....8..`...`|
00000130 04 03 00 60 00 35 0c 00 08 03 00 60 12 c1 e0 c9 |...`.5.....`....|
00000140 61 c1 f9 ff 09 71 2d 0c d9 51 e9 41 f9 31 05 fd |a....q-..Q.A.1..|
00000150 ff 32 ae cf 30 32 10 2d 0c 45 fb ff 21 f4 ff 0c |.2..02.-.E..!...|
00000160 43 c5 fa ff f1 f3 ff d1 f3 ff e1 f3 ff 0c 43 2d |C.............C-|
00000170 0f c5 f9 ff 0c 0c 2d 0c 1b cc 45 f8 ff d7 9c f5 |......-...E.....|
00000180 0c 43 e0 2e 20 85 f8 ff 0c 0c 2d 0c 1b cc 05 f7 |.C.. .....-.....|
00000190 ff d7 9c f5 46 f5 ff |....F..|
00000197
hexdump -C so.esp.bin
00000000 e9 01 00 00 00 00 10 40 00 00 10 40 98 01 00 00 |.......@...@....|
00000010 85 13 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00000110 0d f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000120 c0 20 00 39 02 0d f0 00 00 00 00 00 00 00 00 00 |. .9............|
00000130 c0 20 00 28 02 0d f0 00 38 08 00 60 10 03 00 60 |. .(....8..`...`|
00000140 04 03 00 60 00 35 0c 00 08 03 00 60 12 c1 e0 c9 |...`.5.....`....|
00000150 61 c1 f9 ff 09 71 2d 0c d9 51 e9 41 f9 31 05 fd |a....q-..Q.A.1..|
00000160 ff 32 ae cf 30 32 10 2d 0c 45 fb ff 21 f4 ff 0c |.2..02.-.E..!...|
00000170 43 c5 fa ff f1 f3 ff d1 f3 ff e1 f3 ff 0c 43 2d |C.............C-|
00000180 0f c5 f9 ff 0c 0c 2d 0c 1b cc 45 f8 ff d7 9c f5 |......-...E.....|
00000190 0c 43 e0 2e 20 85 f8 ff 0c 0c 2d 0c 1b cc 05 f7 |.C.. .....-.....|
000001a0 ff d7 9c f5 46 f5 ff 00 00 00 00 00 00 00 00 ae |....F...........|
000001b0
esptool.py --port /dev/ttyUSB5 write_flash -fm qio 0x00000 so.esp.bin
for(rx=0;rx<800000;rx++)
for(rx=0;rx<400000;rx++)