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

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

最新文章

  1. vim插件之tabular,代码对齐强迫症必备
  2. 为jQuery写插件
  3. [转] 主流JS框架中DOMReady事件的实现
  4. Android使用Fragment来实现ViewPager的功能(解决切换Fragment状态不保存)以及各个Fragment之间的通信
  5. Redis简介、与memcached比较、存储方式、应用场景、生产经验教训、安全设置、key的建议、安装和常用数据类型介绍、ServiceStack.Redis使用(1)
  6. C++中指针和引用的区别
  7. C++盲点
  8. poj 3249 拓扑排序 and 动态规划
  9. Android蓝牙操作笔记
  10. OpenSSL命令---rand
  11. OSS项目进度(2.19)
  12. SQL 注入~MySQL专题
  13. 【Api】easy-mock在线api
  14. ife 零基础学院 day 2
  15. Centos 6.8 定时任务Crontab服务
  16. J - S-Nim
  17. 2018年省赛蓝桥杯JavaB组
  18. spoj705
  19. 一.JDK版本切换批处理脚本
  20. ANT发送邮件需要的3个JAR包

热门文章

  1. redis HyperLogLog 基数估算
  2. Leetcode 回文数字判断
  3. Vue2学习笔记:键盘事件
  4. 转: c#.net利用RNGCryptoServiceProvider产生任意范围强随机数的办法
  5. 使用FBTweak
  6. 18年11月5日 NOIP模拟赛
  7. JavaScript的DOM操作获取元素实际大小
  8. python3+OpenGL环境配置
  9. BZOJ3786:星系探索(Splay,括号序)
  10. 【洛谷】【扩欧】P1516 青蛙的约会