为什么预处理器检查#if (UCHAR_MAX != (0xFFU)) || (SCHAR_MAX != (0x7F))正在生成private.h?

60次(最近30天)
在我的模型生成的代码中,我注意到以下代码是在“model_private.h”文件中生成的:
#if (UCHAR_MAX != (0xFFU)) (SCHAR_MAX != (0x7F))
编译器使用不同大小的char/char生成错误代码。\
考虑调整测试硬件字大小设置在\
“硬件实现”窗格以匹配编译器的字大小为\
在编译器的limits.h中定义。或者,你可以\
选择“测试硬件与生产硬件相同”选项和\
在代码生成> \上选择启用可移植字大小选项
基于ERT目标的验证窗格,这将禁用\
预处理器字大小检查。
# endif
为什么生成这个代码?

接受的答案

MathWorks支万博1manbetx持团队
生成上述代码是因为在您的模型中使用了具有固定点数据类型的信号或块。详情请参阅链接。
1评论
约翰
约翰 2021年2月25日
由于两个原因,这个代码构造是错误的,应该从模板中删除/更新。
1) LONG和ULONG类型不用于生成器在ERT下创建的可移植数据类型。当使用long类型时,它不被认为是一个特定的大小。
/*=======================================================================*
*固定宽度字长数据类型:
* int8_T, int16_T, int32_T - signed 8,16,或32位整数
* uint8_T, uint16_T, uint32_T - unsigned 8,16,或32位整数
* real32_T, real64_T - 32和64位浮点数*
*=======================================================================*/
类型定义签署char int8_T
类型定义无符号字符uint8_T
类型定义短int16_T
类型定义无符号短uint16_T
类型定义int int32_T
类型定义unsigned int uint32_T
类型定义浮动real32_T
类型定义双real64_T
2)为什么不从< stint .h>中使用固定大小的类型变量,而不是Matlab重新创建这个?本节确保我不能在不同的机器架构上使用相同的生成代码,即使源代码实际上是相同的。

登录评论。

答案(1)

Mayur Sathawane
Mayur Sathawane 2019年5月22日
在模型配置中更改下面的属性,
'ERTFilePackagingFormat' to 'Modular',(代码生成—>代码放置—>代码打包)
这将在代码中包含model_private.h。

标签

还没有进入标签。

s manbetx 845


释放

R2013b

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!