学习视频网址如下:
https://www.rt-thread.org/page/video.html
此部分为非视频部分:
系统线程:图
空闲线程、主线程
一个线程要成为可执行对象,就必须由操作系统的内核来为他创造一个线程。
初始化和脱离线程
线程管理 类别分为 (1)系统线程(2)用户线程
工作机制:线程控制块
线程的重要属性,线程栈,状态。
时间管理:时间节拍。定时器管理:(1)硬件定时器HARD_TIMER(2)软件定时器SOFT_TIMER
定时器控制块:rt_timer
定时器管理方式:void rt_system_timer_init(void);
信号量:(semaphore)
互斥量:(mutex)
事件集:(event)
信号量的工作机制:获取信号量
信号量控制块 : 无等待获取信号量
互斥量:拥有互斥量的线程拥有互斥量所有权。
互斥量状态只有两种:开锁或者闭锁。
互斥量控制块:管理方式(1)创建和删除互斥量(2)初始化和脱离互斥量(3)获取互斥量(4)释放互斥量。
线程间通信:邮箱 4个字节。
邮箱控制块
消息队列:线程间的消息交换/使用串口接收不定长数据等。
消息队列对象:消息队列名称、内存缓冲区、消息大小以及队列长度。
msq_queue_head msq_queue_tail
消息队列的管理方式:(1)创建/初始化(2)发送(3)接收(4)删除/脱离
struct rt_messagequeue
{
struct rt_ipc_object parent;
void *msq_pool;
rt_uint16_t msg_size;
rt_uint16_t msg_msgs;
rt_uint16_t entry;
void *msg_queue_head;
void *msg_queue_tail;
void *msg_queue_free;
rt_list_t suspend_sender_thread;
};
typedef struct rt_messagequeue * rt_mg_t;
消息队列使用场合:发送消息:同步消息
信号工作机制
安装信号:
rt_sighandler_t rt_signal_insatll (int signo,rt_sihander_t[],handler);
阻塞信号:
void rt_signal_mask(int signo)
接触信号阻塞:
void rt_signed_unmask(int signo)
RT_THREAD 内存管理
内部存储空间:内存堆管理
外部存储空间:小内存管理算法 slab管理算法
void rt_system_heap_init(void* begin_addr,void*end addr)//堆内存起始地址、堆内存结束地址
memheap 堆内存
rt_err_t rt_memheap_init(struct rt_memheap *memheap,const char *name,void *start_addr,rt_uint32_t size)
内存池(Memory Pool)
内存池控制块:struct rt_mempool rt_mp_t
struct rt_mempool
{
struct rt_object parent;
void *start_address;
rt_size_t size;
rt_size_t block_size;
rt_size_t block_total_count;
rt_size_t suspend_thread;
}
内存块分配机制->参数
内存池控制块
struct rt_mempool
创建/初始化 rt_mp_create/init()
分配内存块:rt_mp_alloc()
释放内存块:rt_mp_free()
删除/脱离: rt_mp_delete/detach()
创建和删除内存池