程序执行几秒后卡死!!

2019-10-16 05:56发布

我用STM32f103的RTC做了一个用LCD显示的时钟,但是程序执行后十几秒后无缘无故就卡死了,按什么键都不管用,但是卡死之后过一段时间,程序就会恢复执行,然后过一段时间又会卡死,一直循环,这是为什么??只要主循环里有LCD显示,就会出现这种情况,把LCD显示去掉,程序就不卡死了。求大神帮!!

我用的是TFT3.5寸彩屏
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
ljz1987cj
1楼-- · 2019-10-16 23:26
呵呵 改成这样看看
while(1){
         if(time>=200){
           time=0;
           LCD_Show_Data();
        }
}
Kathy
2楼-- · 2019-10-17 01:43
 精彩回答 2  元偷偷看……
憨厚诚实大叔
3楼-- · 2019-10-17 02:12
Kathy 发表于 2016-11-30 13:49
还是不行

在里面增加别的操作,你先确定他能不能按时进入这个if语句。这种小问题自己想办法一步步排除,别自己什么都不干就来问
Kathy
4楼-- · 2019-10-17 05:53
憨厚诚实大叔 发表于 2016-11-30 14:00
在里面增加别的操作,你先确定他能不能按时进入这个if语句。这种小问题自己想办法一步步排除,别自己什么 ...

我已经调了一天了,我能想到的方法都试了,还是解决不了。
程序在显示函数中的随机位置卡死:
void LCD_Show_Data(void)
{

        u8 a[2]={'.',''},b[2]={'0',''};
        //1#
        LCD_ShowNum(140,130,Data1.temperature,2,BLUE);
        LCD_ShowNum(140,150,Data1.humidity,2,BLUE);
        LCD_ShowNum(140,170,Data1.Voltage/100,1,BLUE);
  GUI_Show12ASCII(148,170,a,BLUE,BLACK);
        LCD_ShowNum(156,170,Data1.Voltage%100,2,BLUE);
        //2#
        LCD_ShowNum(140,225,Data2.temperature,2,BLUE);
        LCD_ShowNum(140,245,Data2.humidity,2,BLUE);
        LCD_ShowNum(140,265,Data2.Voltage/100,1,BLUE);
        GUI_Show12ASCII(148,265,a,BLUE,BLACK);
        LCD_ShowNum(156,265,Data2.Voltage%100,2,BLUE);
        //RTCêy¾Y
                        //
                        LCD_ShowNum(40,65,calendar.w_year,4,BLUE);
                        LCD_ShowNum(80,65,calendar.w_month,2,BLUE);
                        LCD_ShowNum(104,65,calendar.w_date,2,BLUE);
                        RTC_ShowWeek(140,65,calendar.week,BLUE);
               
                        //       
                        LCD_ShowNum(40,85,calendar.hour,2,BLUE);
                        LCD_ShowNum(64,85,calendar.min,2,BLUE);
                        LCD_ShowNum(88,85,calendar.sec,2,BLUE);
                       
                        //为了美观,时间补零
                        if(calendar.sec<10)
                                GUI_Show12ASCII(88,85,b,BLUE,BLACK);
                        if(calendar.min<10)
                                GUI_Show12ASCII(64,85,b,BLUE,BLACK);
                        if(calendar.hour<10)
                                GUI_Show12ASCII(40,85,b,BLUE,BLACK);
               
}
lavion
5楼-- · 2019-10-17 11:48
卡死的时候,   停止运行,   看看  在运行什么代码, 或者 在等待什么代码.   
另外写程序的时候,  实时记得代码的带宽.    你这明显就是  有些代码带宽不足,  有些代码 又过于随机性的突然占用太多MCU运算资源.
d1z1y2
6楼-- · 2019-10-17 13:38
本帖最后由 d1z1y2 于 2016-12-1 22:16 编辑

看看刷新一次要多长时间,怀疑超过了200ms另外,如上面所说,== 改为 >= 更严谨一点

一周热门 更多>