本打算用STM32CubeMX启动touchGFX,使用的是STM32F469探索板,各项跟GFX相关的设置都设好了,就差最后在板子上验证两个软件有没有整合成功了,结果生成代码后编译完成,但是链接时出现了大量罕见错误(共计103个)如:
Error:** L6654E:** Rejected Local Symbol xx referred to from non group member xx.o(.iar.stackusage)
错误虽然数量多,但是基本都是按上述格式报错的。
由于本人水平不足,之前也从未碰到过这样的问题,实在是束手无策,就来请教论坛里各位大手子了!如果最后能成功,会把工程文件放上来,除LCD相关部分外的芯片设置和touchGFX编辑都基本接近空白,所以可以当成模板自由编辑,这样也可以免去从前繁琐的移植步骤,实现一键移植(CubeMX提供了这样的便利为什么不用呢)~
以下是部分具体的报错信息:
linking...
469_touchGFX_interfacing_test\469_touchGFX_interfacing_test.axf: Error: L6654E: Rejected Local symbol .text7 referred to from non group member Application.o(.iar.stackusage)
469_touchGFX_interfacing_test\469_touchGFX_interfacing_test.axf: Error: L6654E: Rejected Local symbol .text9 referred to from non group member Application.o(.iar.stackusage)
469_touchGFX_interfacing_test\469_touchGFX_interfacing_test.axf: Error: L6654E: Rejected Local symbol .text11 referred to from non group member Application.o(.iar.stackusage)
更新:
更换编译器并把touchgfx disable再enable,重新添加所需文件以及touchgfx-core.h 之后,报错信息数量大幅减少(现共计24件),且变成了:
Error: L6242E: Cannot Link Object xx.o as its attributes are incompatible with the image attributes.
应该会有人注意到每一段末尾的wchart-16 clashes with wchart-32,其实已经在option for target里C/C++的misc control里加上了--wchar32,否则报错成千上万……
值得注意的是,两次报错所涉及的o文件都只与touchgfx的工程中产生的对象有关,比如button,box,screennameView等,感觉只要解决这个问题,就可以离一键移植更近一步了……
更新2:
研究了一下原因是各自的枚举和宽字符宽度定义各有不同导致的这种问题……想在编译器不换成AC6的情况下在命令行输入 -fshort-enums -fshort-wchar,然而找不到命令行了……
更新3:
虽然找到了对照表,但是AC5是没有对应-fshort-enums的命令……所以要继续尝试下去的话就还需要更换成AC6,所以现在这里暂时变成了一个keil AC5换成AC6的编译器切换问题……
更新4:
成功切换为AC6之后,编译错误只剩下一个!近了,更近了!
469_touchGFX_interfacing_test\469_touchGFX_interfacing_test.axf: Error: L6683E: Merge Section TextFlashSection(texts.o) has an element size of zero
更新5:
楼主其实进行到更新4的时候无比绝望,因为最后仅剩的报错怎么看都是程序的结构性问题……然鹅,楼主发现了,生成工程之前的操作步骤可以挽救!楼主后来在STM32CubeMX生成代码后没有直接进入touchgfx,而是先点开工程并编译确保工程成功编译,再进入touchgfx控件,生成代码,debug,问题就没了,连编译器都没换……
目前进度是可以将图片加载了,但是触控还需要调整。