[更新后的帖子:我原本有一个更广泛的问题,但我已将问题范围缩小到从使用ESP8266主板封装v2.x到ESP8266主板封装v3.x的变更]
在一台新电脑上重新安装Arduino IDE时,我尝试使用所有最新版本,但我发现从ESP8266 Boards Package 2.x升级到3.x会触发一些基本上没有意义的错误信息,这让我无法搜索可能的解决方案,也无法帮助我决定在哪里查找。有数百行错误,但它们都是这样的:
/var/folders/9_/nlhqn4y90zl54rhtm87_x0gc0000gn/T//ccwAAS5l.s:19400: Error: junk at end of line, first unrecognized character valued 0x9
/var/folders/9_/nlhqn4y90zl54rhtm87_x0gc0000gn/T//ccwAAS5l.s:19401: Error: bad register name: a2
/var/folders/9_/nlhqn4y90zl54rhtm87_x0gc0000gn/T//ccwAAS5l.s:19401: Error: junk at end of line, first unrecognized character valued 0x9
/var/folders/9_/nlhqn4y90zl54rhtm87_x0gc0000gn/T//ccwAAS5l.s:19412: Error: bad register name: a2
/var/folders/9_/nlhqn4y90zl54rhtm87_x0gc0000gn/T//ccwAAS5l.s:19412: Error: junk at end of line, first unrecognized character valued 0x9
/var/folders/9_/nlhqn4y90zl54rhtm87_x0gc0000gn/T//ccwAAS5l.s:19413: Error: bad register name: a3
或者这样:
/var/folders/9_/nlhqn4y90zl54rhtm87_x0gc0000gn/T//ccwAAS5l.s:22064: Error: operation combines symbols in different segments
/var/folders/9_/nlhqn4y90zl54rhtm87_x0gc0000gn/T//ccwAAS5l.s:55163: Error: operation combines symbols in different segments
/var/folders/9_/nlhqn4y90zl54rhtm87_x0gc0000gn/T//ccwAAS5l.s:55203: Error: operation combines symbols in different segments
我试着在计算机上查找该文件(ccwAAS5l.s),但找不到。
任何错误都不像我的代码或任何依赖项中的任何内容。
一些演示草图可以编译,所以这不是一个全局性的问题。我的代码中明显存在不兼容性--我知道ESP8266 Boards Package升级到v3确实引入了一些突破性的更改(https://github.com/esp8266/Arduino/releases)。
我不知道如何使用这些来追踪问题的根源。如果它能指出我代码中的错误就好了......但是我不知道如何追踪汇编程序错误。我甚至不能在这里发布任何有意义的片段,因为我的代码运行到数千行,不知道哪些是相关的。
有没有关于这个错误意味着什么,或者从哪里开始寻找解决方案的建议?
非常感谢!
1条答案
按热度按时间au9on6nz1#
@PeterCordes在对我最初问题的评论中提出的建议帮助我找到了原因--我建议其他有类似问题的人遵循这个建议。
结果不是很明显,但值得分享一些例子。编译器错误的第一个条目是:
当我最终设法找到
.ino.s
文件并转到第4896行时,我发现了以下内容(其中相关行是addi sp, sp, -32
:我完全不清楚这一行的错误,但向上滚动提示了我的IOButtons.h文件,也许还有onChange()事件?该函数唯一值得注意的地方似乎是它是一个中断的回调。查看Interrupts的引用(https://arduino-esp8266.readthedocs.io/en/latest/reference.html#interrupts),发现如果在这些函数中使用内存,可能会出现问题,我意识到我无意中在该函数中添加了一些日志记录功能。不是很多,只是以下内容-但
printDebug
函数本身确实有很多strncpy
和Serial.print()
的功能无论如何,通过注解掉这些行,整个程序现在编译得很完美,即使是在添加回我昨天试图删除的所有其他代码/第三方库/等之后。
我想,最奇怪的事情可能是,在
.ino.s
文件中,有成百上千行编译器错误,分布在168,000行中,提到了各种不同的功能-但只修复了第一个设法解决其余的!所以我认为好的建议给任何人-不要沮丧,如果它看起来像有'这是一个巨大的问题,需要永远的时间来解决。只要从顶部开始,其余的可能会自己解决。再次感谢Peter在查找原因方面的帮助。