1 內存分佈
一個程序包含兩個部分:
1.只讀區(代碼區),代碼區裏有代碼和只讀數據。(代碼區就是程序編譯後生成的二進制文件,存在你的硬盤裏)
2.讀寫區(變量區),變量區有全局變量,堆,棧。棧(stack):是由進程分配的臨時變量的區域;堆(heap):是自己開闢出來的空間,C語言裏有calloc ,malloc函數來開闢空間,由free釋放。java由new開闢,有自動回收機制。
說到內存分區,內存即指的是RAM。
-
棧區(stack): 這個一般由編譯器操作,或者說是系統管理,會存一些局部變量,函數跳轉跳轉時現場保護(寄存器值保存於恢復),這些系統都會幫我們自動實現,無需我們干預。 所以大量的局部變量,深遞歸,函數循環調用都可能耗盡棧內存而造成程序崩潰
-
堆區(heap): 一般由程序員管理,比如alloc申請內存,free釋放內存。我們創建的對象也都放在這裏
-
全局區(靜態區 static):全局變量和靜態變量的存儲是放在一塊的,初始化的全局變量和靜態變量在一塊區域, 未初始化的全局變量和未初始化的靜態變量在相鄰的另一塊區域。 - 程序結束後有系統釋放。注意:在嵌入式系統中全局區又可分爲未初始化全局區:.bss段和初始化全局區:data段。舉例:int a;未初始化的。int a = 10;已初始化的。
-
常量區:常量字符串就是放在這裏的,還有const常量
-
代碼區:存放代碼,app程序會拷貝到這裏,程序不是在ROM裏面存儲嗎?看下面的舉例
2 前後臺代碼結構
前後臺代碼結構:一般是在中斷(前臺)中打標誌位,再到大循環(後臺)裏輪詢具體執行對應的代碼。進入中斷程序執行時間儘可能的少,做到快進快出,中斷程序中不要有延時函數,保證程序效率更高。前後臺代碼難以保證實時性,代碼結構複雜,
所有的操作系統入口都是中斷。
3 RTOS通用組件
資源的訪問控制:像內存,外設,硬件都可以稱爲資源,資源是有限且只有一份,但多個任務都想訪問,通過信號量、互斥鎖、臨界區進行資源的訪問控制。
消息通信:通過消息隊列、事件標誌來通信。
內存管理:存儲塊. 嵌入式系統玩的就是內存
4 RTOS特點
1 更好的事件實時處理機制
2 更高效利用CPU資源
3通用的任務管理框架
5FreeRTOS源碼結構