FreeRTOS(三)——资源管理
概述
多任务系统中存在一种潜在的风险,当一个任务在使用某个资源的过程中,即还没有完全结束对资源的访问时,便被切出运行态,使得资源处于非一致,不完整的状态,如果这个时候有另一个任务或者中断来访问这个资源,则会导致数据损坏或者其他相似的错误。
会发生该问题的情景:
- 对外设的操作
- 读-改-写操作
- 变量的非原子访问
- 函数重入
一个函数只访问自己栈空间上的数据或者是内核寄存器中的数据,不访问其他任何数据,比如全局变量啥的,则这个函数就是重入的。否则不可重入。
互斥
互斥保证资源在被访问后具有排他性,防止资源被意外修改
最高的互斥方法
尽量不要共享资源,或者是每个资源都通过单任务访问。
互斥的方法
临界区与挂起调度器
- 基本临界区
临界区指在访问资源前,关闭全部中断,在访问资源后,再恢复中断,是一种非常原始的方法。
临界区必须只具有很短的时间,否则会反过来影响中断响应时间
- 挂起(锁定)调度器
挂起调度器,保证代码区不会被其他任务或中断打断。
互斥量
互斥量是一种特殊的二值信号量,用于控制在两个或多个任务间访问共享数据。
互斥量的机制:
一个任务想要合法地访问资源,必须先成功的得到该资源对应的令牌,当完成对资源的使用后,必须马上归还令牌。只有归还了令牌,其他任务才可能访问共享资源。
互斥量和二值信号量的区别:
- 用于互斥的信号量必须归还
- 用于同步的信号量通常是完成同步后便丢弃,不再归还
优先级反转
互斥量容易导致一个问题是优先级反转,优先级反转会导致重大问题
即高优先级任务因为无法获取互斥信号,而阻塞,导致低优先级优先运行。
更严重的一种情形:
低优先级先运行,获得互斥量,高优先级无法获得互斥量而阻塞,这时候,一个中等优先级任务开始运行,抢占了低优先级,然后低优先级任务block了,无法give互斥量,从而高优先级也无法运行。
优先级继承
最小化减少优先级反转的负面影响,但不能完全消除。
通过暂时的将互斥量持有者的优先级提升至所有等待此互斥量的任务所具有的最高优先级,互斥量持有者归还互斥量后,优先级会自动设置为其原来的优先级。
死锁
两个资源都等待被对方持有时,两个任务都无法再继续执行,这种情况成为死锁。
守护程序
守护程序提供一种干净利落的方法来实现互斥功能,而不用担心会发生优先级反转和死锁。
守护任务是对某个资源具有唯一所有权的任务,只有守护任务才可以直接访问其守护的资源,其他任务要访问该资源只能简介的通过守护任务提供的服务。
守护程序的实现机制:
利用队列,当其他任务想使用某个资源的时候,通过队列发送消息给守护程序,由守护程序对资源进行操作。
FreeRTOS(三)——资源管理相关推荐
- STM32 FreeRTOS (三) 软件定时器
简介: 基本概念 ReeRTOS中加入了软件定时器这个功能组件,是一个可选的.不属于freeRTOS内核的功能,由定时器服务(其实就是一个定时器任务)来提供. 软件定时器是当设定一个定时时间,当达到设 ...
- Effect C++ 学习笔记三:资源管理
资源:内存,文件描述器,互斥锁,图形界面的字体和笔刷,数据库链接,socket等. 十三:Use objects to manage resources. 以对象管理资源 class Investme ...
- 在avr单片机(atmega16)上移植freertos
结果 一.基础铺垫 二.移植freertos 三.重定向printf到uart0 四.makefile的编写 atmega16单片机配置: 内存:1KB flash:16KB 结果:移植后flash只 ...
- 初识FreeRTos
初识FreeRTos Preface 一.FreeRTos简介 二. 为什么选择FreeRTos 三.FreeRTos资料和源码的下载 四.介绍我自己的开发环境 4.1FreeRTos 4.2Alie ...
- stm32的FreeRTOS移植
目录 FreeRTOS移植到STM32F103步骤与注意事项 前言: 一.从官网下载最新版的FreeRTOS源码 二.IAR下移植FreeRTOS 三.MDK下移植FreeRTOS 总结: STM32 ...
- 小熊派 FreeRTOS+SPI+DMA 驱动 TFT-LCD
文章目录 小熊派 FreeRTOS+SPI+DMA 驱动 TFT-LCD 一.文章前言 二.SPI+DMA 配置 三.FreeRTOS 配置 四.代码编写 五.实验现象 小熊派 FreeRTOS+SP ...
- 计算机应用基础教程上机指导及题库,计算机应用基础教程实验指导及习题集
第一部分 上 机 操 作 上机操作准备 说明 第一篇 计算机基本操作 实验一 键盘和指法练习 实验二 汉字输入练习 第二篇 WINDOWS 2000 PROFESSIONAL 实验一 图标 ...
- 《Effective C++:55个提升性能的办法》阅读笔记
一 然自己习惯C++ 1 视C++为一个语言联邦 C++语言本身的出身和目标和其名称表达的意思相近,作为C语言的超集.C++的最初的目标是在保证对C的完全兼容的前提下扩充面向对象的能力,提升研发效 ...
- 2011年度-平滑过渡
一. 任务管理 自2011年5月18日接受CID代理经理的任命至今已有半年时间.在这半年时间里,一方面,我做好了日常工作的交接工作,并尽快适应了新的工作岗位:同时根据部门领导的要求,继续做好原来手头的 ...
最新文章
- 根据两点间的经纬度计算距离
- 地球环绕 html5,玩转html5(五)---月球绕着地球转,地球绕着太阳转
- 在Oracle中重编译所有无效的存储过程
- 轻量级web富文本框——wangEditor使用手册(4)——配置下拉菜单 demo
- 操作系统 —— 设备管理
- java中复制图片_如何在Java中实现复制图片
- 在java中对字符串的一些实现处理
- 如何配置 strongSwan 客户端 -- 节选自 OpenSuSE 中文用户手册
- Exception.ToString()使用及其他方法比较
- 已知圆心 坐标和一点坐标和角度 就之后的坐标_LaTeX 中绘制多个相交椭圆(对起始角度与终止角度的思考)...
- [推荐] [推荐] 黑苹果驱动之家
- Java面试时,该如何准备亮点?
- CSR8675项目实战:BlueAg蓝牙一拖二发射器
- 测试局域网或wifi实际最大带宽
- AHU-2017校赛现场赛 B 下一个幸运数
- phalapi可以依赖注入么_[2.11]-核心思想:DI依赖注入-让资源更可控 | PhalApi(π框架) - PHP轻量级开源接口框架 - 接口,从简单开始!...
- 为什么iPhone 12 中国版不支持5G毫米波?
- AD域创建及加入域的办法
- Django restframework实现批量操作
- 6大热门开源自动化测试框架【建议收藏】
热门文章
- java的接口理解_原来Java的接口可以这样理解
- html中可以添加几个类,从一个类中向一个HtmlHead对象添加多个元素
- linux如何运行用户程序,Linux系统下,如何以其他用户身份运行程序
- mysql5.7配置_MySQL5.7详细配置教程
- sql优化常用的几种方法_MySQL常用30种SQL查询语句优化方法
- 【资源总结】国内AI领域的赛事全集
- 全球及中国养老护理行业十四五趋势前景与投资动向建议报告2022版
- 中国镍氢电池行业产销状况及竞争格局咨询报告2021-2027年版
- centos7.6下的python3.6.9虚拟环境安装elastalert
- IBM informix .net provider