我无法让一段代码工作,我有一个代码使用带有本地缓冲区的函数, 当初始化本地缓冲区然后我得到异常,但是刚刚声明没有任何初始化它工作正常,我不明白为什么。 我还增加了链接器中的堆栈大小,但似乎这不是问题。
注意:我正在编译c99 / c11编译选项,它支持整个缓冲区初始化。
#define UDS_SRV_CFG2_MAX 20
NCS_PRI_FCT tUdsStatus UDS_RdbiManagement(u16 *puwLen, u8 *aubUdsData) {
tUdsStatus eUdsStatus;
u8 ubTableCfgIdx[UDS_SRV_CFG2_MAX] = { 0 }; // this leads to exception
//...
}
NCS_PRI_FCT tUdsStatus UDS_RdbiManagement(u16 *puwLen, u8 *aubUdsData) {
tUdsStatus eUdsStatus;
u8 ubTableCfgIdx[UDS_SRV_CFG2_MAX]; // code works fine here
// ...
}
答案 0 :(得分:1)
非常感谢您的回答,问题实际上是堆栈对齐,导致异常,因为平台的堆栈对齐是4byts,20字节缓冲区通过测试但是15字节缓冲区失败,因为错误的编译器对齐而异常。 这是通过为未对齐堆栈添加编译选项并在硬件中激活正确的标志来解决的。
Nabil,
embbeded /电子系统工程师。