嵌入式程式設計

2021-09-12 09:35:01 字數 959 閱讀 5111

1、

interrupt double compute_area(double radis)

(1)isr不能返回乙個值。

(2)isr不能傳遞引數。

(3)在許多處理器中浮點是不可重入的。

(4)printf()經常有重入和效能上的問題,所以一般不使用printf();

2.volatile

(1)volatile的語法和const是一樣的,volatile意思是 這個變數是易變的,在編譯器認識的範圍外,這個資料可以被改變,不知什麼原因,環境正在改變資料,所以volatile告訴編譯器不要擅自做出有關資料的任何假設定-----在優化期間這是特別重要的。

每次使用到這個資料時,編譯器必須重讀這個資料。

(2)乙個定義為volatile的變數是說這個變數可能會被意想不到的改變,這樣,編譯器就不會去假設這個變數的值了,也就是說,優化器再用到這個變數時必須每次都小心地重新讀取這個變數的值,而不是使用儲存在備份暫存器裡的備份。

幾個例子:

·並行裝置的硬體暫存器(如狀態暫存器)

·乙個中斷服務子程式中會訪問到的非自動變數。

· 多執行緒應用中被幾個任務共享的變數。

3.const

const int *a; //a是乙個指向常整型數的指標(整型數是不可修改的,但指標可以修改)

int *const a; //a是乙個指向整型數的常指標(指標指向的整數型是可以修改的,但指標不可以修改)

int const *a const; //a是乙個指向常整型數的常指標(指標指向的整型數和指標都是不可修改的)

4.乙個引數既可以是const又是volatilem嗎

可以,如,唯讀的狀態暫存器,它是volatile,因為它可能被意向不到的改變;它是const,因為程式不應該試圖去修改它。

乙個指標可以是volatile嗎

可以,儘管很不常見,乙個例子是當乙個中斷服務子程式修改乙個指向乙個buffer的指標時。

嵌入式程式設計

對於簡單的應用程式,輪詢 許多時候也被稱作超級迴圈 實現起來比較簡單,而且非常適合簡單任務 見圖4.4 不過,當應用程式變得複雜或者對處理能力的要求更高時,輪詢就不合適了。例如,當乙個程序占用時間過長,其他模組在這段時間內就不會收到處理器的任何服務。即便不需要任何處理,處理器也得一直執行輪詢程式,這...

嵌入式Linux C程式設計

一 前言 一切,都想從不一樣做起。大學,原以為會和我當時高中想象的那樣,可以談場轟轟烈烈的戀愛,可以自由自在的旅行,可以忘乎所以,盡己之所興。如今,大三結束。驀然回首,卻發現自己浪費了那麼多改變自己的機會。如今,大學只剩最後一年,我要用這最後的時間去彌補曾經所浪費的一切,從現在開始,朝著自己的目標勇...

嵌入式C程式設計小結

最近在看公司嵌入式開發的文件和c語言 真佩服那些設計的人員,從需求分析說明書 時序圖 概要設計 詳細設計 到code階段,都做得很細緻。而且純粹是c語言開發,軟體設計人員必須對硬體有很深的了解才行,我看了一下裡面的code,足足有幾百多個.h和.c檔案,各個模組寫得很細緻。專案都快接近尾聲了,我什麼...