Simulink中的C编码S函数显示不正确的行为,我设法将问题缩小到不正确的整数乘法.
在代码的开头,我有类似的东西:
#define NRBF 21
#define NRBF1 NRBF+1
Run Code Online (Sandbox Code Playgroud)
然后,在脚本中的函数我有:
void function_name(SimStruct *S, const int_T a)
{
...
int_T base;
base = a*NRBF1;
printf("%i\t", a);
printf("%i\t", NRBF1);
printf("%i\n", base);
..
}
Run Code Online (Sandbox Code Playgroud)
现在,如果a=0,NRBF=21我有(而不是base=0)
0 22 1
Run Code Online (Sandbox Code Playgroud)
如果a=1,NRBF=21我有(如预期的那样base=22)
1 22 22
Run Code Online (Sandbox Code Playgroud)
如果a=2,NRBF=21我有(而不是base=44)
2 22 43
Run Code Online (Sandbox Code Playgroud)
现在,我必须说我有点困惑.我试图将乘法的行改为
base = a* (int_T)NRBF1;
Run Code Online (Sandbox Code Playgroud)
但它没有解决问题.
任何帮助将不胜感激!谢谢!
问题出在这里:
您可以像这样定义宏:
#define NRBF 21
#define NRBF1 NRBF+1
Run Code Online (Sandbox Code Playgroud)
当你写这个:
base = a*NRBF1;
Run Code Online (Sandbox Code Playgroud)
预处理器以NRBF1文本方式替换以下21+1结果:
base = a*21+1;
Run Code Online (Sandbox Code Playgroud)
但你打算这样:
base = a*(21+1);
Run Code Online (Sandbox Code Playgroud)
因此,您需要像这样定义您的宏:
#define NRBF1 (NRBF+1)
Run Code Online (Sandbox Code Playgroud)