久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2537|回復: 9
打印 上一主題 下一主題
收起左側(cè)

新手求大神幫看看為什么單片機程序會卡死?

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:626079 發(fā)表于 2020-3-29 22:56 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 xmfjfhcel 于 2020-3-30 09:30 編輯


咨詢高手大俠,下面這樣作判斷為什么程序會卡死呢?我是想判斷一個狀態(tài)如果連續(xù)出現(xiàn)錯誤50次,就認為設(shè)備有問題,如果這50次中哪怕有一次正確的值返回來也認為設(shè)備是好的,又從頭開始計數(shù)判斷。
感謝樓下的解答,我把程序改一下,昨晚沒處理好,這樣就清楚了,但是程序我觀察了下,如果返回值為1了, errorchecknum增加了,程序就卡死了。errorchecknum是全局變量。
#include<reg52.h>
unsigned int errorchecknum=0;

unsigned char check()
{...............
               if(checkdata==data)
                 {
                      errorchecknum=0;
                       return 0;
                  }
               else
                 {
                     errorchecknum++;
                     return 1;
                 }
}



void main()
{.................
while(1)
          {         
                check();
                if(errorchecknum==50)
                {
                       //設(shè)備有問題
                 }
            }
}


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:282850 發(fā)表于 2020-3-30 01:14 | 只看該作者
unsigned char Dartcheck()
{
void check()
這種明顯不對,刪除unsigned char Dartcheck()
第3句改為 unsigned char check()就與return 1和while(1)中的調(diào)用對應了
回復

使用道具 舉報

板凳
ID:235200 發(fā)表于 2020-3-30 01:27 | 只看該作者
errorchecknum是否是全程變量,另外判斷errorchecknum==50,如果設(shè)備真有問題,這只是瞬間存在,所以這一句改為errorchecknum>50
回復

使用道具 舉報

地板
ID:709172 發(fā)表于 2020-3-30 02:36 | 只看該作者
首先你要確定errorchecknum是否定義為全局volatile易揮發(fā)變量,因為在循環(huán)判斷errorchecknum值時,errorchecknum可能會取緩存值,不會更新,所以需要定義volatile unsigned uint8 errorchecknum。
其次將errorchecknum==50改為errorchecknum >50。
回復

使用道具 舉報

5#
ID:592807 發(fā)表于 2020-3-30 08:29 | 只看該作者
void check();是什么?第三行,被unsigned char Dartcheck()函數(shù)內(nèi)構(gòu)造函數(shù)?
回復

使用道具 舉報

6#
ID:626275 發(fā)表于 2020-3-30 08:55 | 只看該作者
是不是沒有定義變量!然后沖突了
回復

使用道具 舉報

7#
ID:213173 發(fā)表于 2020-3-30 09:15 | 只看該作者
unsigned char errorchecknum;
bit Error;

void check()
{
        if(故障信息為真)
        {
                errorchecknum++;
                if(errorchecknum>=50)
                {
                        errorchecknum=50;
                        Error=1;
                }
        }
        else errorchecknum==0;
}

void main()
{
        while(1)
        {         
                check();
                if(Error)//設(shè)備有問題
                {                       
                        //處理故障
                        if(故障排除)
                        {
                                Error=0;
                                errorchecknum=0;
                        }
                }
        }
}
回復

使用道具 舉報

8#
ID:626079 發(fā)表于 2020-3-30 09:52 | 只看該作者
文心雕龍7 發(fā)表于 2020-3-30 02:36
首先你要確定errorchecknum是否定義為全局volatile易揮發(fā)變量,因為在循環(huán)判斷errorchecknum值時,errorche ...

嗯,好的,謝謝提醒,我試試定義為volatile看看
回復

使用道具 舉報

9#
ID:626079 發(fā)表于 2020-3-30 10:00 | 只看該作者
因為程序在一開始就卡死了, 懷疑在errrochecknum=1的時候程序就鎖死了…………如果程序取消對errrochecknum的判斷,就正常運行沒有問題。

這個問題想了幾天都沒有想明白。
回復

使用道具 舉報

10#
ID:626079 發(fā)表于 2020-3-30 10:32 | 只看該作者
wulin 發(fā)表于 2020-3-30 09:15
unsigned char errorchecknum;
bit Error;

感謝, 回頭按你這個思路改一下看看。
因為現(xiàn)在設(shè)備是好的,errorchecknum肯定是到不了50,之前關(guān)鍵是一到errorchecknum=1就死掉了。 當有錯誤數(shù)據(jù)傳第一次傳過來,程序就卡死…………感覺就是errorchecknum在賦值為1后,下次來一個正確的數(shù)據(jù),errochecknum又該賦值為0,這時時候就卡住了。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 操操操日日日 | 免费国产精品久久久久久 | 亚洲人免费视频 | 影音先锋成人资源 | 免费毛片网站在线观看 | 在线91 | 一级片免费观看 | 欧美久久久久久 | 精品国模一区二区三区欧美 | 国产精品污www在线观看 | 91视频进入 | 久久99精品久久久久久噜噜 | 欧美一区在线视频 | 三级黄视频在线观看 | 亚州激情| 成年人网站免费 | 日韩精品1区2区3区 国产精品国产成人国产三级 | 美女久久 | 综合久| 丁香五月网久久综合 | 97色在线视频 | 日日操日日舔 | 国产精品久久久久久久久久 | 国产精品成人一区二区三区 | 黑人精品欧美一区二区蜜桃 | 99精品网 | 精品一区久久 | 欧美激情精品久久久久久 | 蜜桃视频麻豆 | 国产精品美女久久久久久免费 | 欧美激情在线观看一区二区三区 | 国产91在线播放 | 午夜精品一区 | 日韩靠逼| av免费观看在线 | 日日夜夜精品 | 国产成人精品免高潮在线观看 | 日韩在线精品视频 | 在线一区观看 | 成人免费视频网站在线看 | 日韩精品一区二区三区老鸭窝 |