/* rt_sem_t 为指向 rt_semaphore 结构体的指针类型 */ typedef struct rt_semaphore *rt_sem_t; struct rt_semaphore从rt_ipc_object派生而来,由IPC容器管理,信号量的最大值为 65535。 结构体struct rt_ipc_object parent定义如下: struct rt_object { char name[RT_NAME_MAX]; /* 内核对象名称 */ r...
FinSH 是 RT-Thread 最早的组件之一,提供了一套类似于 Linux Shell 的操作接口,您可以通过 串口/以太网/USB 等方式与 PC 机进行通信,通过命令行查看系统信息或用于调试。 RT-Thread 默认内置了一些 FinSH 命令,比如 list_thread 和 ps 用于查看线程信息,list_sem 用于查看系统信号量信息,free 用于查看系统内存使...
RT-Thread线程管理的主要功能是对线程进行管理和调度,系统中总共存在两类线程,分别是系统线程和用户线程,系统线程是由RT-Thread内核创建的线程,用户线程是由应用程序创建的线程,这两类线程都会从内核对象容器中分配线程对象,当线程被删除时,也会被从对象容器中删除,每个线程都有重要的属性,如线程控制块、线程栈、入口...
#include <rtthread.h>#define THREAD_PRIORITY 25#define THREAD_TIMESLICE 5/* 指向信号量的指针 */static rt_sem_t dynamic_sem = RT_NULL;/* 线程1 入口函数 */static void rt_thread1_entry(void *parameter){static rt_uint8_t count = 0;while(1){if(count <= 100){count++;}else{return;...
rt_sem_detach(&static_sem);return; } rt_kprintf("take a static semaphore, done.\n");/*detach the semaphore object*/rt_sem_detach(&static_sem);//}/*dynamic thread pointer*///static void thread2_entry(void *parameter)//{//rt_err_t result;//rt_tick_t tick;tick=rt_tick_get();...
信号量控制块是 RT-Thread 用于管理信号量的一个数据结构,信号量控制块的结构体struct rt_semaphore定义如下,rt_sem_t表示信号量的句柄,即指向信号量控制块的指针。 struct rt_semaphore { struct rt_ipc_object parent; /* 继承自 ipc_object 类 */ ...
rt_thread rt_sem_release注意点 RT-Thread零基础快速入门第8讲——软件包的使用 目录 RT-Thread零基础快速入门第8讲——软件包的使用 前言 一、准备一个完整的工程 二、打开配置页面 三、下载软件包 四、编译运行 五、总结 前言 RT-thread有很多实用的软件包,包含网络、IOT、外设、系统等多个方面,对于项目的...
rt_sem_init(&heap_sem,"heap",1,RT_IPC_FLAG_FIFO);/* 初始化释放指针指向堆的开始 */lfree=(struct heap_mem*)heap_ptr;} 传入链接堆区的内存起始地址,以及结束地址。以STM32为例,传入0x20000000--0x20018000,96k字节 上述rt_system_heap_init( 0x20000000,0x20018000),主要做了下图这么一件...
线程状态切换 线程通过调用函数 rt_thread_create/init() 进入到初始状态;初始状态的线程通过调用函数 rt_thread_startup() 进入到就绪状态;就绪状态的线程被调度器调度后进入运行状态,调用rt_thread_suspend()函数切换为挂起状态;当处于运行状态的线程调用 rt_sem_take(),rt_mutex_take(),rt_mb_recv() 等函数...
{ rt_sem_take(&rx_sem, RT_WAITING_FOREVER); recv_sz = rt_device_read(dev_busif, -1, &recvbuf[rcv_off], 128-rcv_off); if (recv_sz > 0) { rt_kprintf("data: %d\n", recv_sz); if (rcv_off == 0) { i = 0; while ((recvbuf[i] != 0x1A) && (i < recv_sz)) i...