Hi
我在IDF-4.4.2调试自定义的bootloader程序,发现iram_seg和dram_seg经常不够用,找到了bootloader/subproject/main/ld/esp32c3下面的bootloader.ld,调试iram和dram的org和len可以解决问题。因此,我有一个疑问。
iram_seg和dram_seg的范围分别是什么呢?
我尝试往前调整过org地址,发现也可以编译通过,那我就不知道哪里才是边界了,我想要最大化利用boot可以使用的ram空间,请问是否有范围可以参考,有什么注意事项吗?
期待回复
Bootloader.ld文件的iram_seg范围是多大
Bootloader.ld文件的iram_seg范围是多大
Last edited by Kx_Kevin on Fri Aug 12, 2022 5:52 am, edited 1 time in total.
Re: 关于Bootloader.ld文件的疑问
我把iram_seg的org调整到往前4k,也就是0x403CB000,这样设备可以正常运行的。dram_seg的len从0x5000调到0x6000也没有问题。
是否有文档描述这些ram_seg的范围?我再根据编译报错的大小来调整,这样更安全。
是否有文档描述这些ram_seg的范围?我再根据编译报错的大小来调整,这样更安全。
-
- Posts: 786
- Joined: Wed Nov 14, 2018 8:45 am
Re: Bootloader.ld文件的iram_seg范围是多大
你可以看下 ESP32-C3 TRM 的第三章《系统和存储器》。
有几个原则:
1、不要超过手册上说明的空间。
2、iram 和 dram 空间不要重叠,因为 C3 的 SRAM 被映射到不同的总线地址是不同的,但实际物理空间是相同的。
3、dram 不要超过 0x3FCDF060,因为这后面是保留给 ROM code 用的。
其他地方你就用吧,300 K+ 也够用了。
有几个原则:
1、不要超过手册上说明的空间。
2、iram 和 dram 空间不要重叠,因为 C3 的 SRAM 被映射到不同的总线地址是不同的,但实际物理空间是相同的。
3、dram 不要超过 0x3FCDF060,因为这后面是保留给 ROM code 用的。
其他地方你就用吧,300 K+ 也够用了。
Re: Bootloader.ld文件的iram_seg范围是多大
Hi
感谢答复
根据你的提示我修改了bootloader.ld文件,编译通过,烧录验证设备完全可以跑。
现在iram_seg应该很充足了。只有iram_loader_seg,当org给到0x403D3000地址,再向后到0x403D4000,len为0x4000时,虽说编译通过了,但设备运行就会出现不断重启的现象,log中看到复位原因有RTCWDT_RTC_RST,也有TG0WDT_SYS_RST。这部分还不清楚原因,能否解答一下?
再次感谢
感谢答复
根据你的提示我修改了bootloader.ld文件,编译通过,烧录验证设备完全可以跑。
现在iram_seg应该很充足了。只有iram_loader_seg,当org给到0x403D3000地址,再向后到0x403D4000,len为0x4000时,虽说编译通过了,但设备运行就会出现不断重启的现象,log中看到复位原因有RTCWDT_RTC_RST,也有TG0WDT_SYS_RST。这部分还不清楚原因,能否解答一下?
再次感谢
-
- Posts: 786
- Joined: Wed Nov 14, 2018 8:45 am
Re: Bootloader.ld文件的iram_seg范围是多大
你可以把 ld 文件给出来,把 log 给出来,log 要带时间戳,是串口工具打印出来的那种。
WDT 这两个都是看门狗复位了,你的 boot 里有长时间的 while,如果不喂狗,会导致看门狗复位。
WDT 这两个都是看门狗复位了,你的 boot 里有长时间的 while,如果不喂狗,会导致看门狗复位。
Who is online
Users browsing this forum: No registered users and 79 guests