程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> RTT startup.c 代碼學習

RTT startup.c 代碼學習

編輯:關於C語言
 

RTT的學習集中在應用層,底層的代碼會在必要的時候涉及一下。

 

startup是RTT的啟動代碼,類似於ucos。

 

void rtthread_startup(void)
{
    /* init board */
    rt_hw_board_init();

    /* show version */
    rt_show_version();

    /* init tick */
    rt_system_tick_init();

    /* init kernel object */
    rt_system_object_init();

    /* init timer system */
    rt_system_timer_init();

    /* init scheduler system */
    rt_system_scheduler_init();

    /* init all device */
    rt_device_init_all();

    /* init application */
    rt_application_init();

    /* init idle thread */
    rt_thread_idle_init();

    /* start scheduler */
    rt_system_scheduler_start();

    /* never reach here */
    return ;
}


 

看了一下,rt_hw_board_init(); 和 rt_application_init(); 是我需要關注的代碼。

第一個為板級的初始化,第二個是各個線程的初始化。

 

#ifdef RT_USING_HEAP
#if STM32_EXT_SRAM
    rt_system_heap_init((void*)STM32_EXT_SRAM_BEGIN, (void*)STM32_EXT_SRAM_END);
#else
#ifdef __CC_ARM
    rt_system_heap_init((void*)&Image$$RW_IRAM1$$ZI$$Limit, (void*)STM32_SRAM_END);
#elif __ICCARM__
    rt_system_heap_init(__segment_end("HEAP"), (void*)STM32_SRAM_END);
#else
    /* init memory system */
    rt_system_heap_init((void*)&__bss_end, (void*)STM32_SRAM_END);
#endif
#endif
#endif


 

這段代碼是有關運行時堆的初始化。分別對應外部RAM,MDK, IAR, GCC。那個MDK奇奇怪怪的寫法在另一篇博文中有敘述了,簡單來說就是用沒有初始化的RAM作為起始一直到結束。堆的話主要是動態線程的創建,內存分配要用。靜態線程什麼的其棧已知,故初始化RAM有。那個奇奇怪怪的符號是鏈接器特有的,用來獲知已用RAM的結尾地址。

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved