學習ARM開發 9

2021-04-01 08:46:43 字數 1002 閱讀 3177

學習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機都已經發展了...