嵌入式系统
来源:互联网 发布:奥运会标志 知乎 编辑:程序博客网 时间:2024/06/06 00:21
教材:嵌入式系统及应用,罗蕾、李允、陈丽蓉等,电子工业出版社
- 嵌入式系统开发
- 同步互斥与通信
- 概述
- 多任务系统中任务之间任务与ISR的关系
- 任务的同步或通信
- 任务间的耦合程度
- 嵌入式操作系统内核提供的机制
- 信号量
- 互斥信号量
- 二值信号量
- 计数信号量
- 典型的信号量操作
- 信号量的属性
- 概述
- 同步互斥与通信
嵌入式系统开发
同步、互斥与通信
概述
多任务系统中任务之间/任务与ISR的关系
- 相互独立 仅竞争CPU资源
- 竞争 除CPU外的其他资源(互斥)
- 同步 协调彼此运行的步调,保证协同运行的各个任务具有正确的执行次序
- 通信 彼此间传递数据或信息,以协同完成某项工作
任务的同步或通信
单向同步或通信:
一个任务与另一个任务或一个ISR同步或通信。
双向同步或通信:
两个任务相互同步或通信。双向同步不能在任务与ISR之间进行,因为ISR不能等待
任务间的耦合程度
- 耦合程度较高:任务之间需要进行大量的通信,相应的系统开销较大
- 耦合程度较低:任务之间不存在通信需求,其间的同步关系很弱甚至不需要同步或互斥,系统开销较小
- 研究任务间耦合程度的高低对于合理地设计应用系统、划分任务有很重要的作用
嵌入式操作系统内核提供的机制
- 信号量(semaphore),用于互斥与同步
- 事件(组)(event group),用于同步
- 异步信号(asynchronous signal),用于同步
- 邮箱(mailbox)、消息队列(message queue),用于消息通信
- 管道(pipe),提供非结构化数据交换和实现同步
- ———————————————————————————————————————
- 全局变量
- 共享内存
- Sockets
- 远程过程调用(Remote Procedure Call)
信号量
信号量用于实现任务与任务之间、任务与中断处理程序之间的同步与互斥。
信号量一般分为三种
主要数据结构是信号量控制块
管理所有创建的信号量,内核在系统运行时动态分配和回收信号量控制块
互斥信号量
用于解决互斥问题。它比较特殊,可能会引起优先级反转问题
- 用互斥信号量保护的代码区称作“临界区”,临界区代码通常用于对共享资源的访问
- 共享资源可能是一段存储器空间、一个数据结构或I/O设备,也可能是被两个或多个并发任务共享的任何内容
- 互斥信号量的值被初始化成1,表明目前没有任务进入“临界区”,但最多只有一个任务可以进入“临界区”
- 第一个试图进入“临界区”的任务将成功获得互斥信号量,而随后试图进入用同一信号量保护的临界区的所有其他任务就必须等待
- 当任务离开“临界区”时,它将释放信号量并允许正在等待该信号量的任务进入“临界区”
- 使用互斥信号量可以实现对共享资源的串行访问,保证只有成功地获取互斥信号量的任务才能够释放它
- 互斥信号量是一种特殊的二值信号量,一般它支持所有权、递归访问、任务删除安全和一些避免优先级反转、饥饿、死锁等互斥所固有问题的协议
- 互斥信号量状态图
- 各种互斥机制比较
二值信号量
用于解决同步问题
- 主要用于任务与任务之间、任务与中断服务程序之间的同步
- 用于同步的二值信号量初始值为0,表示同步事件尚未产生
- 任务申请信号量以等待该同步事件的发生
- 另一个任务或ISR到达同步点时,释放信号量(将其值设置为1)表示同步事件已发生,以唤醒等待的任务
- 二值信号量状态图
计数信号量
用于解决资源计数问题
- 计数信号量用于控制系统中共享资源的多个实例的使用,允许多个任务同时访问同一种资源的多个实例
- 计数信号量被初始化为n(非负整数),n为该种共享资源的数目
- 计数信号量状态图
典型的信号量操作
- 创建信号量
- 获取(申请)信号量
- 释放信号量
- 删除信号量
- 清除信号量的任务等待列表
- 获取有关信号量的各种信息
信号量的属性
阅读全文
0 0
- [嵌入式]嵌入式系统概述
- 嵌入式系统
- 嵌入式系统
- 嵌入式系统
- 嵌入式系统
- 嵌入式系统
- 嵌入式系统
- 嵌入式系统
- 嵌入式系统
- 嵌入式系统
- 嵌入式系统
- 嵌入式系统
- 嵌入式系统
- 嵌入式系统
- 嵌入式系统
- 嵌入式系统
- 嵌入式系统
- 嵌入式系统
- CNN经典网络模型
- 安卓音乐播放器(2)
- json文件读取
- Toolbar
- Serializable与serialVersionUID
- 嵌入式系统
- lettcode:540. Single Element in a Sorted Array(已排序数组中出现一次的数字,其他数字出现两次)
- vmware fusion pro 10安装详细步骤
- Servlet笔记
- 【实训】Android部分中期总结
- MapReduce 练习二 找朋友
- LeakCanary使用经验小结
- Ubuntu 16.04 64位 搭建 Node.js 环境
- Python编程:从入门到实践-笔记 《列表》