需求
如何使用 stm32cubeide 运行 threadx?
解决
启用 threadx core
- 打开项目 ioc 文件,
Middleware and software Packs
->THREADX
->Mode
勾选core
- 下方的 configuration 中,
TX_TIMER_TICKS_PER_SECOND
设置为 1000. Memory Configuration
中的ThreadX memory pool size
也设置大一点,这个是默认生成的字节池的大小。- 左侧
System Core
中的SYS
, 修改Timebase Source
为TIM7
. 这个一定要修改,因为HAL
的基准是systick
,threadx
的基准也是systick
, 如果不修改,会导致不自动生成systick
的handler
函数,导致进入hard fault
. 至于到底修改为哪个 tim, 这个就随便了。 - 保存自动生成代码。
使用 threadx
- 新建文件,创建
UINT ThreadInit(TX_BYTE_POOL * byte_pool)
这样的函数,然后在app.threadx.c
中的App_ThreadX_Init
中调用这个ThreadInit
即可。 ThreadInit
用于分配线程堆栈,创建线程等工作。需要注意的是app_azure_rtos.c
中的tx_application_define
中因为USE_STATIC_ALLOCATION
的原因,已经申请了tx_app_byte_pool
, 所以传递到ThreadInit
中的参数其实是byte_pool
的地址,所以不需要在ThreadInit
中再申请字节池,直接使用传递进来的参数即可。注意不要用错,否则也会进hard fault
.- 参考微软的再线教程,创建好线程,就可以运行看效果了。
启用 performance info
- ioc 文件中,
Mode
中勾选PerformanceInfo
Configuration
中根据需要勾选,一般也就是BYTE_POOL
,QUEUE
,THREAD
这样的勾选上即可。- 代码中使用类似
tx_queue_info_get
这样的函数来获取信息 - 根据自己的项目,使用合适的打印函数把信息打印出来。
启用 trace
- ioc 文件中,
Mode
中勾选TraceX Support
Configuration
中勾选TX_ENABLE_EVENT_TRACE
即可,其他的默认。- 添加
UCHAR trace_buffer[TRACE_BUFFER_SIZE];
这样的数组,用来保存 trace 数据。添加宏定义#define TRACE_BUFFER_SIZE 64000
,#define TRACE_REGISTER_OBJECT_NUM 30
- 添加
VOID TraceFullCallback(VOID * param)
这样的回调函数,里面调用tx_trace_disable();
, 数组填满之后,就会自动停止 trace 了。 - 在
app_azure_rtos.c
中申请字节池成功后,添加tx_trace_enable(trace_buffer, TRACE_BUFFER_SIZE, TRACE_REGISTER_OBJECT_NUM);
,tx_trace_buffer_full_notify(TraceFullCallback);
来启用 trace 和添加对应的回调函数。 - 编译并进入调试模式,查看
trace_buffer
对应的内存地址,然后在memory
选项卡中,添加这个地址。 - 继续运行一段时间后,暂停,然后
memory
选项卡的右上位置,有export
按钮,点击后,选择RAW binary
模式,开始地址就是trace_buffer
的地址,长度就是TRACE_BUFFER_SIZE
对应的长度。导出文件名注意后缀是.trx
, 然后即可导出。 - 安装并打开
TraceX
软件,导入刚才生成的 trx 文件,即可看到具体系统运行过程信息。
参考
- How to create a Thread using AzureRTOS and STM32CubeIDE?
- Azure RTOS ThreadX 在线学习
- Azure RTOS ThreadX 文档
- azure-rtos-learn-samples
- ThreadX(四)——TraceX使用
- {ThreadX全家桶} 研究了一下TraceX的使用方法
- 【学以致用,授人以渔】2023视频教程汇总,DSP第12期,ThreadX第9期,BSP驱动第28期,USB实战第5期,GUI实战第3期(2023-11-01)
- {ThreadX全家桶} ThreadX全家桶源码和文档下载,含GUIX,Filex,NetX,USBX,GUIX Studio,TraceX等,全部升级至V6.3.0(2023-11-01)