为什么工程里加了一个没有引用的C文件,串口就疯了?
写了一个串口通信程序,主要部分也就传统那样:a=0;
while(MESSAGE != '\0') {
SBUF = MESSAGE;
while(!TI);
TI = 0;
a++;
}//while (MESSAGE != '\0')
delay(100);
//i是(MESSAGE[]里的第 i 个字符串
一切正常,后来加了个ADXL345的程序,还没使用这个程序,串口就只能发送第一个字符,而且一直发送第一个字符,比如我打算发12341234...他就发1111111....
把C文件郑重地邀请进主函数,还是那样。同学说可能是发得太快,好吧,delay多一点,还是没用,感觉是SBUF只能被赋值一次,不知道是不是ADXL345的程序动了缓存。
看来看去也没懂,固来向大家讨教讨教。
下面是那段奇葩的程序(主函数已注释)
注释乱码,还是发文件吧。。。 程序一直在调试,这个压缩包里只是发送时正在调的程序。
试了用IO为依据,比如按键按下,改变发送的内容是可行的 我看串口没疯,是你自己先疯了{:lol:} 我看串口没疯,是你自己先疯了
+1 owenhunter 发表于 2013-4-28 19:09
程序一直在调试,这个压缩包里只是发送时正在调的程序。
试了用IO为依据,比如按键按下,改变发送的内容是 ...
求指导,哪里错了 postek 发表于 2013-4-28 20:16
我看串口没疯,是你自己先疯了
+1
你看到哪里错了 postek 发表于 2013-4-28 20:16 static/image/common/back.gif
我看串口没疯,是你自己先疯了
+1
你真是个P都不懂的傻叉吗? 你声明的 MESSAGE[]= {{'0'},{'1'},{'2'},{'3'},{'4'},{'5'},{'6'},{'7'},{'8'},{'9'},{'x'},{'y'},{'z'},{'a'},{'b'},{'c'},{'+'},{'-'},{'.'},{';'},{' '}};
而你发送时只增加count,看看发的是啥。
SBUF = MESSAGE; //SUBF接受/发送缓冲器(又叫串行通信特殊功能寄存器)
while(!TI); // 等特数据传送 (TI发送中断标志)
TI = 0; // 清除数据传送标志
count++; 楼上说得对,先看你怎么定义的这个数组MESSAGE[],你用while(MESSAGE != '\0')来判断结束,可是你每个MESSAGE都没有结束的标志,只有一个元素'0'或者'1'…………。
你每次count++之后MESSAGE就越界了,什么后果自己分析。 owenhunter 发表于 2013-4-29 22:23 static/image/common/back.gif
你真是个P都不懂的傻叉吗?
骂的好。我真不懂啥时P,啥是叉。
鼓励一下。
继续。 C51会对代码做内存覆盖的优化分析,没有调用的函数仍然会被连接,但是不会参加优化分析,导致大量RAM被浪费,RAM不足则可能导致程序异常。 qllaoda1 发表于 2013-5-2 12:27 static/image/common/back.gif
C51会对代码做内存覆盖的优化分析,没有调用的函数仍然会被连接,但是不会参加优化分析,导致大量RAM被浪费 ...
学习了。谢谢。 xuzixin 发表于 2013-4-30 19:28 static/image/common/back.gif
你声明的 MESSAGE[]= {{'0'},{'1'},{'2'},{'3'},{'4'},{'5'},{'6'},{'7'},{'8'},{'9'},{'x'},{'y'},{'z' ...
嗯,发现了一个没什么意义的错误。
问题我早就解决了,不是这里的问题,还是谢谢 welcome_cool 发表于 2013-4-30 19:54 static/image/common/back.gif
楼上说得对,先看你怎么定义的这个数组MESSAGE[],你用while(MESSAGE != '\0')来判断结束,可是你每个 ...
非常感谢你的回答,不会让我对阿莫有前两个回答带来的误解,可惜程序不是像你的错,那里早就注释掉了,这个问题自己已经解决了 qllaoda1 发表于 2013-5-2 12:27 static/image/common/back.gif
C51会对代码做内存覆盖的优化分析,没有调用的函数仍然会被连接,但是不会参加优化分析,导致大量RAM被浪费 ...
谢谢回答,问题早已自行解决,可惜看到前两个回答纯粹乱骂人,无心看帖。
此外,此为正解。 问题早已解决。内存问题,给程序减减肥,还有一些内存数据计算不该加进来,注释掉就好了。
页:
[1]