TI中文支持网
TI专业的中文技术问题搜集分享网站

msp430f149程序跑飞(怪怪怪问题)

用msp430f149驱动OLED,当程序运行到某一个地方的时候就会跑飞,我跟踪发现会在Delay_Us(10);以后跑飞,我非常奇怪的是,我一步一步跟踪时就不出现了,但是全速跑的话肯定出现,而且,我在Delay_Us(10);后面随便添一条语句,或在这条之前随便加一条语句都不跑飞。

void WriteByte(U8 ch)
{ _NOP();
_NOP();
_NOP();
_NOP();
while(OLED_BUSY == BIT2);
_NOP();
_NOP();
_NOP();
_NOP();
CS_L;
_NOP();
_NOP();
_NOP();
_NOP();
for(b = 0;b < 8;b ++)
{ if((ch&0x80) == 0x80)
{
SDI_H;
} else
{
SDI_L;
}
_NOP();
_NOP();
_NOP();
_NOP();
SCLK_L; //上升沿读取数据
Delay_Us(4);
SCLK_H;
ch <<= 1; _NOP();
_NOP();
_NOP();
_NOP();
} CS_H;
/* _NOP();
_NOP();
_NOP();
_NOP();*/
Delay_Us(10);
}

Loops:

你的Delay_us函数就是for循环延时的方式? 你这个SPI WriteByte函数调用在什么位置? 

jun zhu6:

回复 Loops:

这个个是图个OLED的底层驱动函数,这个Delay_us函数是应用MSP430f系统自带的us延时函数,SPI WriteByte是OLED的写入函数,怪就怪在我给前面随便随便加一条语句或者把优化等级随便调一下就又不出现了,之前是在另外一个地方老跑飞,我就把优化等级改了一下,把很多局部变量改为全局变量,就好了,也没太当一回事,昨天又出现了,还换了一个地方,这次彻底的蒙圈了,从来没碰到过这样的啊。

灰小子:

回复 jun zhu6:

先不要进行优化,因为设置优化后没法判断是原来的程序问题,还是优化过程产生的问题了。

灰小子:

回复 灰小子:

有条件的话,用逻辑分析仪或者示波器抓一下时序波形,就知道问题出在哪里了。

jun zhu6:

回复 灰小子:

我用示波器看了那几个信号,他们信号在出现问题的时候都正常,就是读忙信号(必须读忙),在出现问题时会读很长时间,但是读忙信号是oled给我的啊,而且电平都正常,那也不会导致程序跑飞啊,哎,奇怪,奇怪。

jun zhu6:

回复 灰小子:

第一次出现问题时,优化是低级优化,我就改成无优化,就不出现了,然后,就把很多局部变量改为全局变量,就消失了,然后我就一直编程,到昨天基本代码都结束了,又出现跑飞的现象,而且不是在同一个地方。晕晕晕,那个高手帮我分析一下,可否qq聊,我qq279223045.

灰小子:

回复 jun zhu6:

读取oled的忙信号,实质上是等待oled返回信号。如果等待了太长时间,是不正常的。

可能的原因是,之前对oled的操作时序不对。

Jacky Xu:

回复 jun zhu6:

你所谓的跑飞时,程序究竟跑去哪里了?

HG:

回复 jun zhu6:

编译器优化实际就是调整delay的时间,应该是和OLED的配合出了问题,你再好好看一下OLED的时序呢。

赞(0)
未经允许不得转载:TI中文支持网 » msp430f149程序跑飞(怪怪怪问题)
分享到: 更多 (0)