FreeRTOS 其它知识点

news2024/11/17 1:34:43

目录

一、低功耗Tickless模式

1、低功耗Tickless模式的引入

2、Tickless 具体实现

二、空闲任务

1、空闲任务相关知识点

2、钩子函数

3、空闲任务钩子函数

三、使用RTOS的好处


一、低功耗Tickless模式

1、低功耗Tickless模式的引入

        FreeRTOS 的系统时钟是由滴答定时器中断来提供的,系统时钟频率越高,那么滴答定时器中断频率也就越高。中断是可以将MCU从睡眠模式中唤醒,周期性的滴答定时器中断就会导致MCU周期性的进入和退出睡眠模式。因此,如果滴答定时器中断频率太高的话会导致大量的能量和时间消耗在进出睡眠模式中,这样导致的结果就是低功耗模式的作用被大大的削弱。

        为此,FreeRTOS 特地提供了一个解决方法——Tickless 模式,当处理器进入空闲任务周期以后就关闭系统节拍中断(滴答定时器中断),只有当其他中断发生或者其他任务需要处理的时候处理器才会被从低功耗模式中唤醒。

2、Tickless 具体实现

(1)宏 configUSE_TICKLESS_IDLE

        要想使用Tickless模式,首先必须将FreeRTOSConfig.h 中的宏 configUSE_TICKLESS_IDLE 设置为1。

(2)宏 portSUPPRESS_TICKS_AND_SLEEP()

        使能Tickless模式以后当下面两种情况都出现的时候FreeRTOS内核就会调用宏portSUPPRESS_TICKS_AND_SLEEPO来处理低功耗相关的工作:

①空闲任务是唯一可运行的任务,因为其他所有的任务都处于阻塞态或者挂起态。

②系统处于低功耗模式的时间至少大于configEXPECTED_IDLE_TIME_BEFORE_SLEEP个时钟节拍,宏configEXPECTED_IDLE_TIME_BEFORE_SLEEP默认在文件FreeRTOS.h中定 义为2,我们可以在FreeRTOSConfig.h中重新定义,此宏必须大于2!

(3)宏 configPRE_SLEEP_PROCESSING() 和 configPOST_SLEEP_PROCESSING()

        在真正的低功耗设计中不仅仅是将处理器设置到低功耗模式就行了,还需要做一些其他的处理,比如:

①将处理器降低到合适的频率,因为频率越低功耗越小,甚至可以在进入低功耗模式以后关 闭系统时钟。 

②修改时钟源,晶振的功耗肯定比处理器内部的时钟源高,进入低功耗模式以后可以切换到 内部时钟源,比如STM32的内部RC振荡器。

③关闭其他外设时钟,比如IO口的时钟。

④关闭板子上其他功能模块电源,这个需要在产品硬件设计的时候就要处理好,比如可以通 过 MOS 管来控制某个模块电源的开关,在处理器进入低功耗模式之前关闭这些模块的 电源。

        FreeRTOS为我们提供了一个宏来完成这些操作,它就是configPRE_SLEEP_PROCESSING(),这个宏的具体实现内容需要用户去编写

        如果在进入低功耗模式之前我们降低了处理器频率、关闭了某些外设时钟等的话,那在退出低功耗模式以后就需要恢复处理器频率、重新打开外设时钟等,这个操作在宏configPOST_SLEEP-PROCESSING()中完成,同样的这个宏的具体内容也需要用户去编写

(4)宏 configEXPECTED_IDLE_TIME_BEFORE_SLEEP

        处理器工作在低功耗模式的时间太短没有意义,所以我们必须对工作在低功耗模式的时间做个限制,宏configEXPECTED_IDLE_TIME_BEFORE_SLEEP就是用来完成这个功能的。

        默认情况下configEXPECTED_IDLE_TIME_BEFORE_SLEEP为2个时钟节拍,并且最小不能小于2个时钟节拍。如果要修改这个值的话可以在文件FreeRTOSConfi.h中对其重新定义。 此宏会在空闲任务函数prvldleTask()中使用!

二、空闲任务

1、空闲任务相关知识点

(1)当FreeRTOS的调度器启动以后就会自动的创建一个空闲任务,这样就可以确保至少有一任务可以运行。但是这个空闲任务使用最低优先级,如果应用中有其他高优先级任务处于就绪态的话这个空闲任务就不会跟高优先级的任务抢占CPU资源。

(2)空闲任务还有另外一个重要的职责,如果某个任务要调用函数vTaskDelete()删除自身,那么这个任务的任务控制块TCB和任务堆栈等这些由 FreeRTOS 系统自动分配的内存需要在空闲任务中释放掉如果删除的是别的任务那么相应的内存就会被直接释放掉,不需要在空闲任务中释放。

2、钩子函数

(1)FreeRTOS 中有多个钩子函数,钩子函数类似回调函数,当某个功能(函数)执行的时候就会调用钩子函数,至于钩子函数的具体内容那就由用户来编写。

(2)钩子函数是一个可选功能,可以通过宏定义来选择使用哪个钩子函数,可选的钩子函数如下表所示:

        钩子函数的使用方法基本相同,用户使能相应的钩子函数,然后自行根据实际需求编写钩子函数的内容。

3、空闲任务钩子函数

(1)要使用空闲任务钩子函数首先要在FreeRTOSConfig.h中将宏configUSE_IDLE_HOOK改为 1,然后编写空闲任务钩子函数vApplicationIdleHook()。

(2)在每个空闲任务运行周期都会调用空闲任务钩子函数,如果想在空闲任务优先级下处理某个任务有两种选择:

①在空闲任务钩子函数中处理任务。但是绝对不能在空闲任务钩子函数中调用任何可以 阻塞空闲任务的API函数,比如vTaskDelay(),或者其他带有阻塞时间的信号量或 队列操作函数。

②创建一个与空闲任务优先级相同的任务。创建一个任务是最好的解决方法,但是这种 方法会消耗更多的RAM。

(3)在空闲任务钩子函数中将处理器设置为低功耗模式,与FreeRTOS自带的Tickless模式比较:

①在空闲任务钩子函数进入低功耗模式的话每个滴答定时器中断都会将处理器从低功耗模式中唤醒,然后进入再进入低功耗;反复的进入低功耗、退出低功耗太需要时间,而且切换太频繁,系统不稳定。

②相对在空闲任务钩子函数进入低功耗模式, FreeRTOS自带的Tickless模式更加合理有效。

三、使用RTOS的好处

1、把功能按任务划分,减少功能代码之间的耦合性;

2、增加代码的扩展性,方便后期的维护,功能的添加或者删减;

3、增加代码的可读性;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1479590.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

多个 JDK 版本(Java 8、Java 17、Java 21)下载和切换

文章目录 多个 JDK 版本(Java 8、Java 17、Java 21)下载和切换1. 下载 JDK2. 配置环境变量3. JDK 版本切换4. 测试5. 在 IDEA 中切换 JDK注意: 多个 JDK 版本(Java 8、Java 17、Java 21)下载和切换 随着 Spring Boot …

SAP 科目XXXX 不允许未资产负债表科目(AC305,AC306)

SAP 科目XXXX 不允许未资产负债表科目(AC305,AC306) AO90配置如下: 报错消息如下: 问题原因: 按照中国会计制度要求,对于固定资产的转出处置需要通过“固定资产清理”科目来过渡处理&#…

基于JAVA,SpringBoot和Vue二手商城交易系统设计

摘要 本课题旨在开发一个基于Java语言,结合SpringBoot框架和Vue前端技术的二手商城交易系统。这个系统提供一个用户友好的界面,使得用户可以方便地浏览、发布、购买和出售二手商品。通过使用SpringBoot作为后端服务框架,该系统能够快速搭建并…

基于SSM医院电子病历管理系统的设计与实现(源代码+数据库脚本+万字文档+PPT)

系统介绍 医院电子病历管理系统主要是借助计算机,通过对医院电子病历管理系统所需的信息管理,增加用户的选择,同时也方便对广大用户信息的及时查询、修改以及对用户信息的及时了解。医院电子病历管理系统 对用户带来了更多的便利&#xff0c…

nginx设置缓存时间、日志分割、开启多进程、网页压缩、配置防盗链

一、设置缓存时间 当网页数据返回给客户端后,可针对静态网页设置缓存时间,在配置文件内的http段内server段添加location,更改字段expires 1d来实现:避免重复请求,加快访问速度 第一步:修改主配置文件 #修…

Sora如何申请,Sora如何使用(最新详细教程)

引言 OpenAI发布的Sora模型以及有一段时间了~现在在tiktok的sora官网上也时长发布最新的视频。 OpenAI Tiktok的官网 那么普通人如何申请sora和使用sora呢,可以参考以下方式~ 1、虚假的Sora使用渠道2、真实的Sora使用渠道3、什么是OpenAI Red Teaming Network4、…

深度学习 精选笔记(2)自动求导与概率

学习参考: 动手学深度学习2.0Deep-Learning-with-TensorFlow-bookpytorchlightning ①如有冒犯、请联系侵删。 ②已写完的笔记文章会不定时一直修订修改(删、改、增),以达到集多方教程的精华于一文的目的。 ③非常推荐上面(学习参考&#x…

《HelloGitHub》第 95 期

兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。 这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等,涵盖多种编程语言 Python、Java、Go、C/C、Swift...让你在短时间内…

第十一届教育与心理科学国际会议(ICEPS 2024)即将召开!

​ 2024年第十一届教育与心理科学国际会议(ICEPS 2024)将于2024年5月10-12日在泰国普吉岛万豪酒店举行。本次会议由泰国艺术大学主办,并得到日本实践女子大学的支持。ICEPS 2024旨在为来自世界各地教育相关领域的学者和专业人士提供一个齐聚一…

EMO在哪体验?阿里对口型视频生成工具EMO下载地址?阿里巴巴新模型EMO的技术原理

这几天,阿里的对口型视频生成工具EMO火了。根据官方宣传,EMO只需要上传一张图片和一段音频就可以一键生成对口型视频,而且视频中的嘴型还可以与声音匹配。这项技术支持多语言、对话、唱歌以及快速语速的适配,但也可能成为制造虚假视频的利器,因此一些名人可能需要警惕了。…

Springboot解决模块化架构搭建打包错误找不到父工程

Springboot解决模块化架构搭建打包错误找不到父工程 一、情况一找不到父工程依赖1、解决办法 二、情况二子工程相互依赖提示"程序包xxx不存在" 一、情况一找不到父工程依赖 报错信息 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:…

uniapp+vue基于Android的图书馆借阅系统qb4y3-nodejs-php-pyton

uni-app框架:使用Vue.js开发跨平台应用的前端框架,编写一套代码,可编译到Android、小程序等平台。 框架支持:springboot/django/php/Ssm/flask/express均支持 前端开发:vue 语言:pythonjavanode.jsphp均支持 运行软件:idea/eclip…

射影变换的一种解法

1、欧式变换 参考《计算机视觉中的多视图几何》1.4节定义。 欧式变换也叫等距变换,是刚体运动模型,可以表示为: 其中的ε1,更简洁的形式是: 2、相似变换 相似变换是一个等距变换和一个均匀缩放的复合,表…

【学习心得】浏览器开发者工具中出现的VM开头的JS文件是什么?

一、现象描述 在Chrome的开发者工具中,你可能会看到一些以“VM”开头的JavaScript文件(如“VM111.js”)。 二、VM文件到底是什么? “VM”表示的是Virtual Machine(虚拟机),这些文件通常表示由浏…

数据结构之树结构(上)

存储方式 数组存储方式的分析 优点:通过下标方式访问元素,速度快。对于有序数组,还可使用二分查找提高检索速度。 缺点:如果要检索具体某个值,或者插入值(按一定顺序)会整体移动,效…

实时抓取SKU商品属性详细信息API数据接口(淘宝,某音)

item_sku-获取sku详细信息 taobao.item_sku详细信息 API公共参数 请求地址: https://api-gw.onebound.cn/taobao/item_sku 名称类型必须描述keyString是调用key(演示示例)secretString是调用密钥api_nameString是API接口名称(包括在请求地…

千帆杯——对话第一期最强挑战者

千帆杯——对话第一期最强挑战者 ​ 在2月22日晚,百度开展直播,邀请了千帆杯第一期最强挑战者杨之正、百度主任研发架构师董大祥老师、以及Datawhale成员司玉鑫为大家带来直播分享。我听了直播后,感觉受益匪浅,于是选择记录一下直…

基于springboot+vue的新冠病毒密接者跟踪系统(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

【Android】属性动画

在属性动画出现之前,Android 系统提供的动画只有帧动画和 View 动画。View 动画我们都了解,它提供了 AlphaAnimation、RotateAnimation、TranslateAnimation、ScaleAnimation 这4种动画方式,并提供了 AnimationSet 动画集合来混合使用多种动画…

实用指南:SOLIDWORKS数据失真问题的解决之道

在数据处理和模拟计算的过程中,数据失真是一个常见的挑战。数据失真指的是由于计算机或人为操作导致的原始数据与计算结果或实际情况之间的偏差。特别是在使用SOLIDWORKS这类工程设计软件时,数据失真可能由多种因素引起,如软件版本老旧、设置…