RTT startup.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的结尾地址。

 

转载于:https://www.cnblogs.com/lyyyuna/archive/2013/02/04/4123955.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值