1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我正在使用 Ardiono IDE 直接交叉编译
代码到 ESP8266。 由于内存不足,我遇到了麻烦。我正在查看错误并认为 我编写的代码已过度填充 xtensa CPU 的内部指令 ram。 我收到错误“.text”将不适合区域“iram1_0_seg” (在我添加导致此错误的代码之前的成功编译中, 我被告知草图使用了 可用程序空间的 34% - 很明显 这个不是闪存问题) 现在,据我了解,ESP 的 32 位 CPU 可以 从其内部 ram(并行且快速)运行代码 或者它可以被告知从板上运行速度更慢但更大的串行闪存芯片中运行代码- 对吗?我在人们编写的使用 GCC 命令行路径的 示例代码中看到了很多编译器指令。LOCAL void ICACHE_FLASH_ATTR some_function(int a, char*c)之类的指令我假设这些指令告诉链接器将代码放在运行串行闪存的地方,而不是珍贵且快速的片上 ram?是否有编译器指令及其相关用途的列表?这些编译器指令在 Arduino IDE 中有效吗? |
|
相关推荐
1个回答
|
|
编译 ESP8266 代码的文章中看到了一些有趣的东西,其中一些可以帮助你解决你的问题。根据这些文章,你可能需要做以下一些事情:
1.尝试将代码缩小为合理的大小,以适合 CPU 的可用内部 RAM。有几种方法可以提高代码效率和大小,例如使用函数而不是宏来减少代码重复,尽可能使用 C++ 标准库中的函数。 2.将代码拆分为多个代码库,每个代码库都针对 CPU 的不同部分进行优化,并使用选择性链接器将它们合并为一个可执行文件。这样,每个代码库都可以针对可用的内部 RAM 进行优化,并且可以使用必要时链接到外部闪存。 3.尝试使用独立的编译器和链接器,而不是使用 Arduino IDE。这些工具可能会更好地优化代码,并可以与选择性链接器一起使用。你可以查找名为 esp-open-sdk 的开源 SDK,其中包括 GNU 工具链,以及许多其他有用的工具和库。 4.如果你仍然想使用 Arduino IDE,可以尝试使用 F() 宏,将字符串常量放在程序存储器中而不是内部 RAM 中,这样可以减少 SRAM 的使用。还可以尝试优化模板声明和 STL 库,如果你使用了它们的话。 希望这些提示能够帮助你解决你的编译问题! |
|
|
|
只有小组成员才能发言,加入小组>>
1140 浏览 1 评论
577浏览 6评论
478浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
462浏览 5评论
463浏览 4评论
438浏览 4评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 20:19 , Processed in 1.652085 second(s), Total 44, Slave 38 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号