RT-Thread 组件学习

news2024/11/24 9:57:12

FinSH控制台

在计算机发展的早期,图形系统出现之前,没有鼠标,甚至没有键盘。那时候人们如何与计算机交互呢?最早期的计算机使用打孔的纸条向计算机输入命令,编写程序。

后来随着计算机的不断发展,显示器、键盘成为计算机的标准配置,但此时的操作系统还不支持图形界面,计算机先驱们开发了一种软件,**它接受用户输入的命令,解释之后,传递给操作系统,并将操作系统执行的结果返回给用户。**这个程序像一层外壳包裹在操作系统的外面,所以它被称为shell。

嵌入式设备通常需要将开发板与PC机连接起来通讯,常见连接方式包括:串口、USB、以太网、WiFi等。一个灵活的shell也应该支持在多种连接方式上工作。
有了shell,就像在开发者和计算机之间架起了一座沟通的桥梁,开发者能很方便的获取系统的运行情况,并通过命令控制系统的运行。特别是在调试阶段,有了shell,开发者除了能更快的定位到问题之外,也能利用shell调用测试函数,改变测试函数的参数,减少代码的烧录次数,缩减项目的开发时间。

FinSH是RT-Thread的命令行组件(shell)。

FinSH简介

FinSH是RT-Thread的命令行组件,提供一套供用户在命令行调用的操作接口,主要用于调试或查看系统信息。它可以使用串口/以太网/USB等与PC机进行通信。
在这里插入图片描述
用户在控制终端输入命令,控制终端通过串口、USB、网络等方式将命令传给设备里的FinSH,FinSH会读取设备输入命令,解析并自动扫描内部函数表,寻找对应函数名,执行函数后输出回应,回应通过原路返回,将结果显示在控制终端上。

当使用串口连接设备与控制终端时,FinSH命令的执行流程,如图所示:
在这里插入图片描述

ulog简介

日志的定义:日志是将软件运行的状态,过程等信息,输出到不同的介质中(例如:文件、控制台、显示屏等),并进行显示和保存。软件调试、维护过程中的问题追溯、性能分析、系统监控、故障预警等功能,提供参考依据。
可以说,日志的使用,几乎占用软件生命周期的80%。

日志的重要性:对于操作系统而言,由于其软件的复杂度非常大,单步调试在一些场景下并不适合,所以日志组件在操作系统上几乎都是标配。完善的日志系统也能让操作系统的调试事半功倍。

ulog的起源:RT-Thread一直缺少小巧、实用的日志组件,而ulog的诞生补全了这块的短板。它将作为RT-Thread的基础组件被开源出来,让开发者也能用上简洁易用的日志系统,提高开发效率。

ulog是一个非常简洁、易用的C/C++日志组件,第一个字母u代表微型,它能做到最低ROM<1K,RAM<0.2K的资源占用。
ulog不仅有小巧体积,同样也有非常全面的功能,其设计理念参考的另外一款C/C++开源日志库:EasyLogger(简称elog),并在功能和性能等方面做了非常多的改进。主要特性如下:

  • 日志输出的后端多样化,可支持例如:串口、网络、文件,闪存等后端形式。
  • 日志输出被设计为线程安全的方式,并支持异步输出模式。
  • 日志系统高可靠,在中断 ISR 、Hardfault 等复杂环境下依旧可用。
  • 日志支持运行期 / 编译期设置输出级别。
  • 日志内容支持按关键词及标签方式进行全局过滤。
  • API 和日志格式可兼容 linux syslog。
  • 支持以 hex 格式 dump 调试数据到日志中。
  • 兼容 rtdbg (RTT 早期的日志头文件)及 EasyLogger 的日志输出 API。

电源管理

嵌入式系统低功耗管理的目的在于满足用户对性能需求的前提下,尽可能降低系统能耗以延长设备待机时间

高性能与有限的电池能量在嵌入式系统中矛盾最为突出,硬件低功耗设计与软件低功耗管理的联合应用称为解决矛盾的有效手段。

现在的各种MCU都或多或少的在低功耗方面提供了管理接口。比如对主控时钟频率的调整、工作电压的改变、总线频率的调整甚至关闭、外围工作时钟的关闭等。

有了硬件上的支持,合理的软件设计就成为节能的关键,一般可以把低功耗管理分为三个类别:

  • 处理器电源管理主要实现方式:对CPU频率的动态管理,以及系统空闲时对工作模式的调整。
  • 设备电源管理:关闭个别闲置设备。
  • 系统平台电源管理:针对特定系统平台的非常见设备具体定制。

随着物联网(IoT)的兴起,产品对功耗的需求越来越强烈。
作为数据采集的传感器节点通常需要在电池供电时长期工作,而作为联网的SOC也需要有快速的响应功能和较低的功能。

在产品开发的起始阶段,首先考虑是尽快完成产品的功能开发。
在产品功能逐步完善之后,就需要加入电源管理功能。为了适应IoT的这种需求,提供电源管理组件。

PM组件介绍

对PM组件采用分层设计思想,分离架构和芯片相关的部分,提取公共部分作为核心。
在对上层提供通用的接口同时,也让底层驱动对组件的适配变得更加简单。

在这里插入图片描述

  • 基于模式来管理功耗,空闲时动态调整工作模式,支持多个等级的休眠。
  • 对应用透明,组件在底层自动完成电源管理。
  • 支持运行模式下动态变频,根据模式自动更新设备的频率配置,确保在不同的运行模式都可以正常工作。
  • 支持设备电源管理,根据模式自动管理设备的挂起和恢复,确保在不同的休眠模式下可以正确的挂起和恢复。
  • 支持可选的休眠时间补充,让依赖OS Tick的应用可以透明使用。
  • 向上层提供设备接口,如果打开了 devfs 组件,那么也可以通过文件系统接口访问。

工作原理

低功耗的本质是在系统空闲时CPU停止工作,中断或事件唤醒后继续工作。
在RTOS中,通常包含一个IDLE 任务,该任务的优先级最低且一直保持就绪状态,当高优先级任务未就绪时,OS 执行 IDLE 任务。

一般地,未进行低功耗处理时,CPU在IDLE任务中循环执行空指令。
RT-Thread的电源管理组件在IDLE任务中,通过对CPU、时钟和设备等进行管理,从而有效降低系统的功耗。

在这里插入图片描述
在上图所示,当高优先级任务运行结束或被挂起时,系统将进入 IDLE 任务中。

在IDLE任务执行后,它将判断系统是否可以进入到休眠状态(以节省功耗)。如果可以进入休眠,将根据芯片情况关闭部分硬件模块,OS Tick也非常有可能进入暂停状态。此时电源管理框架会根据系统定时器情况,计算出下一个超时时间点,并设置低功耗定时器,让设备能够在这个时刻点唤醒,并进行后续的工作。
当系统被唤醒后,系统也需要知道睡眠长度是多少,并对OS Tick进行补充,让系统的OS TICK值调整为一个正确的值。

设计架构

在RT-Thread PM组件中,外设或应用通过投票机制对所需的功耗模式进行投票,当系统空闲时,根据投票测量决策出合适的功耗模式,调用抽象接口,控制芯片会进入低功耗状态,从而降低系统功耗。

当未进行任何投票时,会以默认模式进入(通常为空闲模式)。
与应用不同,某些外设可能在进入低功耗状态时执行特定操作,退出低功耗时采取措施恢复,此时可以通过注册PM设备来实现。
通过注册PM设备,在进入低功耗状态之前,会触发注册设备的suspend回调,开发者可在回调里执行自己的操作;类似地,从低功耗状态退出时,也会触发resume回调。
在这里插入图片描述

低功耗状态和模式

RM组件将系统划分为两种状态:运行状态(RUN)和休眠状态(Sleep)。
运行状态控制CPU的频率,适用于变频场景;休眠状态根据SOC特性实现休眠CPU,以降低功耗。

两种状态分别使用不同的API接口,独立控制。

休眠状态就是低功耗状态,通过关闭外设,执行SOC电源管理接口,降低系统功耗。
休眠状态又分为留个模式,呈现为金字塔的形式。随着模式增加,功耗逐级递减的特点。

运行状态通常用于改变CPU的运行频率,独立于休眠模式。当前运行状态划分了四个等级:高速、正常、中速、低速。

模式的请求和释放

在PM组件里,上层应用可以通过请求和释放休眠模式主动参与功耗管理。应用可以根据场景请求不同的休眠模式,并在处理完毕后释放,只要有任意一个应用或设备请求高等级的功耗模式,就不会切换到比它更低的模式。因此,休眠模式的请求和释放的操作通常成对出现,可用于对某个阶段进行保护,如外设的 DMA 传输过程。

调用流程

在这里插入图片描述
首先应用设置进出休眠状态的回调函数,然后调用rt_pm_request请求休眠模式,触发休眠操作;PM组件在系统空闲时检查休眠模式计数,根据投票数给出推荐的模式;接着 PM 组件调用 notfiy 通知应用,告知即将进入休眠模式;然后对注册的 PM 设备执行挂起操作,返回 OK 后执行 SOC 实现的的休眠模式,系统进入休眠状态(如果使能时间补偿,休眠之前会先启动低功耗定时器)。此时 CPU 停止工作,等待事件或者中断唤醒。当系统被唤醒后,由于全局中断为关闭状态,系统继续从该处执行,获取睡眠时间补偿系统的心跳,依次唤醒设备,通知应用从休眠模式退出。如此一个周期执行完毕,退出,等待系统下次空闲。

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

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

相关文章

echart的tooltip显示不同的单位

效果 实现 在每个series中添加不同的 tooltip: { valueFormatter: function (value) { return value.toFixed(0) ‘A’; } }, 代码如下 var option {// grid: {// left: -13vw,//左边距72px// right: 32%,// bottom: 64%,// top:…

LaMa 论文复现:Resolution-robust Large Mask Inpainting with Fourier Convolutions

代码&#xff1a;GitHub - andy971022/auto-lama 论文&#xff1a;https://arxiv.org/abs/2109.07161 1 LaMa 论文简介 2 LaMa代码复现 2.1 环境部署 2.1.1 下载源码&#xff0c;创建环境&#xff0c;安装必需库 git clone https://github.com/advimman/lama cd lama con…

JAVASSMmysql面向高校校园体育用品租借管理系统94593-计算机毕业设计项目选题推荐(附源码)

摘 要 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;微信小程序的面向高校校园体育用品租借管理系统被用户普遍…

Git->git简介,git的常用命令,git命令的常用理论

git简介git的常用命令git命令的常用理论 1.git简介 Git是什么&#xff1f; Git是一个开源的分布式&#xff0c;用于敏捷高效地处理任何或小或大的项目 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。 Git 与常用的版本控制工具 CVSI…

在任何机器人上实施 ROS 导航堆栈的指南

文章目录 路径规划参考 路径规划 路径规划是导航的最终目标。这允许用户向机器人给出目标姿势&#xff0c;并让它在给定的环境中自主地从当前位置导航到目标位置。这是我们迄今为止所做的一切&#xff08;地图绘制和本地化&#xff09;的汇集点。ROS 导航堆栈已经为我们完成了…

教培管理系统源码 教育培训机构系统源码 教务系统源码

教培管理系统源码 教育培训机构系统源码 教务系统源码 功能介绍&#xff1a; 教务中心: 学员管理 班级管理 课表管理 教师管理 课程/收费 上课记录 家校互动: 课后作业 课后点评 成绩单 成绩档案 通知管理 营销中心&#xff1a; 活动模板 我的活动 销售中心&am…

双十一数码好物推荐,盘点那些错过等一年的好物!

双十一购物狂欢节马上到来&#xff0c;对于热爱数码产品的人来说&#xff0c;双十一无疑是一个绝佳的时机&#xff0c;因为许多知名品牌和零售商都会推出各种令人心动的数码好物促销活动。从佩戴服饰到大件智能装备&#xff0c;再到健康科技产品&#xff0c;市场上的选择多种多…

竞赛 身份证识别系统 - 图像识别 深度学习

文章目录 0 前言1 实现方法1.1 原理1.1.1 字符定位1.1.2 字符识别1.1.3 深度学习算法介绍1.1.4 模型选择 2 算法流程3 部分关键代码 4 效果展示5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 毕业设计 图像识别 深度学习 身份证识别…

四川芸鹰蓬飞商务信息咨询有限公司电商服务引领潮流

在今天的数字时代&#xff0c;抖音带货已成为一种新型的、高效的营销方式。许多公司都在寻找可靠的抖音带货服务&#xff0c;以扩大其品牌影响力并增加销售额。在这方面&#xff0c;四川芸鹰蓬飞商务信息咨询有限公司以其专业的知识和经验&#xff0c;成为行业内的佼佼者。 四…

画家尹星,美术界的扫地僧

尹星 简历&#xff1a; 1944年1月25日出生于山西省阳高县&#xff0c;内蒙古师范学院艺术系美术专业&#xff0c;师从水彩之父李剑晨&#xff0c;北京京华美术学院创立者邱石冥&#xff0c;徐坚。与吴冠中&#xff0c;朱德群&#xff0c;赵无极&#xff0c;杨飞云是同门。擅长…

【EI会议征稿】JPCS独立出版-第五届新材料与清洁能源国际学术会议(ICAMCE 2024)

JPCS独立出版-第五届新材料与清洁能源国际学术会议&#xff08;ICAMCE 2024&#xff09; 2024 5th International Conference on Advanced Material and Clean Energy 第五届新材料与清洁能源国际学术会议&#xff08;ICAMCE 2024&#xff09;将于2024年2月23-25日在中国▪长沙…

采集Prestashop独立站采集Prestashop独立站

import java.net.URL 这一行导入了Java.net包中的URL类&#xff0c;这个类在处理URL链接时非常有用。 import org.jsoup.Jsoup 这一行导入了Jsoup库&#xff0c;它是一个强大的HTML和XML文档解析库&#xff0c;我们可以使用它来解析网页内容。 import org.jsoup.nodes.Docume…

安卓数据恢复工具哪个强? 10 个最佳 Android 数据恢复应用程序

如果您是 Android 用户并且已经使用您的设备一段时间&#xff0c;那么您很可能遇到过与数据相关的问题。这可能是由于软件问题导致文件被意外删除或损坏。许多人不经常备份数据&#xff0c;从而丢失了重要的文档、图像、视频文件等。最糟糕的是&#xff0c;数据丢失可能随时发生…

AI智能雷达名片平台版小程序源码系统 带完整的搭建教程

大家好啊&#xff0c;今天源码小编来给大家分享一款AI智能雷达名片平台版小程序源码系统。人工智能技术的不断发展和普及&#xff0c;越来越多的企业开始应用AI技术来提高业务效率和提升用户体验。AI智能雷达名片平台版小程序源码系统就是利用人工智能技术&#xff0c;帮助企业…

WPS的JS宏基础

一、基础知识 1、简单的第一个宏 //注意function只能全部用小写 function demo(){alert("你好!") }2、录制宏生成工资条 function 使用录制宏自动生成代码以JS宏为例()//使用相对引用 {Selection.Copy(undefined);ActiveCell.Offset(5, 0).Range("A1:M4"…

基于springboot实现福聚苑社区团购平台系统项目【项目源码】

基于springboot实现福聚苑社区团购平台系统演示 Javar技术 Java是一种网络脚本语言&#xff0c;广泛运用于web应用开发&#xff0c;可以用来添加网页的格式动态效果&#xff0c;该语言不用进行预编译就直接运行&#xff0c;可以直接嵌入HTML语言中&#xff0c;写成js语言&…

智慧油气推动能源行业的绿色转型和可持续发展

智慧油气推动能源行业的绿色转型和可持续发展 随着技术的不断进步和创新的推动&#xff0c;智慧油气正成为引领能源行业发展的重要趋势。通过融合物联网、云计算、人工智能等先进技术&#xff0c;智慧油气实现了油气资源的高效管理和利用&#xff0c;为能源行业带来了巨大的变革…

Spring Cloud智慧工地管理平台源码,智慧工地APP源码,实现对劳务人员、施工进度、工地安全、材料设备、环境监测等方面的实时监控和管理

智慧工地管理平台源码&#xff0c;智慧工地APP源码&#xff0c; 智慧工地管理平台实现对人员管理、施工进度、安全管理、材料管理、设备管理、环境监测等方面的实时监控和管理&#xff0c;提高施工效率和质量&#xff0c;降低安全风险和环境污染。智慧工地平台支持项目级、公司…

STM32-EXTI中断

EXTI简介 EXTI&#xff08;Extern Interrupt&#xff09;外部中断 EXTI可以监测指定GPIO口的电平信号&#xff0c;当其指定的GPIO口产生电平变化时&#xff0c;EXTI将立即向NVIC发出中断申请&#xff0c;经过NVIC裁决后即可中断CPU主程序&#xff0c;使CPU执行EXTI对应的中断程…

站在创新视角理解美的集团“全球突破”

全球化&#xff0c;对于企业发展的意义毋庸赘言。 作为一家年营收3000多亿的科技集团&#xff0c;美的集团有超过四成收入来自海外市场。 可以预见的是&#xff0c;未来海外市场的重要性还会不断提升。因为国内家电市场正在从增量周期转入存量周期&#xff0c;市场增长趋稳。…