如何使用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 ...
随机推荐
- redis 适用场景、缓存选择、java实现
redis适用场景 查询多,修改少:如国家地区信息.商品分类.数据字典 缓存选择 hibernate二级缓存.mybatis二级缓存.redishibernate二级缓存.mybatis二级缓存默认不 ...
- C#Owin auth20开发 OwinStartup 不会触发的解决办法
在使用owin auth20设置token时候遇到一个问题.项目中已经存在如下初始化配置类 using Microsoft.Owin; using Owin; [assembly: OwinStart ...
- c# 设计模式 之:装饰模式
一.引言 在软件开发中,我们经常想要对一类对象添加不同的功能,例如要给手机添加贴膜,手机挂件,手机外壳等,如果此时利用继承来实现的话,就需要定义无数的类,如StickerPhone(贴膜是手机类).A ...
- [翻译] Icon and Image Sizes
Icon and Image Sizes iOS Human Interface Guidelines Every app needs an app icon and a launch file or ...
- Linux 系统的IP与域名解析文件[局域网的DNS]
系统的IP与域名解析文件[局域网的DNS] 局域网的DNS: 域名和主机名对应的工具,服务器直接通过域名,方便迁移 # 修改配置 vim /etc/hosts 直接添加: 192.138.25.129 ...
- 什么是 .live()
很多开发者都知道jQuery的.live()方法,他们大部分知道这个函数做什么,但是并不知道是怎么实现的,所以用的并不那么舒适.而且他们却从未听过还有解除绑定的.live()事件的.die()方法.即 ...
- 在远程登陆的主机上通过命令行源码编译安装 GNU M4、autoconf、automake 等程序
由于实验需要,最近获得了一个实验室服务器的账号,平常主要通过 ssh 进行远程登陆进行实验.一方面,远程登录的机器只提供终端界面,一般只通过命令行进行任务操作:另一方面,由于是多人共享服务器,故而个人 ...
- AbstractApplicationContext 笔记
一.这个类的属性 public abstract class AbstractApplicationContext extends DefaultResourceLoader implements C ...
- python第十四课--排序及自定义函数
1.排序 特点: 1).升序:从小到大 2).降序:从大到小 课堂实现选择排序:参看老郭选择排序.py文件 2.函数:(方法/method) 自定义函数: 概念:它表示一段作用范围(作用域),当中封装 ...
- Asp.net MVC 控制器扩展方法实现jsonp
项目需要,在使用KendoUI,又涉及到jsonp数据格式的处理,网上看到这样一种实现方法,在此小记一下(其实是因为公司里只能上博客园等少数网站,怕自己忘了,好查看一下,哈哈哈) 1. 新建控制器扩展 ...