线程控制块 PCB,记录线程的数据。 struct rt_thread { /* rt 对象 */ char name[RT_NAME_MAX]; /* 线程名字 */ rt_uint8_t type; /* 对象类型 */ rt_uint8_t flags; /* 标注位 */ rt
中断管理 为了把操作系统和系统底层的异常、中断硬件隔离开来,RT-Thread 把中断和异常封装为一组抽象接口,如下图所示: rt_interrupt_enter() 和 rt_interrupt_leave():用于在中断服务程序进入和离开时通知内核中断上下文的切换。 <
数据传递 邮箱 特性: 每封邮件固定为 4 字节, 可以直接传输 32 位无符号数 恰好能容纳一个指针,可传递指向缓冲区的地址。但是不能显式的指定数据的长度,在使用的时候一定要注意越界的问题。 多个线程可等待同一个邮箱。
时钟节拍 时钟节拍在 rtconfig.h 中设置 /* *频率是 1000HZ 周期是 1/1000 s *所以节拍是 1ms */ #define RT_TICK_PER_SECOND 1000 给 RT-Thread 提供时钟节拍: void SysTick_Handler(void) {
软件定时器,单位为时钟节拍,定时数值必须是 OS Tick 的整数倍。 定时器控制块: struct rt_timer { struct rt_object parent; rt_list_t row[RT_TIMER_SKIP_LIST_LEVEL]; /* 定时器链表节点 */
内存堆初始化 使用堆内存,必须先初始化堆。 void rt_system_heap_init(void* begin_addr, void* end_addr); begin_addr:堆内存区域起始地址 end_addr:堆内存区域结束地址 使用 memheap 堆内存: rt_err_t rt_