通过简化工程,配合Debug过程,逐步观察寄存器的变化、绘制栈帧结构、绘制线程控制块和rt_interrupt_from_thread、rt_interrupt_to_thread等典型变量取值(指向,虽然是rt_uint32_t类型,但实际在汇编中是作为指针使用),能有效帮助理解RTOS的线程栈的恢复与启动过程。 通过本文对线程启动过程的了解,对于两个线程/多个线程之...
静态线程创建成功的话会返回0,失败的话会返回一个负值,若成功创建线程,我们调用rt_thread_startup函数使线程2进入就绪态,并执行线程处理函数。 if(ret < 0){LOG_E("rt2_thread_create create failed ...\n"); // 错误信息打印return ret;}LOG_D("rt_thread2_create create successes ...\n");rt_thre...
1.1 启动流程图 系统先从启动文件开始运行,然后进入 RT-Thread 的启动 rtthread_startup() ,最后...
rt_thread_startup(&thread);elsetc_stat(TC_STAT_END | TC_STAT_FAILED);returnresult; }intthread_dynamic_init(){ rt_thread_t tid; tid = rt_thread_create("test", thread_entry, RT_NULL, THREAD_STACK_SIZE, THREAD_PRIORITY, THREAD_TIMESLICE);if(tid != RT_NULL) rt_thread_startup(tid)...
A2. 下一步要启动main线程,将其从Ready状态变成Running状态,所以需要将该线程从就绪列表中删除,RT-Thread后续在调度时暂时不考虑该线程,直到该线程状态再次从Running发生变化。 Step 12. 单步到进入到rt_hw_context_switch_to函数处,该函数位于context_gcc.S文件,由汇编语言编写实现。
创建线程有两种方式,根据是否由rt分配内存,分为静态创建线程和动态创建线程。默认是静态分配线程,如果需要使用动态创建线程的话,则需要开启宏定义RT_USING_HEAP,并设置heap相关函数。 二. 静态创建线程 rt_err_t rt_thread_init(struct rt_thread* thread,const char* name,void (*entry)(void* parameter), void...
启动线程:rt_thread_startup 脱离线程:rt_thread_detach //静态创建线程result = rt_thread_init(&thread1,//线程handle"static",//线程名rt_init_thread_entry,//线程入口函数RT_NULL,//线程入口参数&thread1_stack[0],//线程栈地址sizeof(thread1_stack),//线程栈大小6,//线程优先级10);//线程时间片...
rt_thread_exit(),处于运行状态的线程,运行结束,在线程的最后部分调用此函数,将状态更改为关闭状态。 线程控制块 在RT-Thread 中,线程控制块由结构体 struct rt_thread 表示。 线程控制块是操作系统用于管理线程的一个数据结构,它会存放线程的一些信息,例如优先级、线程名称、线程状态等。
在RT-Thread 中,与上述子任务对应的程序实体就是线程,线程是实现任务的载体,它是 RT-Thread中最基本的调度单位,它描述了一个任务执行的运行环境,也描述了这个任务所处的优先等级,重要的任务可设置相对较高的优先级,非重要的任务可以设置较低的优先级,不同的任务还可以设置相同的优先级,轮流运行。