assembly 了解从主板包v2.x升级到3.x时Arduino IDE中的ESP8266装配错误

wlzqhblo  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(122)

[更新后的帖子:我原本有一个更广泛的问题,但我已将问题范围缩小到从使用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)。
我不知道如何使用这些来追踪问题的根源。如果它能指出我代码中的错误就好了......但是我不知道如何追踪汇编程序错误。我甚至不能在这里发布任何有意义的片段,因为我的代码运行到数千行,不知道哪些是相关的。
有没有关于这个错误意味着什么,或者从哪里开始寻找解决方案的建议?
非常感谢!

au9on6nz

au9on6nz1#

@PeterCordes在对我最初问题的评论中提出的建议帮助我找到了原因--我建议其他有类似问题的人遵循这个建议。
结果不是很明显,但值得分享一些例子。编译器错误的第一个条目是:

KDHomeNode.ino.s: Assembler messages:
KDHomeNode.ino.s:4896: Error: bad register name:    sp
KDHomeNode.ino.s:4896: Error: junk at end of line, first unrecognized character valued 0x9

当我最终设法找到.ino.s文件并转到第4896行时,我发现了以下内容(其中相关行是addi sp, sp, -32

_ZN7Buttons8onChangeEv:
.LVL430:
.LFB4255:
    .file 27 "/Users/dave/Documents/Development/KDHome/Arduino/KDHomeNode/IOButtons.h"
    .loc 27 95 90 is_stmt 1 view -0
    .loc 27 96 7 view .LVU1293
    .loc 27 95 90 is_stmt 0 view .LVU1294
    addi    sp, sp, -32
.LCFI150:
    s32i.n  a12, sp, 24

我完全不清楚这一行的错误,但向上滚动提示了我的IOButtons.h文件,也许还有onChange()事件?该函数唯一值得注意的地方似乎是它是一个中断的回调。查看Interrupts的引用(https://arduino-esp8266.readthedocs.io/en/latest/reference.html#interrupts),发现如果在这些函数中使用内存,可能会出现问题,我意识到我无意中在该函数中添加了一些日志记录功能。不是很多,只是以下内容-但printDebug函数本身确实有很多strncpySerial.print()的功能

char pin_str[3];
          char press_time_str[12];
          itoa(_pin, pin_str, 10);
          ltoa(press_time, press_time_str, 10);
          printDebug("Button ", pin_str, " pressed (", press_time_str, "ms)");

无论如何,通过注解掉这些行,整个程序现在编译得很完美,即使是在添加回我昨天试图删除的所有其他代码/第三方库/等之后。
我想,最奇怪的事情可能是,在.ino.s文件中,有成百上千行编译器错误,分布在168,000行中,提到了各种不同的功能-但只修复了第一个设法解决其余的!所以我认为好的建议给任何人-不要沮丧,如果它看起来像有'这是一个巨大的问题,需要永远的时间来解决。只要从顶部开始,其余的可能会自己解决。
再次感谢Peter在查找原因方面的帮助。

相关问题