學習arm開發(9)
上一次把引導的彙編看完,已經準備c的執行環境,下面就開始學習c的源程式,從start.s檔案裡到跳檔案
lib_arm/board.c裡執行.
/* 引導程式從彙編start.s裡跳到這裡執行。
蔡軍生 2005/07/19
*/ void start_armboot (void)
{ /* 宣告乙個全域性指標,它是指向乙個資料結構,用於儲存引數。
並且它占用r8暫存器,用它來儲存記憶體位址,達到全域性使用目的。
*/ declare_global_data_ptr;
ulong size;
init_fnc_t **init_fnc_ptr;
char *s;
#if defined(config_vfd) || defined(config_lcd)
unsigned long addr;
#endif
/* gd指標可寫,因為已經分配乙個暫存器給它作為變數。
這裡就相當於把後面算出來的位址儲存到r8暫存器.
*/ gd = (gd_t*)(_armboot_start - cfg_malloc_len - sizeof(gd_t));
/* 下面一句是阻止3.4以上版本的gcc進行**優化,把後面的**刪除掉。 */
__a**__ __volatile__("": : :"memory");
/* 清空gd指向的結構 */
memset ((void*)gd, 0, sizeof (gd_t));
/* */
gd->bd = (bd_t*)((char*)gd - sizeof(bd_t));
memset (gd->bd, 0, sizeof (bd_t));
monitor_flash_len = _bss_start - _armboot_start;
這一段準備好儲存引數的全域性變數區.
後面就是一系列的初始化和獲取正確的引數.
學習ARM開發 9
學習arm開發 9 上一次把引導的彙編看完,已經準備c的執行環境,下面就開始學習c的源程式,從start.s檔案裡到跳檔案 lib arm board.c裡執行.引導程式從彙編start.s裡跳到這裡執行。蔡軍生 2005 07 19 void start armboot void 宣告乙個全域性指...
學習ARM開發20 21
學習arm開發 20 os的任務切換 有了前面的tick中斷,那麼基本的任務切換條件已經是 萬事俱備,只欠東風 了。不過,這個 東風 也是很難搞得懂的,只有不斷地通過實踐才會找到合適的方法。現在我就需要去找這個東風了,就是解決不同的任務切換的問題。從簡單到複雜,這是任何事物的認識過程,也是行之有效的...
學習ARM開發 5
學習arm開發 5 蔡軍生 2005 07 16 寫於深圳 上一次說到要學習uboot的 但在看之前,首先要知道目標機器的程式設計資源,這裡的資源,是指s3c44b0所提供的執行程式的資源,對任何嵌入式軟體開發,都首先要對硬體有乙個很好的了解,這跟pc機的程式設計是大不一樣的。因為pc機都已經發展了...