单片机学习小组
直播中

吴湛

9年用户 869经验值
擅长:417804
私信 关注

threadX的启动流程是怎样的

threadX的启动流程是怎样的?如何让线程X跑起来呢?

回帖(1)

马占云

2022-2-28 17:06:28
在掏了几百个大洋后,买了一块Stm32H747-Disco的开发板,听说最近threadX很火,主要这个rtos的安全认证比较齐全,而且全家桶比较完善。双核配threadX,对于开发团队的话,完全可以一个人负责一个核,最后合一下就可以跑起来了,或者一个核跑业务逻辑,一个核跑安全的逻辑,可塑造性更强了。

下面就用板子第一次入门ThreadX了。

开发工具是Stm32CubeIDE,

勾选一下threadX,然后基本不用移植了



对于threadX来说,启动流程也很简单,这边贴一张官方的图



这边tx_kernel_enter()函数调用后,threadX就真正开始运行了,tx_application_define是tx_kernel_enter的回调函数,这个函数主要作用是 我们可以在里面创建任务,信号量,队列这些东东,(ps:这个和freertos还是有点区别的)

这边创建2个任务,使用时间片轮询

  UINT ret = TX_SUCCESS;
  TX_BYTE_POOL *byte_pool = (TX_BYTE_POOL*)memory_ptr;

  /* USER CODE BEGIN App_ThreadX_Init */
  CHAR *pointer;
  /* Allocate the stack for thread 0. */
  tx_byte_allocate(byte_pool, &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);

  /* Create the main thread. */
  tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
          pointer, DEMO_STACK_SIZE,
         1, 1, 1, TX_AUTO_START);
  /* Allocate the stack for thread 1. */
  tx_byte_allocate(byte_pool, &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);

  /* Create threads 1 and 2. These threads pass information through a ThreadX
      message queue. It is also interesting to note that these threads have a time
      slice. */
  tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
            pointer, DEMO_STACK_SIZE,
            1, 1, 1, TX_AUTO_START);
  /* USER CODE END App_ThreadX_Init */

  return ret;
线程函数比较简单,轮流点亮灯,tx_thread_sleep函数的形参是多少个时钟节拍,因为这边的系统时钟配置成了10ms,所以100ms和500ms灯亮灭一次

void thread_0_entry(ULONG thread_input)
{
    /* This thread simply sits in while-forever-sleep loop. */
    while(1)
    {
            HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);
        /* Sleep for 10 ticks. */
        tx_thread_sleep(10);


    }
}

void thread_1_entry(ULONG thread_input)
{
    /* This thread simply sends messages to a queue shared by thread 2. */
    while(1)
    {
            HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);
             /* Sleep for 10 ticks. */
             tx_thread_sleep(50);

    }
}
另外的话,stm32CubeIDE已经做的比较好,调出thread list就可以看到栈的使用情况


灯成功按我们逻辑亮灭,这里说明基本threadX已经跑起来啦
举报

更多回帖

发帖
×
20
完善资料,
赚取积分