FreeRTOS 學習記錄1

1 內存分佈

一個程序包含兩個部分:

1.只讀區(代碼區),代碼區裏有代碼和只讀數據。(代碼區就是程序編譯後生成的二進制文件,存在你的硬盤裏)

2.讀寫區(變量區),變量區有全局變量,堆,棧。棧(stack):是由進程分配的臨時變量的區域;堆(heap):是自己開闢出來的空間,C語言裏有calloc ,malloc函數來開闢空間,由free釋放。java由new開闢,有自動回收機制。

內存分區:可以分爲5個區

                                                                

說到內存分區,內存即指的是RAM。

  • 棧區(stack): 這個一般由編譯器操作,或者說是系統管理,會存一些局部變量,函數跳轉跳轉時現場保護(寄存器值保存於恢復),這些系統都會幫我們自動實現,無需我們干預。 所以大量的局部變量,深遞歸,函數循環調用都可能耗盡棧內存而造成程序崩潰

  • 堆區(heap): 一般由程序員管理,比如alloc申請內存,free釋放內存。我們創建的對象也都放在這裏

  • 全局區(靜態區 static):全局變量和靜態變量的存儲是放在一塊的,初始化的全局變量和靜態變量在一塊區域, 未初始化的全局變量和未初始化的靜態變量在相鄰的另一塊區域。 - 程序結束後有系統釋放。注意:在嵌入式系統中全局區又可分爲未初始化全局區:.bss段和初始化全局區:data段。舉例:int a;未初始化的。int a = 10;已初始化的。

  • 常量區:常量字符串就是放在這裏的,還有const常量

  • 代碼區:存放代碼,app程序會拷貝到這裏,程序不是在ROM裏面存儲嗎?看下面的舉例

 

2 前後臺代碼結構

                                                                   1100576-20170518203520978-129299542.png

前後臺代碼結構:一般是在中斷(前臺)中打標誌位,再到大循環(後臺)裏輪詢具體執行對應的代碼。進入中斷程序執行時間儘可能的少,做到快進快出,中斷程序中不要有延時函數,保證程序效率更高。前後臺代碼難以保證實時性,代碼結構複雜,

所有的操作系統入口都是中斷。

3 RTOS通用組件

                                    

資源的訪問控制:像內存,外設,硬件都可以稱爲資源,資源是有限且只有一份,但多個任務都想訪問,通過信號量、互斥鎖、臨界區進行資源的訪問控制。

消息通信:通過消息隊列、事件標誌來通信。

內存管理:存儲塊.   嵌入式系統玩的就是內存

4 RTOS特點

1 更好的事件實時處理機制

2 更高效利用CPU資源

3通用的任務管理框架

5FreeRTOS源碼結構

                                 

 

 

 

 

 

 

 

 

 

 

 

 

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