微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > CC2541开发中的C语言移位问题

CC2541开发中的C语言移位问题

时间:10-02 整理:3721RD 点击:

开发环境:IAR 8.10

运行芯片:CC2541

程序如下:

unsigned int a = 12, c;

c = a<<8;

.......

在使用仿真器仿真的情况下观察变量c的值在运算后变成了0,不知是什么原因,恳请高手指导。(备注:移7位或其他数值时结果正常,偏偏8位时出错)

为什么一定要用这个左移8位的运算呢?

我觉得可以尝试定义uint32再移8位看看

使用uint32位数据左移8位结果正确,我想知道这是什么原因,原理上分析没有问题啊,而且之前在别的单片机(stm32)上经常使用这种方法,也没有出现过问题啊?

这个问题比较简单吧。。。因为在8位的单片机中int类型是8位数据啊,所以当然有问题。。。定义为int32就没问题了。。。。

之前我也这样怀疑过,但是后来做了个实验确定了unsigned int 类型为16位数据。就是把一个unsigned int变量a先赋0,然后减一,从仿真器中看到值为65535。而且如果是8位数据话12左移7位值为1536也应该溢出了啊,但是结果却是对的。

暂时我也不知道是什么原因,建议在使用过程中使用uint32来定义

我们在代码里使用这个定义移8位16位都是正确的 会比较可靠

好的

,,,,,,,,

专门试了下,没问题

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top