日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]今天寫這一篇文章并不是因?yàn)橐呀?jīng)想好了一篇文章才寫下來(lái),而是我要將這一篇文章作為一篇筆記來(lái)寫,一直更新下去。在進(jìn)行單片機(jī)開發(fā)時(shí),經(jīng)常都會(huì)出現(xiàn)一些很不起眼的問題,這些問題其實(shí)都是很基礎(chǔ)的c語(yǔ)言知識(shí)點(diǎn),是一些小細(xì)節(jié)。但是正是因?yàn)楹芑A(chǔ),又都是小細(xì)節(jié),所以我們往往容易忽視它們。結(jié)果有時(shí)候我們會(huì)花很長(zhǎng)的時(shí)間糾結(jié)一個(gè)問題,遲遲找不到問題的所在。當(dāng)發(fā)現(xiàn)原因竟然是這么的簡(jiǎn)單和不起眼時(shí),我想不單是我,大家都會(huì)感到痛不欲生。筆者今天又碰到了這樣的問題,實(shí)在忍不住了。因?yàn)檫@些問題都是小的知識(shí)點(diǎn),考慮到之前也遇到好多這種問題,于是決定每次遇到問題就記錄下來(lái),時(shí)刻提醒自己!!

今天寫這一篇文章并不是因?yàn)橐呀?jīng)想好了一篇文章才寫下來(lái),而是我要將這一篇文章作為一篇筆記來(lái)寫,一直更新下去。在進(jìn)行單片機(jī)開發(fā)時(shí),經(jīng)常都會(huì)出現(xiàn)一些很不起眼的問題,這些問題其實(shí)都是很基礎(chǔ)的c語(yǔ)言知識(shí)點(diǎn),是一些小細(xì)節(jié)。但是正是因?yàn)楹芑A(chǔ),又都是小細(xì)節(jié),所以我們往往容易忽視它們。結(jié)果有時(shí)候我們會(huì)花很長(zhǎng)的時(shí)間糾結(jié)一個(gè)問題,遲遲找不到問題的所在。當(dāng)發(fā)現(xiàn)原因竟然是這么的簡(jiǎn)單和不起眼時(shí),我想不單是我,大家都會(huì)感到痛不欲生。筆者今天又碰到了這樣的問題,實(shí)在忍不住了。因?yàn)檫@些問題都是小的知識(shí)點(diǎn),考慮到之前也遇到好多這種問題,于是決定每次遇到問題就記錄下來(lái),時(shí)刻提醒自己!!

1. !和 ~ 不一樣

! 是邏輯非符號(hào),~ 是位取反符號(hào)。

對(duì)IO口某個(gè)管腳賦值時(shí)不要錯(cuò)用 !,如

2.<<和>>的優(yōu)先級(jí)低于+、-

比如要實(shí)現(xiàn)c=x*2+1,沒有加括號(hào)會(huì)出錯(cuò)

3.移位要防止溢出

其實(shí)用移位代替乘除法是個(gè)不錯(cuò)的方法,筆者很喜歡拿到一段代碼后用移位代替乘除法來(lái)進(jìn)行優(yōu)化。不過(guò)有時(shí)候卻會(huì)出現(xiàn)問題,比如溢出問題。當(dāng)很明顯可能溢出的話我們是會(huì)注意的,比如

但是有時(shí)候這個(gè)問題是不明顯的,比如當(dāng)移位出現(xiàn)在數(shù)組索引或函數(shù)參數(shù)時(shí),有段用液晶顯示字符的代碼如下

我們可以用左移運(yùn)算來(lái)代替乘法進(jìn)行優(yōu)化,如

這本是一個(gè)好方法,但是事實(shí)上上面的代碼是錯(cuò)的。當(dāng)執(zhí)行c<<4時(shí),因?yàn)闆]有明顯的賦值過(guò)程,我們可能認(rèn)為沒問題,而事實(shí)上c的高位已經(jīng)丟失了,所以得到錯(cuò)誤的結(jié)果。一個(gè)可行的做法是先進(jìn)行強(qiáng)制轉(zhuǎn)換,如

4.無(wú)符號(hào)數(shù)和有符號(hào)數(shù)混合運(yùn)算都會(huì)被強(qiáng)制轉(zhuǎn)換為無(wú)符號(hào)數(shù)運(yùn)算

當(dāng)一個(gè)有符號(hào)數(shù)和一個(gè)無(wú)符號(hào)數(shù)進(jìn)行算術(shù)運(yùn)算時(shí),系統(tǒng)會(huì)自動(dòng)將有符號(hào)數(shù)強(qiáng)制轉(zhuǎn)換為無(wú)符號(hào)數(shù)再進(jìn)行運(yùn)算(即使你使用有符號(hào)數(shù)強(qiáng)制類型轉(zhuǎn)換),如下面兩種寫法的運(yùn)輸結(jié)果是一樣的

 

 

5.局部變量要初始化

局部變量沒有初始化的話,因?yàn)閱纹瑱C(jī)每次為他分配的是同一個(gè)內(nèi)存區(qū)域,當(dāng)你在函數(shù)中是這么使用局部變量時(shí),就可能出問題:

如果第一次調(diào)用fun時(shí),a傳遞的值為0,那么flag = 0x01;執(zhí)行if(flag&0x01)后面的代碼。以后再調(diào)用fun時(shí),即使a不為0,但flag依然使用之前的內(nèi)存區(qū)域,所以其值一直為0x01,一直執(zhí)行的是if后面的代碼,而不是else后面的。

如果要避免這個(gè)錯(cuò)誤,平時(shí)要養(yǎng)成對(duì)局部變量初始化的習(xí)慣。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀

在高性能網(wǎng)絡(luò)編程領(lǐng)域,事件驅(qū)動(dòng)模型以其高效的I/O多路復(fù)用能力成為主流范式。不同于傳統(tǒng)的多線程/多進(jìn)程阻塞模型,事件驅(qū)動(dòng)通過(guò)單一線程監(jiān)聽多個(gè)文件描述符的狀態(tài)變化,以非阻塞方式處理I/O事件,顯著減少了上下文切換開銷和資源...

關(guān)鍵字: 事件驅(qū)動(dòng) C語(yǔ)言

嵌入式系統(tǒng)開發(fā)中,內(nèi)存碎片化始終是困擾程序員的難題。以某工業(yè)控制器項(xiàng)目為例,系統(tǒng)需連續(xù)運(yùn)行5年以上,期間頻繁分配/釋放不同大小的內(nèi)存塊(從16字節(jié)到4KB不等)。傳統(tǒng)malloc/free機(jī)制在運(yùn)行3年后導(dǎo)致內(nèi)存利用率驟...

關(guān)鍵字: 自定義內(nèi)存池設(shè) C語(yǔ)言

在C語(yǔ)言開發(fā)的HTTP服務(wù)器項(xiàng)目中,通信異常是常見的調(diào)試挑戰(zhàn)。Wireshark作為網(wǎng)絡(luò)協(xié)議分析領(lǐng)域的“瑞士軍刀”,通過(guò)捕獲和分析數(shù)據(jù)包,能夠精準(zhǔn)定位HTTP通信中的異常環(huán)節(jié)。本文結(jié)合實(shí)際案例,闡述如何利用Wiresha...

關(guān)鍵字: Wireshark C語(yǔ)言

在物聯(lián)網(wǎng)設(shè)備數(shù)量突破200億的今天,數(shù)據(jù)傳輸安全已成為開發(fā)者無(wú)法回避的核心命題。某智慧農(nóng)業(yè)項(xiàng)目曾因未加密通信導(dǎo)致傳感器數(shù)據(jù)被篡改,造成300畝農(nóng)田灌溉系統(tǒng)癱瘓。而通過(guò)30分鐘集成OpenSSL庫(kù),同樣的設(shè)備實(shí)現(xiàn)了TLS加...

關(guān)鍵字: OpenSSL C語(yǔ)言

當(dāng)MobileNet在STM32H7上完成單張圖像推理需要1.2秒時(shí),工程師們意識(shí)到:要讓AI真正落地嵌入式設(shè)備,必須突破浮點(diǎn)計(jì)算的桎梏。量化技術(shù)通過(guò)將32位浮點(diǎn)參數(shù)轉(zhuǎn)換為8位整數(shù),在ARM Cortex-M7處理器上實(shí)...

關(guān)鍵字: C語(yǔ)言 神經(jīng)網(wǎng)絡(luò)

在C語(yǔ)言的江湖中,內(nèi)存管理如同行走于刀尖之上——稍有不慎,便可能陷入內(nèi)存泄漏的深淵。紅黑樹作為高效的數(shù)據(jù)結(jié)構(gòu),其復(fù)雜的節(jié)點(diǎn)分配與釋放邏輯更易成為內(nèi)存泄漏的重災(zāi)區(qū)。而Valgrind,這位內(nèi)存調(diào)試領(lǐng)域的“福爾摩斯”,憑借其...

關(guān)鍵字: Valgrind C語(yǔ)言

紅黑樹作為自平衡二叉搜索樹的代表,其設(shè)計(jì)靈感源于對(duì)2-3-4樹的二叉化改造。通過(guò)將多路節(jié)點(diǎn)轉(zhuǎn)換為二叉樹結(jié)構(gòu)中的顏色標(biāo)記,紅黑樹在保持O(log n)時(shí)間復(fù)雜度的同時(shí),避免了復(fù)雜的節(jié)點(diǎn)分裂操作。本文將從2-3-4樹的平衡原...

關(guān)鍵字: 紅黑樹 C語(yǔ)言

當(dāng)某智能攝像頭廠商將服務(wù)器架構(gòu)從多線程切換為單線程事件驅(qū)動(dòng)模型后,設(shè)備在2G網(wǎng)絡(luò)環(huán)境下的并發(fā)連接數(shù)從8個(gè)躍升至1200個(gè),同時(shí)內(nèi)存占用銳減76%。這個(gè)戲劇性轉(zhuǎn)變揭示了一個(gè)被廣泛忽視的真相:在資源受限的嵌入式場(chǎng)景中,線程模...

關(guān)鍵字: 單線程 多線程 C語(yǔ)言

嵌入式開發(fā),HTTP服務(wù)器作為數(shù)據(jù)交互的核心組件,其功耗特性直接影響設(shè)備續(xù)航能力。傳統(tǒng)HTTP服務(wù)器依賴持續(xù)運(yùn)行模式,導(dǎo)致能量浪費(fèi)嚴(yán)重。本文提出一種基于C語(yǔ)言的超低功耗HTTP服務(wù)器架構(gòu),通過(guò)RTC(實(shí)時(shí)時(shí)鐘)喚醒機(jī)制實(shí)...

關(guān)鍵字: C語(yǔ)言 HTTP
關(guān)閉