收到《RT-Thread内核实现与应用开发实战指南》这本书快1周了,前段时间出差现在把读书笔记补上。
步入正题,之前用的freertos,硬件的初始化都是在main()函数里面,而拿到rtt的例程后后发现主函数里面只是任务的创建。那硬件部分初始化的代码在哪呢?在没理清之前自己也是很懵逼,
之后在board.c文件里面void rt_hw_board_init()中找到了,但还有个问题,这个函数在哪里被调用呢?既然是板集初始化,那很有可能会在组建部分的代码中出现,果然在components.c文件中找到
int rtthread_startup(void)
{
//代码就省略了
}
再往上找,rtt启动是在 int $Sub$$main(void)这个函数中,当时看的也是一懵,怎么还有$这东西,啥意思?不知道吧!看书啊或者去官网找,资料上说关于 $Sub$$ 和 $Super$$ 扩展功能的使用,详见 ARM® Compiler v5.06 for µVision®armlink User Guide。反正我也懒得去看(尴尬的是不一定能看懂啊),知道是个扩展功能就行。之后按照rtthread_startup函数往下走后发现
在rt_application_init里面创建了一个线程,入口函数是main_thread_entry。至此整个启动流程就比较清晰了。先是利用MDK的扩展功能创建$Sub$$main函数,在函数里面调用rtthread_startup。之后是在rt_application_init中创建main线程在main_thread_entry中调用用户的main()函数。
|