简单的msp430编程问题C语言

[复制链接]
3993|19
 楼主| tl5324260 发表于 2011-12-26 13:25 | 显示全部楼层 |阅读模式
#include<msp430x16x.h>unsigned long a;void main(void){  WDTCTL=WDTPW+WDTHOLD;  a=200*200;}以上是我的程序,但警告为 integer operation result is out of range 和integer conversion resulted in a change of sign .所得数a为乱码,但是当把程序改成a=400000*200时,警告全部消失,并且所得数a=80000000;所用软件是IAR Embedded Workbench IDE.那位高手指点一下迷津。
liuzhuo1978 发表于 2011-12-26 14:14 | 显示全部楼层
正确的是
IAR默认常数是int型,程序中a为无符号,200有符号,两个有符号数相乘得到是有符号数,再把这个值付给无符号a,于是得到4294941760这个不是乱码是溢出了,一看这种大端数你应该有所注意。
可以这样改
#include<msp430x16x.h>
unsigned long a;
void main(void)
{
  WDTCTL=WDTPW+WDTHOLD;
  a=200u*200u;
}
就行了,我运行过,这样随便你怎么运行都不会错,编译器可以设置变量定义你自己多看看,还有你这种编程时不可靠的,在IAR中无使用变量编译器会自动跳过,结尾也应该加while(1)
正确如下
#include<msp430x16x.h>
unsigned long a;
void main(void)
{
  WDTCTL=WDTPW+WDTHOLD;
  a=200u*200u;
  a= a;
  while(1);
}
sqcumt123 发表于 2011-12-26 19:04 | 显示全部楼层
楼主照着2楼网友的指点试试,应该可以的
永远的不知 发表于 2011-12-26 22:43 | 显示全部楼层
请问楼主的语句
a=200*200;
这个在程序中是用来做什么的?
有些好奇
tianm 发表于 2011-12-26 22:58 | 显示全部楼层
说句题外话 这种程序的书写方法 不方便阅读
jzhjt29 发表于 2011-12-27 13:13 | 显示全部楼层
diny 发表于 2011-12-27 13:37 | 显示全部楼层
:handshake 2# liuzhuo1978
liugp25 发表于 2011-12-27 13:44 | 显示全部楼层
咱也试试
peter_zheng 发表于 2011-12-27 20:21 | 显示全部楼层
楼主的程序是C语言功底问题,这不是MSP430本身问题
TI_MCU 发表于 2011-12-28 00:07 | 显示全部楼层
2楼正解。

其实这是编译器的问题,不同的编译器可能会有不同结果。
lzlong 发表于 2011-12-28 10:18 | 显示全部楼层
学习了
EandE 发表于 2011-12-28 11:53 | 显示全部楼层
2楼讲的挺好的
 楼主| tl5324260 发表于 2011-12-28 13:34 | 显示全部楼层
谢谢各位     呵呵
rebewn 发表于 2011-12-28 13:40 | 显示全部楼层
学习了
uestchm 发表于 2011-12-28 14:32 | 显示全部楼层
好好学习 多谢楼主分享了
TA 发表于 2011-12-28 17:21 | 显示全部楼层
谢楼主
jamie-ma 发表于 2011-12-28 17:57 | 显示全部楼层
同意上解
明天我还来 发表于 2011-12-28 19:52 | 显示全部楼层
同问。 4# 永远的不知
msp430ing 发表于 2011-12-29 22:18 | 显示全部楼层
2楼正解,楼主试了吗
爱之翼V 发表于 2011-12-30 15:04 | 显示全部楼层
支持2楼的,楼主可以试试
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

207

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部