*/#include<rtthread.h>#define THREAD_PRIORITY 25#define THREAD_STACK_SIZE 512#define THREAD_TIMESLICE 5staticrt_thread_ttid1=RT_NULL;/* 线程1的入口函数 */staticvoidthread1_entry(void*parameter){rt_uint32_tcount=0;while(1){/* 线程1采用低优先级运行,一直打印计数值 */rt_kprintf("thread1 ...
RT-Thread记录(一、RT-Thread 版本、RT-Thread Studio开发环境 及 配合CubeMX开发快速上手) RT-Thread记录(二、RT-Thread内核启动流程 — 启动文件和源码分析 一、RT-Thread线程操作函数 RT-Thread线程操作包含:创建 / 初始化线程、启动线程、运行线程、删除 / 脱离线程。 1.1 动态创建线程 函数比较简单,具体的看...
在我们的rt_thread_create函数中,如果成功返回值是 线程句柄,类型为rt_thread_t,我们前面又讲过rt_thread_t是一个结构体指针,这个结构体是线程控制块结构体,所以在上面示例代码中返回句柄的意思 ,就是返回了一个指针,这个指针指向线程控制块。 (如果指针,指向指针的指针不明白,这是C语言基础知识,可以查看相关资料...
static struct rt_thread led1_thread静态类型为struct rt_thread类型就是线程控制块结构体 static rt_thread_t led2_thread动态类型为rt_thread_t类型是一个指针,如下解释: rt_thread_t这个类型他是经过 typedef 重名命的: 所以回到开始的问题,搞清楚了rt_thread_startup函数的参数是线程控制块结构体指针,再结合...
首先定义一个线程控制块指针(线程句柄),然后调用rt_thread_create()函数创建线程。 此线程的名字为“thread_test”;线程入口函数thread_entry;入口函数的参数为RT_NULL,无入口参数;线程栈的大小为 512 字节;线程优先级为 10;线程时间片为 5。 2. 静态创建线程 ...
RT-Thread 提供的启动定时器函数如下: 函数的参数 timer 为定时器控制块指针(定时器句柄),指向要启动的定时器控制块。 调用启动函数后,定时器的状态更改为激活状态,并按照超时时间顺序插入到 rt_timer_list 队列链表中。 启动定时器后,如果想停止它,可以用下面的函数: ...
这篇重点介绍 RT-thread 提供的线程管理相关的接口函数,以及实战演示。 线程创建 在RT-Thread 中,创建一个线程的方式有两种: 动态创建方式,线程的栈和线程控制块由系统从动态内存堆上分配。 静态创建方式,线程的栈和线程控制块由用户定义分配。 1. 动态创建线程 动态创建线程,用户不需要考虑线程栈和线程控制块空间...
线程挂起可以由多种方法实现:线程调用rt_thread_delay()、rt_thread_suspend()等函数接口可以使得线程主动挂起,放弃CPU使用权,当线程调用rt_sem_take(),rt_mb_recv()等函数时,资源不可使用也会导致调用线程被动挂起。 当线程已经是挂起态的时候无法调用rt_thread_suspend()函数,已经是挂起态的线程调用rt_thread_...
任务阻塞rt_thread_suspend 任务唤醒rt_thread_resume 不过在分析这些函数的时候肯定会衍生跟进到其它调用层次的函数,有些函数我会跟进去分析,有些可能会直接跳过。 任务延时 任务延时通常是任务本身主动放弃CPU运行的一种操作。当任务需要休眠一段指定的时间片再运行的时候这种操作就会出现。在RT-Thread操作系统中利用rt...
RT-Thread常见函数