C語言優先順序在嵌入式程式設計中的重要性

2021-06-16 10:17:14 字數 678 閱讀 8295

c語言優先順序在嵌入式程式設計中的重要性

最近在弄pic的乙個小專案,之前是前乙個同事在原有程式的基礎上經行了**的優化,同時新增了一點新的功能,由於pic微控制器的容量還是相對較小,所以不得不把眾多的adc轉換的函式整合到乙個函式裡,同時又有8位和10位的ad轉換功能。

在程式裡需要用到c語言裡的位運算,pic16f87x微控制器的ad轉換預設是10位的,而pic微控制器是8位微控制器,所以需要兩個8位暫存器來儲存ad轉換的值,並通過adfm位來設定其左對齊還是右對齊,然後在程式裡讀取ad轉換後的值,讀取數值的時候,就要用到位移的運算:

ret_val=((adresh&0x03)<<8) +adresl;  當然這個是正確的,我這裡加了括號,完全沒問題,ret_val是unsigned int型別的,可是之前的同時是這樣寫的:((adresh&0x03)<<8 +adresl);貌似沒錯啊,可是在c語言裡「+」的運算子比「<<」的優先順序高,所以他會先進行adresh&0x03,而後在8+adresl,最後在(adresh&0x03)<<(8 +adresl),和我們設想的完全不同了,從而到時讀到的值就是錯誤的,害得我弄了兩個晚上,幸好我留意了這個語句。

總結:在c語言裡,倘若程式設計師很清楚的知道運算子的優先順序,這個自然好,但是如果有點模糊,那就很有可能要出錯了,那就去看看c語言書,最保險的是加上括弧,那樣也是沒有問題的。記住:在嵌入式里位運算運用的還是很廣泛的,所以切記切記!~

嵌入式系統的優先順序倒置

以前也看到過嵌入式系統優先順序倒置的問題,但由於沒有實際的程式,理解的不夠透徹。今天終於有機會來看清廬山真面目了。我們的dsp 上有兩個 task spa 和txp,什麼意思,我就不說了。這兩個程序都會用到乙太網模組。txp的優先順序比 spa要高。spa作為乙個低優先順序的任務,執行時間比較長。現...

嵌入式開發 中斷優先順序的重要性

ti的lm3s1607,一開始中斷優先順序沒有設定,採用預設值 所有優先順序相同 則就是中斷不可巢狀。出現了uart通訊有時會丟失資料的問題,一開始以為是硬體干擾導致的。uart的接收緩衝佇列fifo長度設定為1,即接收到字元後就觸發中斷。因為外部通訊命令一般為多個位元組連續發,所以如果uart中斷...

嵌入式 LINUX 大作業 帶優先順序 計算器

在前段時間搞定了溫控系統後,嵌入式大作業要開始搞了 選定了計算器,一開始的想法是不能多不運算 但是前兩天找了點資料,然後看了相關的堆疊計算方法,於是決定好好搞一下表示式運算 因為lineedit settext qstring str 而計算則需要double型,所以需要格式的多次轉換,自己寫了個a...