ThreadX Mutex如何在STM32上工作?

欢迎阅读本文的第二部分,介绍如何使用STM32在ThreadX中使用Mutex(第1部分可用在这里)。这将涵盖代码编辑和调试。

1.代码编辑与调试

使用先前生成的代码,open Core\Src\app_threadx.c–在这里,我们将使用以下命令创建2个线程tx_thread_create(创建线程)和互斥,通过使用tx_分钟x_create
两个线程是相同的,只有printf消息不同。2个线程正在休眠2秒钟,然后将使用tx_分钟x_get要挂起线程直到互斥对象可用,获取互斥对象的线程将打印并使用tx_分钟x_put为了释放互斥,允许其他线程前进,这将在一个无休止的循环中发生。您可以复制并粘贴下面的代码,但请注意USER CODE BEGIN编号/文本,以便正确放置代码片段:

/*用户代码开始包括*/#include“stdio.h”/*用户代码结束包括*/
/*用户代码开始PD*/#define THREAD_STACK_SIZE 512/*用户代码结束PD*/
/*用户代码开始PV*/uint8_t thread_stack1[thread_STACK_SIZE];uint8_t thread_stack2[thread_STACK_SIZE];TX_THREAD螺纹_ptr1;TX_THREAD螺纹_ptr2;TX_MUTEX互斥_0;/*用户代码端PV*/
/*用户代码开始PFP*/无效线程1(ULONG initial_input);无效线程2(ULONG initial_input);/*用户代码端PFP*/
UINT App_ThreadX_Init(VOID*memory_ptr){UINT ret=TX_SUCCESS;TX_BYTE_POOL*BYTE_POOL=(TX_BYTE_POOL*)memory_ptr;/*用户代码BEGIN App_ThreadsX_MEM_POOL*/(VOID)BYTE_pol;/*结束应用程序线程MEM_POOL*/*用户代码开始应用程序线程初始化*/TX_mutex_create(&mute_0,“互斥0”,1);TX_thread_create(&thread_ptr1,“线程1”,线程1,0,线程堆栈1,线程堆栈大小,15,15,1,TX_AUTO_START);tx_thread_create(&thread_ptr2,“Thread2”,Thread2,0,thread_stack2,thread_STACK_SIZE,15,15,1,tx_AUTO_START);/*用户代码END App_ThreadX_Init*/return ret;}
/*用户代码BEGIN 1*/VOID Thread1(ULONG initial_input){/*无限循环*/for(;;){/*睡眠2秒*/tx_thread_Sleep(200);tx_mutex_get(&mute_0,tx_NO_WAIT);printf(“Thread1 print\r\n”);/*释放互斥。*/tx_mutex_put(&mutx_0);}}VOID Thread2(ULANG initial_put){for();{/*Sleep 2秒*/tx_thread_Sleep互斥_0,tx_NO_WAIT);打印(“线程2打印\r\n”);/*释放互斥。*/tx_mutex_put(&mute_0);}}/*用户代码端1*/

打开Core\Src\main.c–您可以复制并粘贴以下代码:

/*用户代码开始0*/void __io_putchar(char ch){//在UART HAL_UART_Transmit上写入字符“ch”的代码(&huart3,(uint8_t*)&ch,1,10);}/*用户代码结束0*/

从这一点开始,按Ctrl+B进行构建,您应该会看到0个错误和0个警告。
将板连接到计算机并进入调试模式,方法是首先单击项目名称,然后菜单“运行/调试为/STM32”:

在“编辑配置”窗口中,单击“调试”:

进入“调试”透视图后,单击“继续”按钮,即可享受使用互斥操作的ThreadX应用程序。您还可以使用窗口/显示视图/ThreadX/ThreadX线程列表,并对ThreadX Mutex再次执行此操作,以增强整体调试选项(一旦应用程序运行一段时间并暂停,线程列表将自动加载):


现在,最后一步是启用STM32CubeIDE中的控制台来查看打印消息。找到“控制台”选项卡,然后单击命令行外壳控制台:

在弹出窗口中,将“连接类型”更改为“串行端口”,然后单击“新建…”添加与STLINK相关的VCOM:

您可以给端口一个名称,这样以后也更容易使用,在这种情况下,它将被标记为NUCLEO_H723ZI:

单击finish,控制台上的消息将指示它现在已连接。通过恢复应用程序(按F8),将显示printf消息。添加断点可以更新Mutex和ThreadX信息:

2.有用的链接:

  • STM32管:https://www.st.com/en/development-tools/stm32cubeide.html
  • 核子-H723ZG:https://www.st.com/en/evaluation-tools/nucleo-h723zg.html
  • ThreadX用户指南https://docs.microsoft.com/en-us/azure/rtos/threadx/about-this-guide
  • ThreadX API描述第4章-Azure RTOS ThreadX服务描述| Microsoft文档
  • Github:https://github.com/STMicroelectronics/x-cube-azrtos-h7

3.结论:

向ThreadX应用程序添加互斥包括:
    • 在STM32CubeMX/STM32CubeIDE中添加ThreadX组件
    • 在STM32CubeMX/STM32CubeIDE中适配ThreadX配置
    • 从STM32CubeMX/STM32CubeIDE生成代码
      1. 这将使用所有需要的文件更新项目结构
    • 使用ThreadX API创建ThreadX组件线程和互斥
    • 玩得高兴