3494|7

143

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

stm8长整型赋值失效 [复制链接]

最近搞一个项目,用stm8,编译环境是stvd

读写ID都没有问题,把一个unsigned char 数组赋给一个u32位,从16位到31位,要不就是ffff,要不就是不显示,是编译器问题,还是什么问题。
此帖出自stm32/stm8论坛

最新回复

分明就是代码书写的问题:后面的pbuf[x]  详情 回复 发表于 2017-2-6 15:34
点赞 关注
 

回复
举报

6040

帖子

196

TA的资源

版主

沙发
 
是数据类型的问题,你8位编译器的int型一般都是16位的,而字面量没特殊指定也是int,所以像
  1. pubf[2]<<16;
复制代码

这个表达式得到结果还是int,也就是16位的,很明显是溢出了,所以16位的数据赋值到32位数据类型上,高16位是过不去的。
因此你需要进行数据类型转换,要使后面的运算结果为32位才行。所以上面的表达式把其中一个操作数转换为long即可,简单的做法就是,在16后面加个L,把16转为long型字面量,这样两个操作数的运算结果就是long了:
  1. pubf[2]<<16L;
复制代码


此帖出自stm32/stm8论坛

点评

在后面加L也不行,也是一样的结果。前面加强制也不行。  详情 回复 发表于 2017-1-19 12:00
 
 

回复

6040

帖子

196

TA的资源

版主

板凳
 
貌似是unsigned long更好一点,所以应该是
  1. pubf[2]<<16UL;
复制代码

或者
  1. (unsigned long)pubf[2]<<16;
复制代码



此帖出自stm32/stm8论坛
 
 

回复

143

帖子

0

TA的资源

一粒金砂(中级)

4
 
lcofjp 发表于 2017-1-19 11:48
是数据类型的问题,你8位编译器的int型一般都是16位的,而字面量没特殊指定也是int,所以像
这个表达式得 ...

在后面加L也不行,也是一样的结果。前面加强制也不行。
此帖出自stm32/stm8论坛

点评

我不相信……rebuild一下再调试,除非是编译器有bug,如果不行你就调调汇编代码  详情 回复 发表于 2017-1-19 12:02
 
 
 

回复

6040

帖子

196

TA的资源

版主

5
 
仙景 发表于 2017-1-19 12:00
在后面加L也不行,也是一样的结果。前面加强制也不行。

我不相信……rebuild一下再调试,除非是编译器有bug,如果不行你就调调汇编代码
此帖出自stm32/stm8论坛

点评

是不行啊,我一开始也觉得是类型对齐问题,加了也不行的,我都试了,就当是编译器有问题吧  详情 回复 发表于 2017-1-19 12:36
 
 
 

回复

143

帖子

0

TA的资源

一粒金砂(中级)

6
 
lcofjp 发表于 2017-1-19 12:02
我不相信……rebuild一下再调试,除非是编译器有bug,如果不行你就调调汇编代码

是不行啊,我一开始也觉得是类型对齐问题,加了也不行的,我都试了,就当是编译器有问题吧
此帖出自stm32/stm8论坛
 
 
 

回复

37

帖子

472

TA的资源

一粒金砂(中级)

7
 
不是编译器的问题,位运算要注意CPU字长的问题
此帖出自stm32/stm8论坛
 
 
 

回复

14

帖子

0

TA的资源

一粒金砂(中级)

8
 
分明就是代码书写的问题:后面的pbuf[x]< 因为:A|= B<
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表