c/c++语言开发共享如何使用cubemx 配置freertos,实时查看FreeRTOS任务列表和运行状态

如何使用cubemx 配置freertos,实时查看FreeRTOS任务列表和运行状态 …

—————————————————————————————————————————

cubemx版本:version_4.20

stm32型号:stm32f103rct6

—————————————————————————————————————————

关键点:

  在freertosconfig.h文件中使能如下宏:
(1)*       #define configuse_trace_facility                    1
(2)*       #define configgenerate_run_time_stats               1
(3)*       #define configuse_stats_formatting_functions        1
(4)*       #define portconfigure_timer_for_run_time_stats()    (ulhighfrequencytimerticks = 0ul)
(5)*       #define portget_run_time_counter_value()            ulhighfrequencytimerticks
(6) 然后开启一个定时器5,作为计算任务信息的时钟。

————————————————————————————————————————–

关键点中:

这五个宏定义,第一个是自动生成的,第二个在cube里勾选某个选项后也是自动生成的。
第三个是自己手动添加的。
第四个和第五个,配置generate_run_time_stats后会自动生成。生成的是这样的:

#define portconfigure_timer_for_run_time_stats configuretimerforruntimestats
#define portget_run_time_counter_value getruntimecountervalue
而后边的其实是对应着各自的__weak前饰的函数。在函数体里加入了对应的语句:

__weak void configuretimerforruntimestats(void) {         ulhighfrequencytimerticks = 0ul; } __weak unsigned long getruntimecountervalue(void) {         return ulhighfrequencytimerticks; //        return 0; }

 

除此之外,又用tim5作为基本定时器,定时值位10us,开启定时器5,在其回调函数里:

void tim5_irqhandler(void) {   /* user code begin tim5_irqn 0 */    /* user code end tim5_irqn 0 */   hal_tim_irqhandler(&htim5);   /* user code begin tim5_irqn 1 */     ulhighfrequencytimerticks++;    /* user code end tim5_irqn 1 */ }

 ———————————————————————————————————————

 执行效果如下:

如何使用cubemx 配置freertos,实时查看FreeRTOS任务列表和运行状态

 

———————————————————————————————————————

需要注意的地方:

(1)cubemx 4.20这个版本的有个bug:

stm32cubemx生成的main文件里面的void systemclock_config(void)函数里面的这部分代码

rcc_oscinitstruct.oscillatortype = rcc_oscillatortype_hse; 

出现了这个bug,会生成下面这样的代码,,会导致程序执行不下去。

rcc_oscinitstruct.oscillatortype = rcc_oscillatortype_hsi|rcc_oscillatortype_hse;

用前者,替代掉后者即可。

(2)另外,执行打印任务列表和运行状态的任务的堆栈需要大于256bype,否者可能会造成程序分配空间失败,

导致程序卡死。

如何使用cubemx 配置freertos,实时查看FreeRTOS任务列表和运行状态

 

(3)记得在主循环里面开启定时器tim5

hal_tim_base_start_it(&htim5);

—————————————————————————————————————————

源码已上传到github:

—————————————————————————————————————————

参考blog:

https://www.ing10bbs.com/forum.php?mod=viewthread&tid=498

 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/605442.html

(0)
上一篇 2021年5月13日
下一篇 2021年5月13日

精彩推荐