20190922(2 補) 核心介紹

2021-09-27 08:06:00 字數 1743 閱讀 3175

學習目標

1 了解核心啟動流程

2 示例模型

啟動流程

說明$sub$$代表在執行 main() 函式之前的系統初始化工作

$super$$代表程式跳轉到 main() 函式執行工作

int $sub$$main(void) 

int rtthread_startup(void)

int main(void)

這部分啟動**,大致可以分為四個部分:

(1)初始化與系統相關的硬體;

(2)初始化系統核心物件,例如定時器、排程器、訊號;

(3)建立 main 執行緒,在 main 執行緒中對各類模組依次進行初始化;

(4)初始化定時器執行緒、空閒執行緒,並啟動排程器。

rt_hw_board_init() 中完成系統時鐘設定,為系統提供心跳、串列埠初始化,將系統輸入輸出終端繫結到這個串列埠,後續系統執行資訊就會從串列埠列印出來

記憶體分布

keil

linking... 

program size: code=48008 ro-data=5660 rw-data=604 zi-data=2124

說明:

code: **段

ro-data:唯讀,存放程式定義的常量

rw-data: 讀寫,存放初始化為非 0 值的全域性變數

zi-data: 0 資料段,存放未初始化的全域性變數及初始化為 0 的變數

對應的 .map 檔案說明各個函式占用的尺寸和位址

total ro size (code + ro data) 53668 ( 52.41kb) total

rw size (rw data + zi data) 2728 ( 2.66kb) total

rom size (code + ro data + rw data) 53780 ( 52.52kb)

ro size 表示 flash 占用的空間大小

rw size 執行時 ram 占用的空間大小

rom 表示燒寫程式所占用的 flash 空間大小

自動化初始化

初始化順序

巨集介面描述

1init_board_export(fn)

非常早期的初始化,此時排程器還未啟動

2init_prev_export(fn)

主要是用於純軟體的初始化、沒有太多依賴的函式

3init_device_export(fn)

外設驅動初始化相關,比如網絡卡裝置

4init_component_export(fn)

元件初始化,比如檔案系統或者 lwip

5init_env_export(fn)

系統環境初始化,比如掛載檔案系統

6應用初始化,比如 gui 應用

只要在相關函式定義用巨集定義宣告即可

int rt_hw_usart_init(void) /* 串列埠初始化函式 */ 

init_board_export(rt_hw_usart_init);/* 使用元件自動初始化機制 */

```

PHP curl setopt函式用法介紹補充篇

1.curl資料採集系列之單頁面採集函式get html 單頁面採集在資料採集過程中是最常用的乙個功能 有時在伺服器訪問限制的情況下 只能使用這種採集方式 慢 但是可以簡單的控制 所以寫好乙個常用的curl函式呼叫是很重要的。url ch curl init url curl setopt ch,c...

PHP curl setopt函式用法介紹補充篇

1.curl資料採集系列之單頁面採集函式get html 單頁面採集在資料採集過程中是最常用的乙個功能 有時在伺服器訪問限制的情況下 只能使用這種採集方式 慢 但是可以簡單的控制 所以寫好乙個常用的curl函式呼叫是很重要的。url ch curl init url curl setopt ch,c...

Android核心介紹

android 還新增了其他的東西,比如 real time clock,switch,timed gpio。power management 5 files 電源管理對於移動裝置來說相當重要,也是最複雜,開發難度最高的乙個功能。google新增了乙個新的電源管理系統,並沒有原先apm,dpm等。其...