為確保消息數(shù)據(jù)的完整性,除了驗(yàn)證消息CRC之外,建議實(shí)現(xiàn)檢查串行端口(UART)成幀錯(cuò)誤的代碼。如果接收消息中的CRC與接收設(shè)備計(jì)算的CRC不匹配,則應(yīng)忽略該消息。下面的C語言代碼片段顯示了如何使用逐位移位和異或運(yùn)算來計(jì)算Modbus消息CRC。使用消息幀中的每個(gè)字節(jié)計(jì)算CRC,除了包含CRC本身的最后兩個(gè)字節(jié)。
所謂的數(shù)組越界,簡單地講就是指數(shù)組下標(biāo)變量的取值超過了初始定義時(shí)的大小,導(dǎo)致對(duì)數(shù)組元素的訪問出現(xiàn)在數(shù)組的范圍之外,這類錯(cuò)誤也是 C 語言程序中最常見的錯(cuò)誤之一。
本文介紹了字符串轉(zhuǎn)十六進(jìn)制、十六進(jìn)制轉(zhuǎn)字符串、字符串轉(zhuǎn)十進(jìn)制、十進(jìn)制轉(zhuǎn)字符串等知識(shí)點(diǎn)。
謝賓斯基三角形是一個(gè)有意思的圖形,(英語:Sierpinski triangle)是一種分形,由波蘭數(shù)學(xué)家謝爾賓斯基在1915年提出,它是一種典型的自相似集。
有些數(shù)據(jù)在存儲(chǔ)時(shí)并不需要占用一個(gè)完整的字節(jié),只需要占用一個(gè)或幾個(gè)二進(jìn)制位即可。例如開關(guān)只有通電和斷電兩種狀態(tài),用 0 和 1 表示足以,也就是用一個(gè)二進(jìn)位。正是基于這種考慮,C語言又提供了一種叫做位域的數(shù)據(jù)結(jié)構(gòu)。
一位初學(xué)單片機(jī)的小伙伴讓我推薦C語言書籍,因?yàn)镃語言基礎(chǔ)比較差,想把C語言重新學(xué)一遍,再去學(xué)單片機(jī),我以前剛學(xué)單片機(jī)的時(shí)候也有這樣子的想法。其實(shí)C語言是可以邊學(xué)單片機(jī)邊學(xué)的,學(xué)單片機(jī)的一些例程中,遇到不懂的C語言知識(shí),再去查相關(guān)的知識(shí)點(diǎn),這樣印象才會(huì)深刻些。
前言 在計(jì)算機(jī)軟件領(lǐng)域,做出過重大貢獻(xiàn)的神人很多,在這閃耀的明星中,最為閃耀的莫過于「Linus ?Torvalds和Dennis Ritchie」。 那么,這兩位誰的貢獻(xiàn)更大呢?
C 與 C++ 的真正區(qū)別在哪里?
寫好C語言,漂亮的宏定義很重要,使用宏定義可以防止出錯(cuò),提高可移植性,可讀性,方便性等等。
這里利用一個(gè)實(shí)際發(fā)生的例子,針對(duì)初級(jí)工程師經(jīng)常犯的一個(gè)小錯(cuò)誤,或者經(jīng)常要走的一個(gè)彎路,做了針對(duì)性的糾正。希望可以幫到大家,文筆不好文章中有敘述不清的地方大家多多指教。
本文將從編寫利于優(yōu)化的源代碼,節(jié)省棧和內(nèi)存空間,函數(shù)原型,整型和位取反,同時(shí)讀寫變量的保護(hù),不進(jìn)行初始化的變量這幾個(gè)方面來討論如何編寫良好的嵌入式C代碼。
選擇一種合適的數(shù)據(jù)結(jié)構(gòu)很重要,如果在一堆隨機(jī)存放的數(shù)中使用了大量的插入和刪除指令,那使用鏈表要快得多。數(shù)組與指針語句具有十分密切的關(guān)系,一般來說,指針比較靈活簡潔,而數(shù)組則比較直觀,容易理解。對(duì)于大部分的編譯器,使用指針比使用數(shù)組生成的代碼更短,執(zhí)行效率更高。
C 語言把文件看作是一個(gè)字符(字節(jié))的序列,即由一個(gè)一個(gè)字符(字節(jié))的數(shù)據(jù)順序組成。根據(jù)數(shù)據(jù)的組織形式,可分為 ASCⅡ 文件和二進(jìn)制文件。文件的操作包括:文件的打開、文件的關(guān)閉、文件的讀寫操作、文件狀態(tài)檢查以及文件的定位等。
整型提升是C程序設(shè)計(jì)語言中的一項(xiàng)規(guī)定:在表達(dá)式計(jì)算時(shí),各種整形首先要提升為int類型,如果int類型不足以表示的話,就需要提升為unsigned int類型,然后再執(zhí)行表達(dá)式的運(yùn)算。
有限狀態(tài)機(jī)是一種概念思想,把復(fù)雜的控制邏輯分解成有限個(gè)穩(wěn)定狀態(tài),組成閉環(huán)系統(tǒng),通過事件觸發(fā),讓狀態(tài)機(jī)按設(shè)定的順序處理事務(wù)。單片機(jī)C語言的狀態(tài)機(jī)編程,是利用條件選擇語句( switch 、 case 或者 if 、 else )切換狀態(tài),通過改變狀態(tài)機(jī)狀態(tài),讓程序按設(shè)定的順序執(zhí)行。
void 與 void*;volatile關(guān)鍵字 ;數(shù)據(jù)占用大小……
寫好C語言,漂亮的宏定義很重要,使用宏定義可以防止出錯(cuò),提高可移植性,可讀性,方便性等等。下面列舉一些成熟軟件中常用的宏定義。
如何保證C語言的執(zhí)行效率?
最近應(yīng)邀在??途W(wǎng)寫 C++ 求職專欄,又把以前的秋招總結(jié)補(bǔ)充了很多東西,現(xiàn)在想想還是發(fā)出來,希望能夠幫助更多的新手小伙伴們。
日志框架可以自己編寫(需要一定的能力哦),也可以由第三方(例如:log4cplus)提供。對(duì)于不同的日志框架,各自在實(shí)現(xiàn)方式上也有所不同。