前言
由于嵌入式是我主要学习的方向,因此本课程的笔记会非常精简,仅提供入门知识导引和我觉得重要的部分。 Still,水平有限,若有谬误,多多指教
第一节课
主要介绍嵌入式系统的实时性。和普通操作系统不同,RTOS需求系统绝对实时性。
实时性分为软件实时性,硬件实时性,完全不实时性。
其使用的是
重要的关键词有:Parallelism, threads, interrupts, critical sections, semaphores
并行、线程、中断、关键部分、信号量
中断部分,我应该在浅谈Cortex-M内核这部分讲很清楚了。
然后是一些只可能出现在test的抽象概念:CPS,“cyber-physical systems”,中文名就是网络物理系统,这个概念是2006 年由美国国家科学基金会的 Helen Gill 提出来的。虽然我们有时会把 CPS 和 “cyberspace”(网络空间)联系起来,但这两者不是一种从另一种直接演变出来的关系。
也就是说这概念是来自于控制论。
之后的PPT很夸张地高估了一下嵌入式开发(如果完全不依赖第三方库)需要的技术栈(笑)
复杂性
这部分PPT讲述了嵌入式开发的复杂性
软件开发”不等同于“写程序”。
真正的软件工程包含更多工作,尤其是:
可用性
可维护性
文档
安装与部署
支持与升级
连接数变多了
之后,引入了分布式系统的复杂性概念。
分布式系统不仅有更多节点,还多了更多“链接”(网络连接、通信通道、依赖关系)。
这些链接会引入很多隐含的问题,开发者往往看不见、想不到,导致开发和调试变得非常困难。
分布式系统包含一些传统单机程序没有的概念,比如:网络延迟、部分失败、时钟不同步、一致性、分区容忍性等。
如果开发者对这些概念理解不足,就可能“重新发明”一种解决方式。
这种自创的方案通常是非正式的、难以预测的,反而造成更多问题。
总而言之,这段看起来像是软件开发的内容,不知道为什么会在嵌入式里讲。但是很有用,其中的KISS - (keep it simple, stupid) 原则,我一直都很推崇:简单,有效就行
计算模型(Models of Computation)
最顶层是 MoCs(Models of Computation)。 它分成几类常见的风格:
- Functional(函数式)
- Sequential(顺序式)
- Concurrent(并发式)
这些大类下面又衍生出更具体的模型:
顺序式比如 Event Graphs、State Machines
并发式又可以是 Untimed(无时间概念)或 Timed(有时间概念)
Untimed 下有 Threads、Process Networks、Dataflow 等
Timed 下有 Synchronous Reactive、Continuous Time、Discrete Events 等
PPT中举例的是Process Network,PN。它的意思主要是把系统看做节点,节点之间通信使用arc,数据通道(有点像cpp的概念)1
后面还有FSM,很重要的有限状态机,简单理解为switch和case就可以了
据AI所说,这个和面向对象,函数式,过程式等编程范式还不一样,更抽象化,描述的是系统类别。(我是拎不清反正)
结构
一种简化系统工作原理的抽象概念。
还有一个概念是“平台”:指的是已经准备好的组件,包含可复用的软件/硬件工具组(很像BSP+RTOS)。
关于这个有个平台导向设计方法,主要内容就是设计从高层抽象开始,用抽象模型来反映那些关键约束,比如性能、通信、时间、并行性等。
用人话说就是,你先选用什么硬件,然后分个BSP,MOUDLE,APP,之类的根据功能产生的层,然后再细化到具体实现。这是嵌入式很常见的思想(如果你认真搞嵌软的话)
这个的末页PPT也有总结
至此这节课结束,最后放了个硬件板子的视频。
第二节课
(我去怎么还有限时测验!) 主要讲中断和消抖。
第三节课
主要讲了各种通信。还是值得一学的,后面再展开。
第四节课
讲的定时器。PWM原理就很简单:
有个计数寄存器。时钟信号发一次就递增1,
然后有个对比寄存器,就是你占空比的主要设置对象。这个对比寄存器和计数寄存器对比,如果计数寄存器大于这个对比寄存器的值,则输出1,否则输出2.由于计数不断增加重复,因此会产生0101间隔的方波,也就所谓PWM。
..
这里顺便展开讲下密度。经常有人讨论PWM细粒度,分辨率之类的问题,这里想理清楚还是比较麻烦的:
后续课程知识点
后面旷课比较多。因此就提炼一下PPT以及课堂快问快答的常见要点吧: