rt_current_thread === to_thread; } else// (2) { from_thread === rt_current_thread; to_thread === rt_list_entry( rt_thread_priority_table[0].next, struct rt_thread, tlist); rt_current_thread === to_thread; }// (3) /* 产生上下文切换 */ rt_hw_context_switch((rt_uint32_...
{ register rt_base_t offset;//(1)/*线程就绪列表初始化*/for(offset =0; offset < RT_THREAD_PRIORITY_MAX; offset ++)//(2){ rt_list_init(&rt_thread_priority_table[offset]); //(2) }/*初始化当前线程控制块指针*/rt_current_thread= RT_NULL;//(3)} (1) :定义一个局部变量,用 C ...
1.6 rt_application_init(),该函数创建main thread,创建完并不会运行,因为这会儿调度起还没开始工作呢,创建好的thread只能先“挂着”。值的注意的是,这里main_thread_entry()是以线程的形式运行的,上一篇分析到main_thread_entry()里运行main(),也就是说,在RT-Thread系统中,main函数是以线程态运行的,而不是系...
阻塞延时函数在thread.c中定义。 voidrt_thread_delay(rt_tick_t tick) {structrt_thread *thread;/*获取当前线程的线程控制块*/thread= rt_current_thread; (1)/*设置延时时间*/thread->remaining_tick = tick; (2)/*进行系统调度*/rt_schedule(); (3) } (1)获取当前线程的线程控制块。rt_current_t...
= rt_hw_cpu_id();#else rt_current_thread = to_thread;#endif /*RT_USING_SMP*/ ...
struct rt_thread, tlist); /** 如果最高优先级线程非当前线程,切换到新线程去执行 */ if (to_thread != rt_current_thread) { rt_current_priority = (rt_uint8_t)highest_ready_priority; from_thread = rt_current_thread; rt_current_thread = to_thread; ...
在rt_thread_idle_excute中又涉及到一个全局变量rt_thread_defunct,当删除任务时,被删除的任务控制块就会被连接到这个链表上。在空闲任务中完成对资源的回收,提高系统性能。 rt_system_scheduler_start(); 从这个函数开始系统就正式开始运行了,首先获得就绪的最高优先级任务,然后赋值给rt_current_thread,最后触发软中...
struct rt_thread { void *sp; /* 线程栈指针 */ void *entry; /* 线程入口地址 */ void *parameter; /* 线程形参 */ void *stack_addr; /* 线程起始地址 */ rt_uint32_t stack_size; /* 线程栈大小,单位为字节 */ rt_list_t tlist; /* 线程链表节点 */ ...
RT-Thread 线程管理的主要功能是对线程进行管理和调度,系统中总共存在两类线程,分别是系统线程和用户...
scheduler.c 全局变量 当前线程TCBptr:rt_current_thread 线程切换函数(3)相关函数 [1]调度器初始化voidrt_system_scheduler_init(){// 1] 线程就绪列表 初始化} [2]启动调度器voidrt_system_scheduler_start() [3]系统调度voidrt_schedule()