side effect,io
暫存器操作的邊際效應。sideeffect(譯為邊際效應或***):是指讀取某個位址時可能導致該位址內容發生變化,比如,有些裝置的中斷狀態暫存器只要一讀取,便自動清零。i/o 暫存器的操作具有sideeffect,因此,不能對其操作不能使用cpu快取。
linux核心中定義了很多巨集,對硬體埠和暫存器進行操作,從網上蒐集了一些巨集定義的資訊:
1. __reg簡單的說就是獲得後面所示物理位址對映後的虛擬位址,例如:
#define gplr0__reg(0x40e00000) /* gpio pin-level register gpio<31:0> */
#define gplr1__reg(0x40e00004) /* gpio pin-level register gpio<63:32> */
#define gplr2__reg(0x40e00008) /* gpio pin-level register gpio<80:64> */
pxa處理器內部暫存器的實體地址和核心空間的虛擬位址對應關係如下:
* 0x44000000 - 0x45ffffff <--> 0xfa000000 - 0xfbffffff
* 0x48000000 - 0x49ffffff <--> 0xfc000000 - 0xfdffffff
2. #define gplr(x)__reg2(0x40e00000,((x) & 0x60) >> 3).
還有乙個轉換的句子#define gpio_bit(x) (1 << ((x) & 0x1f))
gpio共有80個,所以32bit的暫存器只好沒組做3個. gpio_bit就是1左移x位(並且不要超過32);而gplr(x)則是根據x的數值(這個是gpio號,如16,37,72)得到3個gplr中屬於該gpio的gplr的起始位址,(__reg2就是獲得兩個位址的和).這樣子可以通過下面的賦值方法:
gpsr(gpio48_npoe) = gpio_bit(gpio48_npoe) | gpio_bit(gpio49_npwe);來設定gpio48所在gpsr的2個位.這麼一大堆,是為了用到gpio號定義好的巨集.簡單的gpsr3=***x|***x也是可以的.
3. side effect(譯為邊際效應或***):是指讀取某個位址時可能導致該位址內容發生變化,比如,有些裝置的中斷狀態暫存器只要一讀取,便自動清零。i/o暫存器的操作具有side effect,因此,不能對其操作不能使用cpu快取。i/o埠與實際外部裝置相關聯,通過訪問i/o埠控制外部裝置,「邊際效應」是指控制裝置(讀取或寫入)生效,訪問i/o 口的主要目的就是邊際效應,不像訪問普通的記憶體,只是在乙個位置儲存或讀取乙個數值,沒有別的含義了。我是基於arm平台理解的,在《linux裝置驅動程式》第二版中的說法是「***」,不是「邊際效應」。訪問i/o暫存器時,不僅僅會像訪問普通記憶體一樣影響儲存單元的值,更重要的是它可能改變cpu的i/o埠電平、輸出時序或cpu對i /o埠電平的反應等等,從而實現cpu的控制功能。cpu在電路中的意義就是實現其sideeffect。
邊際效應以及邊際效應的遞減規律
邊際效應 marginal utility 有時也稱為邊際貢獻,是指消費者在逐次增加乙個單位消費品的時候,帶來的單位效用是逐漸遞減的 雖然帶來的總效用仍然是增加的 一般情況下是指其他投入固定不變時,連續地增加某一種投入,所新增的產出或收益反而會逐漸減少。也就是說,當增加的投入超過某一水平之後,新增的...
define巨集的邊際效應
在c語言和c 中,define巨集進行的字元替換中,要注意邊際效應 define n 2 3 我們預想的n值是5,我們這樣使用n,int a n 2 我們預想的a的值是2.5,可實際上a的值是3.5原因在於在預處理階段,編譯器將 a n 2處理成了 a 2 3 2 這就是巨集定義的字串替換的 邊緣效...
邊際效應與邊際生產力理論
電影明星的加入,巨大地提公升了電影的票房,就說明星的邊際生產力很高 邊際生產力理論是新古典經濟理論的基石。邊際生產力理論是用於闡明在生產中相互合作的各種生產要素或資源所得到的報酬的一種方法。通常情況,當其他要素數量不變,而單位某種生產要素離開 或加入 生產過程時所引起的商品產值的減少 或增加 量,就...