![]() |
發(fā)布時間: 2021-10-15 19:06
正文摘要:uint8_t TmMs[8] 數(shù)據(jù)定義 for(i=0;i<sizeof(TmMs);i++) & ... |
謝謝樓上各前輩講解,很有收獲,基本理解了。 |
本帖最后由 岳耳 于 2021-10-19 08:11 編輯 jiahz2019 發(fā)表于 2021-10-18 19:43 TmMs的長度不僅僅都是8位,這樣寫遇到不同長度的TmMs,也不需要修改代碼也可以繼續(xù)使用改函數(shù)。 |
18701931930 發(fā)表于 2021-10-16 09:37 這里使用sizeof(TmMs) 這個語句有什么特殊用意嗎,為什么不直接用寫8 ? |
sizeof是C/C++中的一個操作符(operator),簡單的說其作用就是返回一個對象或者類型所占的內(nèi)存字節(jié)數(shù)。 由于uint8_t一般表示unsigned char,所以i<sizeof(TmMs)實際等效為i<8。 定時器0中斷函數(shù),每進(jìn)入一次,對TmMs中的8個數(shù)據(jù)內(nèi)容減一, 這樣可以實現(xiàn)同時開始計數(shù),通過設(shè)置TmMs內(nèi)的值來結(jié)束計數(shù), 不過不推薦使用TmMs[ i]--,建議TmMs[ i]++;然后在需要使用數(shù)據(jù)的地方判斷TmMs[i]>=Value。 |
跟著樓上的,這個應(yīng)該是利用TmMs做的倒計時機(jī)制,有8個定時器,每個定時器都有自己的時間,各自都倒數(shù),為0時說明時間到了,然后去處理相關(guān)業(yè)務(wù),再把時間重置 |
Hephaestus 發(fā)表于 2021-10-15 20:23 哈哈,人家可是十多年經(jīng)驗的高級工程師了,你這樣講有點太武斷了。 |
代碼簡化下,你就能看懂了。實際上sizeof(TmMs)=8 ,因為定義數(shù)組的時候已經(jīng)說明了數(shù)組所占內(nèi)存,去看看關(guān)鍵字sizeof的作用 for(i=0;i<8;i++) //循環(huán)8次 ,訪問數(shù)組 TmMs里的每個成員 1遍 ,每個成員只訪問一遍。 { if(TmMs[ i]) //只要數(shù)組成員不等于0,就減1 TmMs[ i]--; //等效于 TmMs[ i]= TmMs[ i ] - 1 ; } //最后運(yùn)行下來就是:所有不為0的數(shù)組成員都減1 |
sizeof實際上是獲取了數(shù)據(jù)在內(nèi)存中所占用的存儲空間,以字節(jié)為單位來計數(shù)。 |
寫這段代碼的顯然不知道sizeof是什么意義,但是不影響執(zhí)行。 |
Powered by 單片機(jī)教程網(wǎng)