ARM學習之Nand FLash控制器
今天學習了Nand Flash的一些內容。在此做下回憶和總結:
1.什麼是Nand Flash?
答:Nand FLash是一種非易失性的儲存性介質,一般用於儲存嵌入式系統執行所必需的作業系統、應用程式、使用者資料等,地位和PC上的硬碟類似。一般來說,它的介面引腳不像SDRAM那樣多(SDRAM有20多根),一般也就是十幾根。以三星公司的K9F1208U0M為例,如下所示。
正因為它的資料引腳較少,所以它的命令、地址、資料都是公用這一組IO引腳再配上ALE、CLE等其他使能訊號進行傳輸的。操作Nand Flash(讀、寫、擦除)也和簡單,基本上是按照傳輸命令、傳輸地址、最後讀寫資料這樣一個流程實現的。這些命令在具體的晶片手冊上都會有。
就像上面說的,命令、地址、資料都是通過那一組IO引腳傳輸的,不過對於S3C2440晶片來說,它為我們準備好了一組暫存器(NFCON、NFCONT等),我們只要操作具體的暫存器就可以實現上述流程。
2.static在嵌入式程式設計中的作用?
答:今天在看程式碼的時候,看到了用static修飾的靜態函式。有點疑惑,所以查閱瞭解了一下。
有一篇CSDN部落格上講的挺詳細的,先摘錄如下(http://blog.csdn.net/janeqi1987/article/details/46998603):
static從本質來講就兩個作用:
(1)、限定儲存域
(2)、限定作用域
第一、限定儲存域:被static修飾的變數無論是區域性變數還是全域性變數都將被編譯器存放在靜態區。而實際上在gcc編譯完生成的ELF格式檔案中並沒有靜態區這個概念,所謂靜態區是我們在概括討論程式資料段的一種泛稱。實際上編譯器會根據具體情況把被static修飾的變數分為兩類:當變數被定義並初始化為非零值的時候,變數將放在.data段;當否則為初始化或初始化為零的時候將放在.bss段。我們在不深入討論的時候暫且可以將此兩段概括為靜態區。而放在靜態區的變數由於儲存域的原因導致生命週期很長,長度為程式(確切講應該是該程式執行後的程式)的一次執行過程,而普通區域性變數由於在執行過程中被系統分配在棧區所以生命週期只是一次函式的呼叫過程。
第二、限定作用域:由於靜態還是普通區域性變數本身的作用域就是函式內部,因此static的作用域主要是對全域性變數和函式的限定。被staitc修飾的全域性變數或函式都被編譯器標記為僅在本檔案中使用,由於編譯器在編譯過程中是以.c結尾的原始檔為單位依次生成以.o結尾的目標檔案,所以最後聯結器在連線過程中將不允許被static修飾的變數或函式的地址對外連結。這樣既可以防止全域性變數或函式的重名問題,又可以防止由於無關的全域性變數誤操作引起的程式邏輯問題。因此static就限定了變數或函式的作用域。
- volatile在嵌入式程式設計中的作用?
答:volatile是不穩定的意思,它是一個變數修飾符,用來指示編譯器不要對此修飾符修飾的變數進行優化,否則可能會出現錯誤。簡單來說,當有些變數從記憶體中讀入到暫存器中的時候,可能會保留一個備份,下次操作此變數的時候就不用在此從記憶體中讀取,直接使用這個備份暫存器中的值就可以了(這是由編譯器優化實現的)。但是在涉及到多執行緒或者有關硬體程式設計的時候,對有些變數不需要這些優化(可能是為了保持資料的穩定性、一致性),就用到了這個修飾符。
4.一個小的發現:以前在程式設計的時候,定義了一個結構體之後,都是用這個宣告的結構體定義一個變數,由系統給我們分配這個變數的空間(動態或靜態)。今天在看程式碼的時候,發現在底層的程式設計中,有的時候可以直接給變數賦一個指定的值(長知識了)。如下圖所示,
相關文章
- NAND FlashNaN
- NAND Flash和NOR Flash的區別NaN
- Mini2440 64M Nand Flash 更改為128M Nand FlashNaN
- nor flash 和nand flash 傻傻分不清楚NaN
- NAND FLASH的介面控制設計NaN
- ARM學習之GPIO實現流水燈
- Swoft 學習筆記之控制器筆記
- TrendForce:上游晶圓代工產能緊缺 NAND Flash控制器將上漲約15~20%NaN
- Arm pwn學習
- NAND FLASH系統的權衡利弊NaN
- ARM學習之時鐘體系結構
- Nand Flash結構及錯誤機制NaN
- 關於NAND FLASH解釦的認識NaN
- NAND Flash是如何生產出來的?NaN
- 宏旺半導體科普SPI NAND Flash和SPI NOR Flash的區別NaN
- arm相關學習
- Symfony2 學習筆記之控制器筆記
- jmeter學習指南之16個邏輯控制器JMeter
- Swift3.0-學習之路之導航控制器Swift
- S3C2440從NAND Flash啟動和NOR FLASH啟動的問題S3NaN
- 在一臺ubuntu的arm板子上學習arm彙編Ubuntu
- AVR微控制器EEPROM學習VR
- 怎麼看時序圖--nand flash的讀操作詳解時序圖NaN
- ARM學習之中斷體系結構
- Nand Flash基礎知識與壞塊管理機制的研究NaN
- 微控制器學習(七)串列埠串列埠
- Laravel核心程式碼學習 -- 控制器Laravel
- angular學習筆記(十二)-控制器Angular筆記
- 51微控制器學習跳轉
- 菜鳥之學習51微控制器(一)認識開發板
- ARM嵌入式系統該如何學習
- ARM學習中的必知基本常識
- 東芝停工、NAND Flash又要漲價了?宏旺半導體:國產替代來臨NaN
- 系統學習iOS動畫之四:檢視控制器的轉場動畫iOS動畫
- 【微控制器學習】第八課:微控制器的LED點陣
- (轉)關於NAND flash的MTD分割槽與uboot中分割槽的理解NaNboot
- 常見的ARM嵌入式學習問答
- 51微控制器學習歷程(二)快速入門51微控制器