嵌入式系統ARM處理器的C語言程序

1. volatile:易失性變量

  • 該變量可能由於程序指令以外的原因被修改
  • 變量被多個任務(中斷ISR)共享;
  • 變量代表硬件寄存器:
  1.  讀寫內容不同,多次訪問不同,與訪問順序相關
  2. 對變量的訪問會觸發某些事件的發生
  3. 變量值可能由軟件之外的原因發生不可預知的變化。

2.數據存儲方式:

  • 靜態變量存儲區:static變量以及全局變量,全局數組
  • 堆棧:(stack,heap):中間結果中間數據存儲在堆棧中。動態分配使用的公共區域:malloc()。堆棧在告訴SRAM區域,

 

    對於堆棧使用避免堆棧溢出避免使用遞歸函數調用。auto變量要明確賦初值(在堆棧中會清空變量不會清除值)

例子:

 以上代碼存在着三個問題:

  1. img變量申請空間[4096]超出了堆棧的最大容量,會造成堆棧溢出,正常堆棧申請爲200左右個字節,4096遠超過堆棧的最大容量
  2. 在對指針*p定義的時候,沒有賦初值,*p在堆棧中會得到一個堆棧的歷史值,在後面的p=s1,等操作中,會出現錯誤,
  3. 堆棧在使用完畢後會自動釋放內存,此時return img得不到該變量的值。

3.嵌入式軟件生成過程

  1. 預處理:處理所有的#開頭的文件,例如#define(替換)#include(展開)
  2. 編譯:詞法分析,語義分析,建立符號表,優化,對每個單獨的c文件轉爲彙編文件
  3. 彙編:將彙編語句變爲二進制文件,爲計算機直接可執行文件,

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章