RT_Thread学习笔记

线程的概念:

在裸机系统中,系统的主体就是 main 函数里面顺序执行的无限循环,这个无限循环里面 CPU 按 照顺序完成各种事情。在多线程系统中,我们根据功能的不同,把整个系统分割成一个个独立的 且无法返回的函数,这个函数我们称为线程。

 RT_Thread线程三要素:线程函数、线程控制块、线程堆栈。

线程代码:无限循环结构、顺序执行结构。

void thread_entry(void *paramter)
{
  while(1)
  {
   /*等待事件的发生*/
   /*处理事件*/
   
  } 
} 


void thred_entry(void *paramter)
{
/*事务1处理*/
/*事务n处理*/
}

线程控制块

操作系统用于管理线程的一个数据结构,它会存放线程的一些信息。

struct rt_thread

struct rt_thread *rt_thread_t

rt_thread_create() 创建一个动态线程,使用 rt_thread_init() 初始化一个静态线程,动态线程与静态线程的区别是:动态线程是系统自动从动态内存堆上分配栈空间与线程句柄(初始化 heap 之后才能使用 create 创建动态线程),静态线程是由用户分配栈空间与线程句柄。

线程堆栈:

RT_Thread每个线程都具有独立的栈空间,线程上下文是指线程执行时的环境,线程栈的形式上是一段连续的内存空间,我们可以通过定义一个数组或申请一段动态内存作为线程的栈。

线程的创建:

1、定义线程栈:在裸机系统中,他们统统放在一个叫的地 方,栈是单片机 RAM 里面一段连续的内存空间,栈的大小一般在启动文件或者链接脚本里面指 定,最后由 C 库函数 _main 进行初始化。

     在多线程系统中,每个线程都是独立的,互不干扰的,所以要为每个线程都分配独立的栈 空间,这个栈空间通常是一个预先定义好的全局数组,也可以是动态分配的一段内存空间,但它 们都存在于 RAM 中。每个变量对应n个线程,那么就需要定义 n个线程栈。

ALIGN(RT_ALIGN_SIZE)// 
/* 定义线程栈 */
 rt_uint8_t rt_flag1_thread_stack[512];)
 rt_uint8_t rt_flag2_thread_stack[512]

2、定义线程函数:

/* 线程 1 */
 void flag1_thread_entry( void *p_arg )// (1)
 {
 for( ;; )
 {
 flag1 ==== 1;
 delay( 100 );
 flag1 ==== 0;
 delay( 100 );

 /* 线程切换,这里是手动切换 */
 rt_schedule();
 }
 }

 /* 线程 2 */
 void flag2_thread_entry( void *p_arg )// (2)
 {
 for( ;; )
 {
 flag2 ==== 1;
 delay( 100 );
 flag2 ==== 0;
 delay( 100 );

 /* 线程切换,这里是手动切换 */
 rt_schedule();
34 }

3、线程线控制块

struct rt_thread// 
 {
 void *sp; /* 线程栈指针 */
 void *entry; /* 线程入口地址 */
 void *parameter; /* 线程形参 */
 void *stack_addr; /* 线程起始地址 */
 rt_uint32_t stack_size; /* 线程栈大小,单位为字节 */

 rt_list_t tlist; /* 线程链表节点 */
 };
 typedef struct rt_thread *rt_thread_t;// 
/* 定义线程控制块 */
 struct rt_thread rt_flag1_thread;
 struct rt_thread rt_flag2_thread;

线程的状态:

线程间同步:

1、信号量:

函数:

//创建 
rt_sem_t rt_sem_create(const char *name,
                        rt_uint32_t value,
                        rt_uint8_t flag);

2、互斥量:

(1)函数:

3、事件:

线程间通信:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值