欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: C語言us延時函數中:全局變量recive_flag==1時執行return指令是什么意思?return何用 [打印本頁]

作者: 0204417    時間: 2020-6-21 19:50
標題: C語言us延時函數中:全局變量recive_flag==1時執行return指令是什么意思?return何用
extern int recive_flag;        //定義全局變量
/*************us延時函數*************/
void delay_us(int x)  //延時函數,要足夠快,否則燈會閃爍,而不是慢慢變化。
{  
        int i;
        for(i=x;i>0;i--)
        {
                if(recive_flag==1)    //  全局變量recive_flag==1有什么用?什么意思呢?
            {
                     return;                   //return什么意思?
            }
                 _nop_();  // 空操作,不執行任何操作,常用于產生一個機器周期的時間延時
                 _nop_();  //在12M的晶振下每個_nop_()延時1us;  在11.0592MHz晶振的話,一個周期是1.085us,也就是時間是12M周期的1.085倍;  在6M中表示2us
        }
}


作者: dasSpieler    時間: 2020-6-21 21:54
recive_flag是在工程下其他文件里面定義的一個全局變量,可以在recive_flag這個變量名處右鍵->go to definition就可以看到是在哪里定義的,通過Ctrl+f查找功能可以找到這個變量是在哪里被調用,進行了什么操作,然后再看它什么時候會符合if條件(=1),就可以知道這具體是在干嘛的了。從變量名上能大概推知這是個接收標志位,具體還要結合程序。
至于那個return,照理說這樣編譯會報錯,因為函數返回值類型是void,即沒有返回值。如果不談語法錯誤的問題,return在這里用途是結束循環,立即跳出這個函數,回到調用這個函數的地方。即延時直接結束。結合來看的話,估計是單片機接收某個信息需要一段時間,因此用這個延時函數來使單片機等待接收完成,接收完成之后標志位置1,延時結束。
作者: 869385911    時間: 2020-6-22 08:31
表示延時結束,返回延時前的代碼。
作者: 黃youhui    時間: 2020-6-22 08:45
void函數里面帶return?看來我的C基礎有點差啊。
作者: ccdmcu    時間: 2020-6-22 16:59
額, void函數里不能帶 return嗎?我一直用來當返回語句使用
作者: zjjhtony    時間: 2020-6-22 21:02
根據你的程序,個人認為應該是break比較恰當。
這個延時是不固定的,在總時間下具體延時時間由recive_flag決定。
比如設置delay_us(1000),假設是定時1ms(具體多少要看晶振大。。
可以通過中斷按鍵或其他設置recive_flag由0變1,這樣就會提前延時結束。
這樣整個延時就不是固定的,由recive_flag的變化決定。
作者: 黃youhui    時間: 2020-6-23 16:44
ccdmcu 發表于 2020-6-22 16:59
額, void函數里不能帶 return嗎?我一直用來當返回語句使用

不能,void是無返回類型的函數,return是返回類型,如果是keil5編譯stm32的話會報錯,51不清楚
作者: adject    時間: 2020-6-24 00:27
if(recive_flag==1)  數據接收標志,當 recive_flag = 1時表示接到數據,此時推出延時函數,即 return; 執行其他任務,例如解析接收到的數據
作者: 烈火    時間: 2020-6-24 08:44
不能這樣用,因為函數前void是無返回值類型的,return是返回類型,如果這樣使用違反程序規定的。




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1