如何使用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 */
}
---------------------------------------------------------------------------------------------------------------------
执行效果如下:

---------------------------------------------------------------------------------------------------------------------
需要注意的地方:
(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
如何使用cubemx 配置freertos,实时查看FreeRTOS任务列表和运行状态的更多相关文章
- 怎么实时查看mysql当前连接数
如何实时查看mysql当前连接数? 如何实时查看mysql当前连接数? .查看当前所有连接的详细资料: ./mysqladmin -uadmin -p -h10. processlist .只查看当前 ...
- [原]使用MessageAnalyzer实时查看远端日志
1. 下载安装Message Analyzer 从Message Analyzer下载链接下载,安装过程从略. 说明:关于Message Analyzer的视频教程,可以在打开后的主界面上看到. 2. ...
- Linux 下实时查看日志
Linux 下实时查看日志 cat /var/log/*.log 如果日志在更新,如何实时查看 tail -f /var/log/messages 还可以使用 watch -d -n 1 cat /v ...
- 通过Xshell登录远程服务器实时查看log日志
主要想总结以下几点: 1.如何使用生成密钥的方式来登录Xshell连接远端服务器 2.在远程服务器上如何上传和下载文件(下载log文件到本地) 3.如何实时查看log,提取错误信息 一. 使用生成密 ...
- Linux 实时查看tomcat 日志--less命令
查看tomcat日志通常用 tail -n 或者 tail -f 或者grep 或者 vi cat等命令去查看异常信息,但是日志是在不停地刷屏,tail是动态的在变的,我们往往期望从日志最后一行往前 ...
- 如何实时查看Linux下日志
以下以Tomcat为例子,其他WEB服务器目录自己灵活修改即可: 1.先切换到:cd usr/local/tomcat5/logs2.tail -f catalina.out3.这样运行时就可以实时查 ...
- LogStation 支持浏览器实时查看日志
我们在logback 分布式日志汇总中已经将日志输出到了all.logs,LogStation支持浏览器实时查看日志,适合研发和运维彼此独立的场景:研发没有服务器权限,却想看日志实时输出.再配合ngi ...
- Linux实时查看日志,访问前10IP 和相关命令
Nginx日志分析可以获得很多有用的信息,现在来试试最基本的,获取最多访问的前10个IP地址及访问次数. 既然是统计,那么awk是必不可少的,好用而高效. 命令如下: awk '{a[$1] += 1 ...
- 实时查看mysql当前连接数
如何实时查看mysql当前连接数? 1.查看当前所有连接的详细资料:./mysqladmin -uadmin -p -h10.140.1.1 processlist 2.只查看当前连接数(Thread ...
随机推荐
- Ubuntu 安装ipython
操作步骤安装ipythonsudo apt-get install ipython 安装ipython[notebook]终端输入以下命令: sudo apt-get install ipython- ...
- 【眼见为实】自己动手实践理解数据库READ UNCOMMITED && SERIALIZABLE
目录 准备工作 ①准备测试表和测试数据 ②关闭数据库事务自动提交 ③设置InnoDB存储引擎隔离级别 [READ UNCOMMITTED] [READ UNCOMMITTED]能解决的问题 [READ ...
- viedo formats vs file formats
web的视频世界,有两个概念非常容易搞混淆,即:视频文件的格式,比如.mp4,.flv,.ogv等等,以及视频本身的格式,就是指的codec算法名称,比如h.264,mpeg-4等. http://w ...
- js拼接字符串,字符串转数组
想要把字符串按一定的规则拼起来如 1,2,3 var a = []; a.push(1); a.push(2); a.push(3); a.join(','); =>> 1,2,3 想要把 ...
- MsSQL使用加密连接SSL/TLS
说明 应用程序通过未加密的通道与数据库服务器通信, 这可能会造成重大的安全风险.在这种情况下, 攻击者可以修改用户输入的数据, 甚至对数据库服务器执行任意 SQL 命令. 例如,当您使用以下连接字符串 ...
- MySQL字符存储:charset-unicode-sets
https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-sets.html 10.10.1 Unicode Character Sets MyS ...
- ps命令之排序
Linux中ps命令会自动选择一列进行排序,但有时这不是我们想要的. 方法一: ps+sort sort 选项与参数: -f :忽略大小写的差异,例如 A 与 a 视为编码相同:-b :忽略最前面 ...
- 设置UINavigationController标题的属性
设置UINavigationController标题的属性 self.title = @"产品详情"; [self.navigationController.navigationB ...
- 多线程应用-类(thread)
在对class thread加锁时,锁无法正常应用,函数方式没问题. 在使用class thread方法时,并发后的查询结果不对,函数方式没问题. # -*- coding: UTF-8 -*- fr ...
- 最小生成数 克鲁斯卡尔 普里姆 matlab
克鲁斯卡尔: function T=MST_Kruskal(G) n=0; if isfield(G,'w') && ~isempty(G.w) && size(G.w ...