This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
1,问题描述:我们项目中使用RTOS,在初始化任务堆栈时默认将ST0中的PM位设置为0,(Left shift by1)。导致第一次进入该任务的时候计算两个unsigned long类型数据相乘时出错,结果大了一倍,排查下来按官方手册spru430f说明是因为在unsigned运算时PM应该为1(No shift)
2,查看官方freeRtos kernel例程,在初始化任务堆栈时默认将ST0中的PM位设置为1,(No shift),是否我们也应该设置改默认值为1?
3,按spru430f说明在计算例如如下指令时,PM会被修改为-4 (SPM -4),如果在这个语句之后立即计算两个unsigned long类型数据相乘时,会不会导致结果再次出错呢,是否每次计算unsigned 数据时需要手动去设置该位呢
Example ; Calculate: Y = ((M*X >> 4) + (B > 10 ; Y, M, X, B are Q15 values SPM −4 ; Set product shift to >> 4 SETC SXM ; Enable sign extension mode MOV T,@M ; T = M MPY P,T,@X ; P = M * X MOV ACC,@B >4) + (S:B << 11) MOVH @Y,ACC << 5 ; Store Q15代码
您好,
如果已知被更改了,就要设置。
编译器可能存在bug, 请点击链接How to Submit a Compiler Test Case (ti.com)测试一下。
下面帖子讨论了类似问题,请参考