1.6 rt_application_init(),该函数创建main thread,创建完并不会运行,因为这会儿调度起还没开始工作呢,创建好的thread只能先“挂着”。值的注意的是,这里main_thread_entry()是以线程的形式运行的,上一篇分析到main_thread_entry()里运行main(),也就是说,在RT-Thread系统中,main函数是以线程态运行的,而不是系...
rt_application_init函数中创建了一个main线程: main线程的线程函数为: 总结:$Sub$$和$Super$$是成对使用的。可以使用如下结构给函数进行扩展(打补丁): 代码语言:javascript 代码运行次数:0 运行 AI代码解释 externvoidExtraFunc(void);/* 用户自己实现的外部函数*/void$Sub$function(void){ExtraFunc();/* 做...
别急,我们跳到rt_application_init()里看看,哦,原来main()函数是作为一个thread来创建了,入口程序是main_thread_entry() void rt_application_init(void) { rt_thread_t tid; #ifdef RT_USING_HEAP tid = rt_thread_create("main", main_thread_entry, RT_NULL, RT_MAIN_THREAD_STACK_SIZE, RT_MAIN_T...
在RT-Thread 中,创建了一个名字为"main"的线程来调用main()函数,就是在rtthread_startup函数中的rt_application_init(),如下图: 2.2.4 调度器说明 调度器是操作系统的核心知识,调度器是基于链表进行操作的,具体的原理将来会单独写一篇文章说明,这里我们就简单的过一遍,知道函数的用意。 在rtthread_startup函数...
/* create init_thread */rt_application_init(); 我们可以在这个线程里做一下外设初始化的工作。它也是一个普通线程。在调用creat/init函数创建好线程后,就可以用 rt_thread_startup(tid)函数来加入道就绪队列中了。 rt_err_trt_thread_startup(rt_thread_t thread){/* set current priority to initialize...
⑤以下是在rt_application_init()函数中创建的main函数线程:⑥$Super$$mian 可以直接跳到main()函数;...
rt_application_init() 动态创建一个main函数的线程,也就是主线程,分配栈空间,把主线程的入口定义为main_thread_entry(),然后通过rt_thread_startup()启动该线程。 main_thread_entry() 组件初始化等等,最后调用main函数 最后找entry的入口,在stm32的启动文件里。
“enviroment init functions”为所有通过 INIT_ENV_EXPORT(fn)申明的初始化函数。 “application init functions”为所有通过 INIT_APP_EXPORT(fn)申明的初始化函数。 rt_components_board_init() 函数执行的比较早,主要初始化相关硬件环境,执行这个函数时将会遍历通过 INIT_BOARD_EXPORT(fn)申明的初始化函数表,并调...
在rtthread_startup()函数中调用rt_application_init()函数,该函数会创建一个初始化线程,也就是用户线程。 该线程的入口函数为main_thread_entry(),在这个函数中会调用$Super$$main(), 进入main()。 /* 系统 main 线程入口函数 */ void main_thread_entry(void *parameter) ...
还是在rtthread_startup中往下看,进入到rt_application_init函数,就是 main 线程的初始化函数。 创建main 线程,因为没有使用heap,所以只能使用静态初始化的方式,这倒不是什么问题,但是我们需要注意的是,线程栈的大小为2K : 总共就8K 的RAM,一个main 线程就占用了 2K,算是很大了,这里得注意下这个大小,后续应用...