任务三要素:任务栈,任务控制块,任务函数。
struct rt_thread led1_thread;/* 定义线程控制块 */ void led1_thread_entry(void* parameter);//任务函数 //注:动态线程的栈由任务自行动态分配创建立=一个简单的动态线程,代码如下:
static rt_thread_t tid1 = RT_NULL; static void thread_entry(void* parameter); #define THREAD_PRIORITY 25 #define THREAD_STACK_SIZE 512 #define THREAD_TIMESLICE 5 /* 创建线程1 */ tid1 = rt_thread_create("t1", /* 线程名称*/ thread_entry, /* 线程入口函数*/ (void*)1, /* 线程入口参数 */ THREAD_STACK_SIZE, /* 线程栈大小*/ THREAD_PRIORITY, /* 线程优先级*/ THREAD_TIMESLICE); /* 线程时间片*/ if (tid1 != RT_NULL) rt_thread_startup(tid1);//启动线程线程结束态。当线程运行结束时将处于这个状态。这个状态的 线程不参与线程的调度。
rt_err_t rt_thread_delete(rt_thread_t thread);
thread = RT_NULL;
线程对象将会被移出线程队列并且从内核对象管理器中删除,线程占用的堆栈空间也会被释放,收回的空间将重新用于其他的内存分配。线程脱离rt_err_t rt_thread_detach (rt_thread_t thread);线程脱离将使线程对象在线程队列和内核对象管理器中被删除。线程启动rt_err_t rt_thread_startup(rt_thread_t thread);创建(初始化)的线程对象的状态处于初始态,并未进入就绪线程的调度队列,我们可以调用该函数启动一个线程当前线程rt_thread_t rt_thread_self(void);一个公用函数可能会被多个线程执行,在执行的时候可以通过该函数接口获得当前执行的线程句柄。线程让出处理器rt_err_t rt_thread_yield(void);当前线程的时间片用完或者该线程自动要求让出处理器资源时,它不再占有处理器,调度器会选择相同优先级的下一个线程执行。线程睡眠rt_err_t rt_thread_sleep(rt_tick_t tick); rt_err_t rt_thread_delay(rt_tick_t tick);让运行的当前线程延迟一段时间,在指定的时间到达后重 新运行,这就叫做“线程睡眠”线程挂起rt_err_t rt_thread_suspend (rt_thread_t thread);当线程调用rt_thread_delay,调用线程将主动挂起,当调用rt_sem_take,rt_mb_recv等函数时,资源不可使用也将导致调用线程挂起。线程恢复rt_err_t rt_thread_resume (rt_thread_t thread);线程恢复就是让挂起的线程重新进入就绪状态线程控制rt_err_t rt_thread_control(rt_thread_t thread, rt_uint8_t cmd, void* arg);当需要对线程进行一些其他控制时,例如动态更改线程的优先级,可以调用该函数线程延时rt_err_t rt_thread_delay(rt_tick_t tick)单位为tick线程延时rt_err_t rt_thread_mdelay(rt_int32_t ms)单位为ms