TP-Thread
你这个工程问题重重。
一、关于startup_XX.s文件,这应该是AC6编译器的BUG,在keil里面有解决方案,在EIDE里我还没找到比较好的方法,建议是取消勾选microLIB,包括threadx也不建议和microLIB一起使用,有会bug
![](https://discuss.em-ide.com/assets/files/2024-05-14/1715665106-149797-microlib.png)
二、关于stm32cubeMX,我看你选择的是V5,同时最新版CUBEMX最高也只能选V5.32
实际上自动拉入的都是threadx的AC6的port,那默认的AC5编译器当然是编不过的(没有自动汇编检测),在keil中改成AC6编译器就好。
![](https://discuss.em-ide.com/assets/files/2024-05-14/1715666044-917836-ac6-tport.png)
三、回到EIDE,除了上述问题,以及之前提过的自动汇编的配置问题。另外就是threadx中port的一些汇编段有问题。也就是你最早的时候提到的“#ifdef __CC_ARM”等这些控制编译语句。在keil中他的自动汇编器应该不止是附加了-masm=auto汇编器选项这么简单,还有其他机制。
所以会报下面的问题,关注到这一段前面会有"#ifdef GNUC",显然我们仅仅附加汇编器选项,导致这个汇编文件被当作GNU汇编进行编译了,但是事实上我们的链接器也是AC6的链接器,导致了这种报错。
![](https://discuss.em-ide.com/assets/files/2024-05-14/1715667478-804076-threadx-port-lowlevel.png)
最佳的临时解决方案是右键报错的汇编文件,单独为他附加编译参数,"-D__CC_ARM",指定他是AC6支持的汇编格式。
![](https://discuss.em-ide.com/assets/files/2024-05-14/1715667703-723396-lowleveldbug.png)
四、给你一个建议,stm32cubemx生成的代码仅能作为参考。就像这个生成的tx_initialize_low_level.s文件,使用官方port就没有这样的问题。
threax官方库
生成时勾选如下的选项,这样他会把完整软件包都粘贴进来,你可以去找这些库内的.c和.s都在哪里,最后写项目时使用官方的包把自动生成的包替换掉。st的维护也比较烂的,就像hal库也是问题重重,不要轻信。
![](https://discuss.em-ide.com/assets/files/2024-05-14/1715668051-755261-stm32cubemx.png)