请问ESP32-C3开发板ROM里预烧录的数据有没有办法读出来,unimp指令怎么执行的
Posted: Mon Jul 08, 2024 8:58 am
情况是学生做CPU模拟机方向,拿ESP32C3练练手。
esp32C3的ROM里预烧了内容,做模拟机需要。
现在使用的是https://www.esp32.com/viewtopic.php?t=21331的htt ... v3_rom.elf
根据elf转换到模拟内存,首先有一个问题是搬运地址。Program Headers的
这种搬运地址区间有重叠的就是自己猜测处理的(覆盖,而且几乎都是0)
搬运地址的问题基本是出现一次地址访问到无效的再修。
然而,遇到了新问题。
elf的<main>段:
jal ra,40048b74 <software_reset>执行完回来之后就会访问...段的unimp指令报错,而且看反汇编指令这段就是这样执行的,我不是很理解,请问这段怎么处理。
附上 <software_reset>:
esp32C3的ROM里预烧了内容,做模拟机需要。
现在使用的是https://www.esp32.com/viewtopic.php?t=21331的htt ... v3_rom.elf
根据elf转换到模拟内存,首先有一个问题是搬运地址。Program Headers的
- LOAD 0x0010d4 0x3fcdf0d4 0x3fcdf0d4 0x37a708 0x37a708 RW 0x1000
- LOAD 0x37c5bc 0x3fcdf5bc 0x3fcdf5bc 0x37a4fc 0x37a4fc RW 0x1000
- LOAD 0x6f7638 0x3fcdf638 0x3fcdf638 0x37a488 0x37a488 RW 0x1000
搬运地址的问题基本是出现一次地址访问到无效的再修。
然而,遇到了新问题。
elf的<main>段:
- 40047efe: 439c lw a5,0(a5)
- 40047f00: 9782 jalr a5
- 40047f02: 473000ef jal ra,40048b74 <software_reset>
- ...
- 40047f0e: 0000 unimp
- 40047f10: 3fcde537 lui a0,0x3fcde
- 40047f14: 71850513 addi a0,a0,1816 # 3fcde718 <uart_rx_buff.5104>
附上 <software_reset>:
- 40048b74 <software_reset>:
- 40048b74: 60008737 lui a4,0x60008
- 40048b78: 431c lw a5,0(a4)
- 40048b7a: 800006b7 lui a3,0x80000
- 40048b7e: 8fd5 or a5,a5,a3
- 40048b80: c31c sw a5,0(a4)
- 40048b82: 8082 ret