博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何使用cubemx 配置freertos,实时查看FreeRTOS任务列表和运行状态
阅读量:5039 次
发布时间:2019-06-12

本文共 2552 字,大约阅读时间需要 8 分钟。

---------------------------------------------------------------------------------------------------------------------------

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 */}

 ---------------------------------------------------------------------------------------------------------------------

 执行效果如下:

 

---------------------------------------------------------------------------------------------------------------------

需要注意的地方:

(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,否者可能会造成程序分配空间失败,

导致程序卡死。

 

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

HAL_TIM_Base_Start_IT(&htim5);

---------------------------------------------------------------------------------------------------------------------------

源码已上传到github:

---------------------------------------------------------------------------------------------------------------------------

参考blog:

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

 

转载于:https://www.cnblogs.com/sshbit/p/10304009.html

你可能感兴趣的文章
ACdream 1115 Salmon And Cat (找规律&&打表)
查看>>
MFC中CString.Format的详细用法
查看>>
JSON、JSONP、Ajax的区别
查看>>
AngularJS学习篇(一)
查看>>
【转载】 IP实时传输协议RTP/RTCP详解
查看>>
关于Xshell无法连接centos6.4的问题
查看>>
两个数组的交集II
查看>>
SQL常用语句
查看>>
最新免费视频放送【冒着被开除的风险】
查看>>
http://www.admin10000.com/document/6436.html
查看>>
Linux系统的数据写入机制--延迟写入
查看>>
css3动画——基本准则
查看>>
解决BitmapData.draw()在fms流的跨域问题
查看>>
动手动脑02
查看>>
python+selenium+chromewebdriver或Firefox的环境搭建
查看>>
Javascript居中显示Ajax.net的UpdateProgress
查看>>
习题 2-1 位数 2-2 水仙花数 2-3 韩信点兵 2-4倒三角形 2-6 调和级数 2-7近似计算 2-8 子序列的和...
查看>>
JQuery checkbox 全选实现
查看>>
JS控制彈出窗口
查看>>
Android Log
查看>>