接下来创建 main 线程,同时会对线程栈进行初始化。main 线程通常承担着用户应用程序的主要逻辑。 在rtthread_startup 函数中,还会进行定时器和调度器的初始化。定时器初始化确保系统能够进行精确的定时操作,调度器初始化则为任务的合理分配和切换奠定基础。 在完成这些初始化工作后,系统准备就绪,等待调度器启动,从而开...
系统线程是由RT-Thread 内核创建的线程,用户线程是由应用程序创建的线程,这两类线程都会从内核对象容器中分配线程对象,当线程被删除时,也会被从对象容器中删除。 如图所示,每个线程都有重要的属性,如线程控制块、线程栈、入口函数等。 RT-Thread 的线程调度器是抢占式的,主要的工作就是从就绪线程列表中查找最高优...
主线程:main线程,入口函数为main_thread_entry 静态线程与动态线程 动态线程,系统自动从动态内存堆上分配栈空间与线程句柄 静态线程,用户分配栈空间和线程句柄 系统调度相关API 启动线程:rt_thread_startup 获得当前线程:rt_thread_self 使线程让出处理器资源:rt_thread_yield(相同优先级,让出时间片) 使线程睡眠:rt...
在RT-Thread实时操作系统中,创建线程可以使用rt_thread_init和rt_thread_create两种不同的方式。这两种方式的差别主要是 预先分配还是动态分配线程控制块和线程堆栈内存。 1. 使用rt_thread_create函数创建线程 rt_thread_create是一种动态创建线程的方法。该函数会在运行时分配线程控制块和线程栈的内存空间。这种方式...
1、线程的名称;线程名称的最大长度由 rtconfig.h 中的宏 RT_NAME_MAX 指定,多余部分会被自动截掉 2、线程入口函数 3、线程入口函数参数,没有就用 RT_NULL 4、线程栈大小,单位是字节 5、线程的优先级。优先级范围根据系统配置情况(rtconfig.h 中的 RT_THREAD_PRIORITY_MAX 宏定义), ...
RT-Thread启动流程 系统上电后,启动流程便从特定的启动文件开始执行。这个文件主要负责进行基础的硬件设置,诸如初始化系统时钟、配置中断向量表以及堆栈的初步设置等。完成这些初步操作后,程序会跳转到RT-Thread的入口函数rtthread_startup。在这个入口函数中,会依次展开一系列关键的初始化步骤。首先是硬件的详细初始化...
线程恢复函数rt_thread_resume() 线程恢复就是让挂起的线程重新进入就绪状态,恢复的线程会保留挂起前的状态信息,在恢复的时候根据挂起时的状态继续运行。如果被恢复线程在所有就绪态线程中,位于最高优先级链表的第一位,那么系统将进行线程上下文的切换。 rt_kprintf("恢复LED1线程!\n"); ...
2.2 获取互斥量函数 RT-Thread 中,获取互斥量函数rt_mutex_take内部已经实现了优先级继承 // 高优先级线程 tid2 试图拥有低优先级线程 tid3 的互斥锁, // RT-Thread 会将 tid3 优先级提高到 tid2 同等优先级 result = rt_mutex_take(mutex, RT_WAITING_FOREVER); ...
初始化系统设备,这个主要是为 RT-Thread 的设备框架做的初始化; 初始化各个应用线程,并启动调度器。 用户入口代码 上面的启动代码基本上可以说都是和 RT-Thread 系统相关的,那么用户如何加入自己的应用程序的初始化代码呢?RT-Thread 将 main 函数作为了用户代码入口,只需要在 main 函数里添加自己的代码即可。
线程是 RT-Thread 操作系统中最小的调度单位,线程调度算法是基于优先级的全抢占式多线程调度算 法,即在系统中除了中断处理函数、调度器上锁部分的代码和禁止中断的代码是不可抢占的之外,系统的其他部分都是可以抢占的,包括线程调度器自身。支持 256 个线程优先级(也可通过配置文件更改为最大支持 32 个或 8 个线...