搜索
bottom↓
回复: 15

为什么工程里加了一个没有引用的C文件,串口就疯了?

[复制链接]

出0入0汤圆

发表于 2013-4-28 18:50:14 | 显示全部楼层 |阅读模式
写了一个串口通信程序,主要部分也就传统那样:

                         a=0;       
                           while(MESSAGE[i][a] != '\0') {
                                        SBUF = MESSAGE[i][a];               
                              while(!TI);                               
                                        TI = 0;                                                                       
                                        a++;                                            
                                   }//while (MESSAGE[i][a] != '\0')
                                  delay(100);
//i是(MESSAGE[][3]里的第 i 个字符串

一切正常,后来加了个ADXL345的程序,还没使用这个程序,串口就只能发送第一个字符,而且一直发送第一个字符,比如我打算发12341234...他就发1111111....
把C文件郑重地邀请进主函数,还是那样。同学说可能是发得太快,好吧,delay多一点,还是没用,感觉是SBUF只能被赋值一次,不知道是不是ADXL345的程序动了缓存。
看来看去也没懂,固来向大家讨教讨教。
下面是那段奇葩的程序(主函数已注释)

注释乱码,还是发文件吧。。。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2013-4-28 19:09:39 | 显示全部楼层
程序一直在调试,这个压缩包里只是发送时正在调的程序。

试了用IO为依据,比如按键按下,改变发送的内容是可行的

出0入0汤圆

发表于 2013-4-28 19:48:16 | 显示全部楼层
我看串口没疯,是你自己先疯了

出0入0汤圆

发表于 2013-4-28 20:16:10 | 显示全部楼层
我看串口没疯,是你自己先疯了
+1

出0入0汤圆

 楼主| 发表于 2013-4-28 20:42:52 来自手机 | 显示全部楼层
owenhunter 发表于 2013-4-28 19:09
程序一直在调试,这个压缩包里只是发送时正在调的程序。

试了用IO为依据,比如按键按下,改变发送的内容是 ...

求指导,哪里错了

出0入0汤圆

 楼主| 发表于 2013-4-28 20:43:11 来自手机 | 显示全部楼层
postek 发表于 2013-4-28 20:16
我看串口没疯,是你自己先疯了
+1

你看到哪里错了

出0入0汤圆

 楼主| 发表于 2013-4-29 22:23:36 | 显示全部楼层
postek 发表于 2013-4-28 20:16
我看串口没疯,是你自己先疯了
+1

你真是个P都不懂的傻叉吗?

出0入0汤圆

发表于 2013-4-30 19:28:38 | 显示全部楼层
你声明的 MESSAGE[][1]= {{'0'},{'1'},{'2'},{'3'},{'4'},{'5'},{'6'},{'7'},{'8'},{'9'},{'x'},{'y'},{'z'},{'a'},{'b'},{'c'},{'+'},{'-'},{'.'},{';'},{' '}};
而你发送时只增加count,看看发的是啥。
SBUF = MESSAGE[numin][count];                //SUBF接受/发送缓冲器(又叫串行通信特殊功能寄存器)
                while(!TI);                                // 等特数据传送        (TI发送中断标志)
                TI = 0;                                        // 清除数据传送标志                               
                count++;       

出0入0汤圆

发表于 2013-4-30 19:54:22 | 显示全部楼层
楼上说得对,先看你怎么定义的这个数组MESSAGE[][1],你用while(MESSAGE[i][a] != '\0')来判断结束,可是你每个MESSAGE[i]都没有结束的标志,只有一个元素'0'或者'1'…………。
你每次count++之后MESSAGE[i][count]就越界了,什么后果自己分析。

出0入0汤圆

发表于 2013-5-2 11:07:33 | 显示全部楼层
owenhunter 发表于 2013-4-29 22:23
你真是个P都不懂的傻叉吗?

骂的好。我真不懂啥时P,啥是叉。
鼓励一下。
继续。

出0入0汤圆

发表于 2013-5-2 12:27:23 | 显示全部楼层
C51会对代码做内存覆盖的优化分析,没有调用的函数仍然会被连接,但是不会参加优化分析,导致大量RAM被浪费,RAM不足则可能导致程序异常。

出0入0汤圆

发表于 2013-5-3 16:54:03 | 显示全部楼层
qllaoda1 发表于 2013-5-2 12:27
C51会对代码做内存覆盖的优化分析,没有调用的函数仍然会被连接,但是不会参加优化分析,导致大量RAM被浪费 ...

学习了。谢谢。

出0入0汤圆

 楼主| 发表于 2013-5-10 08:22:38 | 显示全部楼层
xuzixin 发表于 2013-4-30 19:28
你声明的 MESSAGE[][1]= {{'0'},{'1'},{'2'},{'3'},{'4'},{'5'},{'6'},{'7'},{'8'},{'9'},{'x'},{'y'},{'z' ...

嗯,发现了一个没什么意义的错误。
问题我早就解决了,不是这里的问题,还是谢谢

出0入0汤圆

 楼主| 发表于 2013-5-10 08:24:41 | 显示全部楼层
welcome_cool 发表于 2013-4-30 19:54
楼上说得对,先看你怎么定义的这个数组MESSAGE[][1],你用while(MESSAGE[a] != '\0')来判断结束,可是你每个 ...

非常感谢你的回答,不会让我对阿莫有前两个回答带来的误解,可惜程序不是像你的错,那里早就注释掉了,这个问题自己已经解决了

出0入0汤圆

 楼主| 发表于 2013-5-10 08:26:30 | 显示全部楼层
qllaoda1 发表于 2013-5-2 12:27
C51会对代码做内存覆盖的优化分析,没有调用的函数仍然会被连接,但是不会参加优化分析,导致大量RAM被浪费 ...

谢谢回答,问题早已自行解决,可惜看到前两个回答纯粹乱骂人,无心看帖。
此外,此为正解。

出0入0汤圆

 楼主| 发表于 2013-5-10 08:31:29 | 显示全部楼层
问题早已解决。内存问题,给程序减减肥,还有一些内存数据计算不该加进来,注释掉就好了。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-11 16:27

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表