Thread 中讨论的其他器件:controlSUITE、 SFRA
你(们)好
我在以下代码方面有很大的问题。 使用的所有变量均为 int32_t 类型 该框架基于示例 "FCL_379XL_"、除闪烁 LED 之外未使用的所有内容均已注释掉。 任务 A1每600us 调用一次。
//---------------------------------------- void A1 (void) //------------------------------------------------------- { if (var1!= var2) { Δ= var1 - var2; Dir =(Δ< 0)? -1L:1L; Δ= dir*delta; flag=0; Var2 = var1; } //-------- //下次 CpuTimer0 'counter'达到周期值时,转至 A2 A_Task_ptr =&A2; //----- }
当我设置 var1=10时、dir 变为 dir=1、delta 变为 delta=10、因为 var2=0。 一切都按预期工作。 但是、当我将 var1的值增加到一个更高的值(例如、对于 int32_t、应该完全可以得到100'000)时、Δ 值在处被截断 65536。
引入一个额外的变量以某种方式解决了这个问题、并且代码按预期工作。 变量 delta 是 var1和 var2的确切差值:
//---------------------------------------- void A1 (void) //------------------------------------------------------- { IF (标志) { Δ= var1 - var2; Dir =(Δ< 0)? -1L:1L; Δ= dir*delta; flag=0; Var2 = var1; } if (var1!= var2) flag=1; }
将标记计算放在顶部也不起作用。 之后必须来。 因此、变量 var1和 var2的实化和比较显然存在问题。 有人知道我为什么会遇到这种行为吗? 在比较变量 var1和 var2时、我是否犯了根本错误? 或者、在处理 C2000微控制器上的 Int32变量时是否存在已知问题?
感谢您的反馈