打印

G2553诡异问题。

[复制链接]
1072|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xstong|  楼主 | 2016-3-7 10:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
同样两块电路板,确认外部硬件、焊接全部正常。相同的程序烧录之后,其中一块串口输出数据异常。据程序调试发现,明明指针指向A地址,包括变量监视窗口均显示正确,但实际串口发出的却是B地址的数据,A,B地址刚好错位256字节的偏移。监视发送寄存器,确实发现传入的A地址莫名其妙的成了B地址。
另一块板子又全部正常。实在令人费解。
修改了一下代码,while循环改为for循环,结果两块板子都发送正常了。

相关帖子

沙发
dirtwillfly| | 2016-3-7 21:24 | 只看该作者
果真很诡异

使用特权

评论回复
板凳
mmbs| | 2016-3-7 21:38 | 只看该作者
可能程序的地址翻转了

使用特权

评论回复
地板
mmbs| | 2016-3-7 21:38 | 只看该作者
看看你的地址书写顺序错了吗

使用特权

评论回复
5
xstong|  楼主 | 2016-3-14 08:36 | 只看该作者
应该属于单片机FLASH故障擦出不干净,相关的某个BIT位不能正常清零。
只是原厂技术支持实在太水,什么产生这个那个中断等等....完全是忽悠。
样品收回原厂分析去了,至今没下文。

使用特权

评论回复
6
zhangbo1985| | 2016-3-14 16:40 | 只看该作者
while循环跟for循环的执行效率还有差异的。

使用特权

评论回复
7
51xlf| | 2016-3-14 20:48 | 只看该作者
你的地址怎么写进入 ?

使用特权

评论回复
8
51xlf| | 2016-3-14 20:53 | 只看该作者
程序编写的时候问题吧?

使用特权

评论回复
9
firstblood| | 2016-3-15 22:31 | 只看该作者
看来芯片的稳定性还不行?或者是你买到的是翻新货的。

使用特权

评论回复
10
cehuafan| | 2016-3-15 23:03 | 只看该作者
你的组数循环可能有错误

使用特权

评论回复
11
cehuafan| | 2016-3-15 23:07 | 只看该作者
最好不要使用指针。

使用特权

评论回复
12
yly1023| | 2016-3-16 14:11 | 只看该作者
哈哈哈

使用特权

评论回复
13
angerbird| | 2016-3-16 16:43 | 只看该作者
这个比较下两种循环的条件的

使用特权

评论回复
14
smilingangel| | 2016-3-17 19:31 | 只看该作者
这个可能跟你单片机的内存消耗的多少有关系的。

使用特权

评论回复
15
mmbs| | 2016-3-17 22:40 | 只看该作者
这个确实不知道哪里的问题

使用特权

评论回复
16
mmbs| | 2016-3-17 22:41 | 只看该作者
楼主换换开发板呢?

使用特权

评论回复
17
xstong|  楼主 | 2016-3-25 10:58 | 只看该作者
本帖最后由 xstong 于 2016-3-25 11:07 编辑

故障现象是:向发送寄存器写入数据时,寄存器监视窗里面看到,写入发送寄存器的数值却是另外一个值。
1. 用这段代码,串口发送的数据,在其中一块板子上出现异常(其它板子全部正常):
void Uart_SendData(int8u_t *buf,int8u_t len)
{
    while(len--)
    {
        while (!(IFG2&UCA0TXIFG));
        UCA0TXBUF = *buf++;
    }
}
2. 修改发送函数如下,全部都正常了:
void Uart_SendData(int8u_t *buf,int8u_t len)
{
    int8u_t i;
    for(i=0;i<len;i++){
        while (!(IFG2&UCA0TXIFG));
        UCA0TXBUF = *buf++;
    }
}
相信很少有人遇到过这个问题,做了很多产品,也是无意中发现这样一个问题。

3. 另外一个问题,如果这样写代码 while(len--); 在某个应用里面,即便初值必定大于0,也会出现陷入死循环,跳不出来。

因用量相对较大,都是原厂直接代理处提的货,货品只能说是正品。但对原厂这正品的质量表示怀疑。

430编译器、单片机都是处处暗藏杀机。不是我乱喷,事实没少折磨人啊。

使用特权

评论回复
18
dirtwillfly| | 2016-3-25 12:11 | 只看该作者
xstong 发表于 2016-3-25 10:58
故障现象是:向发送寄存器写入数据时,寄存器监视窗里面看到,写入发送寄存器的数值却是另外一个值。
1. 用 ...

你用的什么编译器?
ccs默认的int型数据是无符号数,char也是这样

使用特权

评论回复
19
309030| | 2016-3-25 20:35 | 只看该作者
难道是出现劣质芯片了

使用特权

评论回复
20
lwsn| | 2016-3-25 22:16 | 只看该作者
while循环跟for循环的执行效率还有差异的。

见过这样的while(1),和for(;;),什么区别

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

38

帖子

2

粉丝