Keil是嵌入式开发中常用的开发工具,Keil集成有CubeMX工具用于STM32 MCU的外设管理,Keil中集成的EventRecorder组件,搭配Keil的图形化界面,能对RTX5 RTOS的事件进行监控。
1、Keil中创建芯片工程
NUCELO-H5E5ZJ开发板的芯片型号为STM32H5E5ZJT6,创建Keil工程时根据芯片型号创建工程。

Keil中提供Run-Time Enviroment管理工具用软件组件的配置,其中集成有CubeMX,并会检查相关的依赖项,添加CubeMX支持,并根据提示解决依赖项。

启动CubeMX配置MCU相关的外设,查看开发的原理图

控制LED的引脚如下
| LED |
MCU IO |
| LD1 |
PA3 |
| LD2 |
PF0 |
| LD3 |
PE5 |
配置LED引脚为GPIO输出

2、添加RTX5和EventRecoder组件
通过RTE工具添加RTX5 RTOS和Event Recorder组件
修改RTX_Config.h中的线程运行的优先级模式为"Privileged Mode"特权模式,否则RTX5无法正常运行

并使能RTX5 RTOS的Event Recorder组件支持

由于RTOS调用需要SVC、PendSV和Systick中断服务,RTX5组件定义这三个中断的实现,CubeMX中关闭三个中断函数的代码生成,避免重定义的错误。


3、创建线程和RTOS运行监控
创建三个不同的线程用于控制LED的翻转,并初始化Event Recorder用于监控RTOS的运行情况。
const osThreadAttr_t ThreadLED1_Attr =
{
.name = "osLED1Thread",
.attr_bits = osThreadDetached,
.priority = osPriorityNormal5,
.stack_size = 1024,
};
const osThreadAttr_t ThreadLED2_Attr =
{
.name = "osLED2Thread",
.attr_bits = osThreadDetached,
.priority = osPriorityNormal4,
.stack_size = 2048,
};
const osThreadAttr_t ThreadLED3_Attr =
{
.name = "osLED3Thread",
.attr_bits = osThreadDetached,
.priority = osPriorityNormal4,
.stack_size = 2048,
};
osThreadId_t ThreadIdTaskLED1 = NULL;
osThreadId_t ThreadIdTaskLED2 = NULL;
osThreadId_t ThreadIdTaskLED3 = NULL;
void AppTaskLED1(void *argument);
void AppTaskLED2(void *argument);
void AppTaskLED3(void *argument);
void AppTaskLED1(void *argument)
{
(void)argument;
HAL_ResumeTick();
while(1)
{
osDelay(500);
HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);
}
}
void AppTaskLED2(void *argument)
{
(void)argument;
while(1)
{
osDelay(1000);
HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);
}
}
void AppTaskLED3(void *argument)
{
(void)argument;
while(1)
{
osDelay(1500);
HAL_GPIO_TogglePin(LED3_GPIO_Port,LED3_Pin);
}
}
int main(void)
{
HAL_SuspendTick();
EventRecorderInitialize(EventRecordAll, 1U);
EventRecorderStart();
osKernelInitialize();
ThreadIdTaskLED1 = osThreadNew(AppTaskLED1, NULL, &ThreadLED1_Attr);
ThreadIdTaskLED2 = osThreadNew(AppTaskLED2, NULL, &ThreadLED2_Attr);
ThreadIdTaskLED3 = osThreadNew(AppTaskLED3, NULL, &ThreadLED3_Attr);
osKernelStart();
}
4、Keil中监控RTOS运行
调试器配置界面中,使能Trace功能

View视图中使能Analysis Windows菜单中的System Analyer和Event Recorder
窗口,调试程序时,查看RTX5对应的事件信息。
