RT-Thread操作系统是基于线程调度的多任务系统。
线程状态切换
调度过程是一种完全抢占式的基于优先级的调度算法。
支持8/32/256优先级,其中0表示最高,7/31/255表示最低。最低优先级7/31/255优先级用于空闲线程。
支持以相同优先级运行的线程。 共享时间片循环调度用于这种情况。
线程包含五种状态,操作系统会自动根据它运行的情况来动态调整它的状态。
状态 | 描述 |
---|---|
初始状态(RT_THREAD_INIT) | 当线程刚开始创建还没开始运行时就处于初始状态;在初始状态下,线程不参与调度。 |
就绪状态(RT_THREAD_READY) | 在就绪状态下,线程按照优先级排队,等待被执行;一旦当前线程运行完毕让出处理器,操作系统会马上寻找最高优先级的就绪态线程运行。 |
运行状态(RT_THREAD_RUNNING) | 线程当前正在运行。 |
挂起状态(RT_THREAD_SUSPEND) | 也称阻塞态。它可能因为资源不可用而挂起等待,或线程主动延时一段时间而挂起。在挂起状态下,线程不参与调度。 |
关闭状态(RT_THREAD_CLOSE) | 当线程运行结束时将处于关闭状态。关闭状态的线程不参与线程的调度。 |
GPIO驱动架构操作IO
IO初始化
void rt_pin_mode(rt_base_t pin, rt_base_t mode)
PIN_MODE_OUTPUT
PIN_MODE_INPUT
PIN_MODE_INPUT_PULLUP
PIN_MODE_INPUT_PULLDOWN
PIN_MODE_OUTPUT_OD
IO写入
void rt_pin_write(rt_base_t pin, rt_base_t value)
PIN_HIGH
PIN_LOW
IO读出
int rt_pin_read(rt_base_t pin)
创建一个跑马灯线程
bash
#include <rtdevice.h> //记得引用此头文件
static void led_entry(void *param)
{
rt_pin_mode(14,PIN_MODE_OUTPUT);//设置f4引脚 drv_gpio.c中查看,设置为推挽输出
while(1)
{
rt_pin_write(14,PIN_LOW);
rt_thread_delay(50); //rt_tread_mdelay(500); rt_rthread_sleep(50);
rt_pin_write(14,PIN_HIGH);
rt_thread_delay(50);
}
}
void led_test(void)
{
rt_thread_t tid;
/* 创建线程1ed,名称是led,入口是led_entry*/
tid = rt_thread_create("led",
led_entry, RT_NULL,
512,
10, 10);
/* 如果获得线程控制块,启动这个线程 */
if (tid != RT_NULL)
rt_thread_startup(tid);
}
tips:list_thread 查看线程大小分配情况