6. CX7000程序编译出现Internal Error(Cortex-M3):CPP compatible calls needs a stack alignment of 4!

报错现象:



使用到的库及其版本:



解决方法1:

该报错提示只支持4字节长度变量运行,通常先考虑是库编译时部分数据类型导致字节对齐异常。

可以尝试将使用到的变量通过属性强制为4字节对齐,尤其是数组及结构体:编程参考及示例: TwinCAT 3内存对齐规则 | 倍福虚拟学院



解决方法2:

尝试清除编译,再重新对程序进行编译。


解决方法3:

尝试更换RunTime版本。由于需要使用CX7000的多功能IO功能,在该产品用户手册中的第4章有介绍,软件版本有要求必须高于4024.12版本。所以将程序版本更改为4024.294024.55版本再重新编译程序。



解决方法4:

尝试切换Visual Studio的版本。根据以往调试经验,VS2013貌似在4024版本以下的使用起来没什么问题。

当我将“TwinCAT XAE(TcXaeShell)”版本的Visual Studio软件打开,在软件内Open Project,再重新编译代码后,此时报错信息就没有了。


当我将“TwinCAT XAE(VS2015)”版本的Visual Studio软件打开,在软件内Open Project,再重新编译代码后,此时报错信息也没有了。

唯独使用VS2013版本打开代码,编译代码时就会出现这个报错信息。关键是以前设备调试的时候,也是用VS 2013打开的代码,没有问题。


考虑是CX7000系列PLC的架构设计与VS2013及之前的编程平台不兼容导致的。

建议使用TwinCAT XAE(TcXaeShell),或者VS2015及更高版本的编程平台。


结论:

CX7000控制器的应用过程中,建议使用2015版本或以上的Visual Studio或者TcXaeShell进行编写,并且由于软件要求RunTime版本也需要使用4024.12或以上版本编程。



附CX7000用户手册:https://www.beckhoff.com.cn/zh-cn/products/ipc/embedded-pcs/cx7000-arm-r-cortex-r/cx7000.html?


2025.6.28 夏工(客户) 供稿