请问ESP32-C3开发板ROM里预烧录的数据有没有办法读出来,unimp指令怎么执行的

Moderator: ESP_ZT

aoaomiao
Posts: 2
Joined: Mon Jul 08, 2024 7:59 am

请问ESP32-C3开发板ROM里预烧录的数据有没有办法读出来,unimp指令怎么执行的

Postby aoaomiao » 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的
  1.   LOAD           0x0010d4 0x3fcdf0d4 0x3fcdf0d4 0x37a708 0x37a708 RW  0x1000
  2.   LOAD           0x37c5bc 0x3fcdf5bc 0x3fcdf5bc 0x37a4fc 0x37a4fc RW  0x1000
  3.   LOAD           0x6f7638 0x3fcdf638 0x3fcdf638 0x37a488 0x37a488 RW  0x1000
这种搬运地址区间有重叠的就是自己猜测处理的(覆盖,而且几乎都是0)
搬运地址的问题基本是出现一次地址访问到无效的再修。

然而,遇到了新问题。
elf的<main>段:
  1. 40047efe:   439c                    lw  a5,0(a5)
  2. 40047f00:   9782                    jalr    a5
  3. 40047f02:   473000ef            jal ra,40048b74 <software_reset>
  4.     ...
  5. 40047f0e:   0000                    unimp
  6. 40047f10:   3fcde537            lui a0,0x3fcde
  7. 40047f14:   71850513          addi  a0,a0,1816 # 3fcde718 <uart_rx_buff.5104>
jal ra,40048b74 <software_reset>执行完回来之后就会访问...段的unimp指令报错,而且看反汇编指令这段就是这样执行的,我不是很理解,请问这段怎么处理。

附上 <software_reset>:
  1. 40048b74 <software_reset>:
  2. 40048b74:   60008737            lui a4,0x60008
  3. 40048b78:   431c                    lw  a5,0(a4)
  4. 40048b7a:   800006b7            lui a3,0x80000
  5. 40048b7e:   8fd5                    or  a5,a5,a3
  6. 40048b80:   c31c                    sw  a5,0(a4)
  7. 40048b82:   8082                    ret

Who is online

Users browsing this forum: No registered users and 11 guests