首页 > 编程语言 > 详细

RT-Thread线程构建

时间:2021-05-04 14:07:37      阅读:21      评论:0      收藏:0      [点我收藏+]

     RT-Thread 操作系统的启动过程如下

                      技术分享图片

 

 

     main()函数作为其中的一个线程在运行。

     如果想新建一个线程,和main()线程并行运行,步骤如下:    

  第一步:线程初始化函数申明 static void LED1_thread_init(void);

  第二步:定义线程堆栈大小static  rt_uint8_t  RT_LED1_STACK[2048];

  第三步:定义线程结构体变量 struct  rt_thread  LED1;

  第四步:定义线程入口函数

    void thread_entry_LED1(void * parameter)

      {

           MX_GPIO_Init();  //必不可少

           while(1)

                  {

                           HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET); //PA0=0,LED ON

                           rt_thread_mdelay(300);

                           HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET); //PA0=1,LED OFF

                           rt_thread_mdelay(300);

                           rt_kprintf("thread %d is running ,thread %d count = %d\n", 2 , 5 , 34);

                   }

       }

      第五步:初始化线程并启动线程,类似于初始化函数和启动函数,见图

            技术分享图片

 

           ①和第三步所构建的线程结构体名称相同

           ②和入口函数名称相同

           ③④堆栈数组名

           ⑤优先级

           ⑥时间片,如果时间片到了就重置时间片,调用rt_thread_yield()让出CPU

           ⑦启动线程

           ⑧指示性语句,可有可无

     第六步:只有执行LED1_thread_init()才会启动此线程;可在main()函数中如图2-12-8所示启动静态线程。

技术分享图片

 

           实验现象:主线程main()和LED1线程各自不受干扰的闪烁;串口发送不同的内容到计算机,表明main线程和LED1线程全部工作。

       rt_thread_mdelay(300);是延时300ms的函数,但是这个函数并不独子占用CPU,即这个函数会被分割成很多的时间片去分别执行,而不是一直连续执行到结束。

      通过类似的方法可以添加更多的线程。

RT-Thread线程构建

原文:https://www.cnblogs.com/wuyu6630/p/14728984.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!