5602|10

48

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

版主斑竹,请问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,不知道为何出现这种情况。
请帮忙分析一下具体什么原因?谢谢
此帖出自stm32/stm8论坛

最新回复

                                 to 秋叶: 这两个可以通用。我们现在大部分也就是BJ4B6的片子,采购的事由采购部负责,从哪儿买的还不是很清楚。  详情 回复 发表于 2010-6-11 10:23
点赞 关注
 

回复
举报

73

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
                                 不知道有没有其他人碰到这种情况?
此帖出自stm32/stm8论坛
 
 

回复

57

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
你试试看用强制类型转换会有什么结果:

  if (s > (signed char)30)
此帖出自stm32/stm8论坛
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

4
 
                                 这些都试过了,强制类型转换,包括将30赋值给另外一个signed char类型变量,都是如此。不知道是编译器的问题么?
此帖出自stm32/stm8论坛
 
 
 

回复

52

帖子

0

TA的资源

一粒金砂(初级)

5
 
                                 我要确认一下,如果确实如此,除了报告Cosmic,我也没有其他办法。
此帖出自stm32/stm8论坛
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

6
 
                                 看来是没有什么好办法了
此帖出自stm32/stm8论坛
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

7
 
                                 没用过,不过你应该看一下编译器选项,有的编译器可以指定char是否强制转换为unsigned char的(例如IAR)……
此帖出自stm32/stm8论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

8
 
你试试看,下面程序片段的结果是什么?对应的汇编是什么:
signed char s = -98;   
s = s - 30;
此帖出自stm32/stm8论坛
 
 
 

回复

54

帖子

0

TA的资源

一粒金砂(初级)

9
 
汇编如下:
main.c:68                s = s - 30;
0xe115 <main+5>             0xC600D5        LD    A,0x00d5            LD    A,s
0xe118 <main+8>             0xA01E          SUB   A,#0x1e             SUB   A,#0x1e
0xe11a <main+10>            0xC700D5        LD    0x00d5,A            LD    s,A
这次看来立即数应该是对的,结果是s=0x80
此帖出自stm32/stm8论坛
 
 
 

回复

91

帖子

0

TA的资源

一粒金砂(初级)

10
 
                                 楼主,你好,你的ST72F324J4B6哪儿买的,我们用的是ST72F324BJ4B6,不知可不可以通用,能否有空时联系一下,QQ:34415905
此帖出自stm32/stm8论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

11
 
to 秋叶:
这两个可以通用。我们现在大部分也就是BJ4B6的片子,采购的事由采购部负责,从哪儿买的还不是很清楚。
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表