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