|
版主斑竹,请问ST7编译时有符号数和立即数的比较问题
[复制链接]
请教版主斑竹,我现在用的是STVD4.1.5,编译器是COSMIC(OSMIC Software ST7 Compiler Driver V4.4a),芯片用的是ST72F324J4B6,程序编译没有问题,在运行时出错,单步调试时发现有符号数和立即数比较存在错误,比如如下的代码,我在main函数的开头测试:
signed char s = -98;
if (s > 30)
{
s = 0;
}
程序就执行到了s=0这条语句!
经过多次测试发现,只要s的绝对值和立即数的和大于等于signed char类型的下限-128的绝对值,则会出现比较错误的情况。即使是signed int类型,也是如此,只不过下限变为-32768而已。
在单步调试时发现汇编代码中,立即数被加了1,不知道为何。
main.c:70 if (s > 30)
0xe11a <main+10> 0xC600D6 LD A,0x00d6 LD A,s
0xe11d <main+13> 0xA11F CP A,#0x1f CP A,#0x1f
0xe11f <main+15> 0x2B04 JRMI 0xe125
0x1f是31,比我设定的30大了1,测试其他的立即数也是如此,都加了1,不知道为何出现这种情况。
请帮忙分析一下具体什么原因?谢谢
|
|