編譯器和區域性變數惹的禍 驅動開發中讀片選的問題

2022-08-10 01:33:12 字數 496 閱讀 4922

wince6.0, fifo驅動程式採集ad資料。

fifo驅動的ist中等待fifo的半滿中斷(下降沿觸發),等待成功後讀取fifo資料。

在進入ist後,由於fifo已經開始採數,此時的fifo是全滿的,不會產生下降沿觸發的半滿中斷,因此實現需要清掉fifo裡面的資料,c++**如下:

void cfifodevice::clear()}}

測試發現,上述**無法清掉fifo資料,如果改成下面的**:

unsigned shrot stmp;

void cfifodevice::clear()

}工作就正常了!

個人猜測,在前一段**,使用了stmp這個區域性變數;編譯器發現這個stmp並沒有被使用,因此編譯時就去掉了這個賦值操作,從而就沒有執行實際的賦值操作。對於普通的c++應用程式,這不是問題;但對於驅動程式,這卻是致命的!

而後一段**,由於stmp是全域性變數,雖然stmp卻是沒有被使用,但編譯器不會做優化,因此賦值操作正常執行。

編譯器的版本惹的禍

in file included from opt host armv4l lib gcc lib armv4l redhat linux 2.95.3 armv4l redhat linux include sys select.h 31,from opt host armv4l lib gcc ...

成員變數和區域性變數的區別

成員變數和區域性變數的區別?1.類中的位置不同 成員變數 在類中方法外 區域性變數 在方法中定義或者在方法宣告上 2.記憶體中的位置不同 成員變數 在堆記憶體中 區域性變數 在棧記憶體中 3.命週期不同 成員變數 隨著物件的建立而存在,隨著物件的消失而消失 區域性變數 隨著方法的呼叫而存在,隨著方法...

java的成員變數和區域性變數!

首先說下變數 1 成員變數 變數定義部分所定義的變數被稱為類的成員變數。也就是說成員變數在整個類中都有效,類中的方法可以直接呼叫成員變數使用。然而成員變數又分為例項成員變數 簡稱例項變數 和類變數 簡稱靜態變數 1.1 例項變數 就是我們正常定義的變數,比如int a a就是例項變數 1.2 靜態變...