RT-Thread线程构建

     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,即这个函数会被分割成很多的时间片去分别执行,而不是一直连续执行到结束。

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

posted @ 2021-05-04 10:12  wuyu123456  阅读(248)  评论(0编辑  收藏  举报