RTEMS 4.9.4 bootcard.c 中的 boot_card 函数分析
RTEMS 4.9.4
?
?
進入 boot_card 函數即開始全面的初始化。
boot_card函數是~RTEMS~提供的一個通用初始化框架,不論在何種處理器上,都是使用這個框架為系統做初始化的工作。
它最大程度上復用了代碼,也保證了所有的初始化動作盡可能用~C~語言撰寫。它完成的工作按順序羅列如下:
步驟~1~首先關閉中斷。這個操作與處理器高度相關,系統會在切換第一個任務上下文到處理器上時打開中斷。
接著處理~boot_card~函數的參數。通常,引導程序會將參數傳遞到操作系統中,用以指定與硬件環境相關的參數或其他信息。
通用的初始化框架只是從這個參數中獲取應用程序的名稱,如果失敗,則指定一個默認的名稱。
注意:CSB337~的啟動代碼并沒有處理引導程序傳遞給操作系統的參數,更沒有顯式地傳遞參數到~boot_card~中。
步驟~2~需要定義宏~BSP_BOOTCARD_HANDLES_RAM_ALLOCATION~才能執行。
但在~rtems_initialize_data_structures~函數中,已完成了對應的工作,為內核的工作空間申請內存并初始化。
所以沒有必要定義這個宏去執行步驟~2。
步驟~3~是調用~bsp_start~函數,這個函數主要完成一些與硬件高度相關的初始化操作。
比如說初始化鎖相環~(Phase-Locked Loop,PLL)、實時時鐘、獲取內存空閑空間起始位置與尺寸等。
衡量是否將初始化放在這里可參考以下幾個條件:
步驟~4~初始化內核的數據結構,此步驟所做的操作將在后續章節中討論。初始化內核數據結構之后,即可使用~RTEMS~的非阻塞函數。
因為多任務還沒有開始,當前任務被阻塞后,沒有一個處于就緒態的任務運行。
使用阻塞調用,只能產生一個嚴重的錯誤。
步驟~5,由于沒有定義宏~BSP_BOOTCARD_HANDLES_RAM_ALLOCATION,這一步驟是不執行的。
步驟~6~與步驟~5~完成的工作是相同的,所以也沒有必要定義這個宏。
步驟~7,如果配置時啟用了~RTEMS~的調試功能,即~configure~時指定~--enable-rtems-debug~參數,則打開所有~RTEMS~支持的動態調試特性。
否則,生成的~RTEMS BSP~包不包含調試代碼。
步驟~8~至~11~都是完成與驅動相關的操作,直至步驟~12~系統啟動多任務,多任務啟動成功即標志著操作系統初始化完畢。
如果在多任務中調用~rtems_shutdown_executive~函數或~POSIX~標準下的~exit~函數,都會使~RTEMS~從多任務返回。
步驟~13,執行一些關閉~RTEMS BSP~的動作。通常該函數可以什么都不做。
步驟~14,返回~0~給調用程序,此返回值無任何意義。
轉載于:https://blog.51cto.com/coolbacon/1280023
總結
以上是生活随笔為你收集整理的RTEMS 4.9.4 bootcard.c 中的 boot_card 函数分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 治疗口蹄疫的方法
- 下一篇: Python初学问题-if/else的运