打印
[菜农群课笔记]

20120414群课笔记

[复制链接]
2045|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 xyz549040622 于 2012-4-15 08:52 编辑

【有点乱,以后直接截图上传清晰】 20120410群课笔记.rar (21.56 KB)

直播开始。从今天开始讲RTOS的基础知识,课本为《嵌入式系统的实时概念》这本书。

John Lee(1513562323) 20:08:52
书在群共享第9页,倒数第3个






John Lee<j.y.lee@yeah.net>
20:28:11

所谓外部事件,简单的说,就系统需要处理的输入,这些输入大部分是外部输入。
John Lee<j.y.lee@yeah.net>
20:29:07

这些输入,在裸奔的系统中,很多是靠循环的查询方式完成的。
John Lee<j.y.lee@yeah.net>
20:30:11

例如:
while (串口输入中断标志 == 0);
// 等待串口输入

John Lee<j.y.lee@yeah.net>
20:30:49

这个while循环,直到串口有输入时,才会结束。
John Lee<j.y.lee@yeah.net>
20:32:14

在RTOS环境中,除非万不得已,不要这样做。
John Lee<j.y.lee@yeah.net>
20:33:02

这个万不得已,有两个含义。
John Lee<j.y.lee@yeah.net>
20:34:00

1、硬件限制。
2、复杂度和运行开销权衡。
John Lee<j.y.lee@yeah.net>
20:34:47

这两个例外情况,以后会讲到的。
John Lee<j.y.lee@yeah.net>
20:35:50

一般来说,在RTOS环境中,外部事件,都需要做成“中断”输入的。
John Lee<j.y.lee@yeah.net>
20:36:56

“中断”,提供了高级任务抢占低级任务的机会。
John Lee<j.y.lee@yeah.net>
20:38:36

应用系统设计,就可以根据事件的紧急程度,利用“中断”,让能够处理紧急事件的任务,优先执行。

John?Lee<j.y.lee@yeah.net>??20:42:02
这个在下面有解释:

John Lee<j.y.lee@yeah.net>
20:43:36

只是有一点可能有些歧义:“通信是可预测的”,我觉得应该是“事件是可以预测的”。
John Lee<j.y.lee@yeah.net>
20:45:07

如果把通信理解为广义上的,所有的信息传递(包括IO等)都算“通信”,也可以。
John?Lee<j.y.lee@yeah.net>??20:46:16
然后还有一点,可能需要澄清一下。
John Lee<j.y.lee@yeah.net>
20:48:08

纯粹的处理单个事件的系统,虽然也可以称为“实时”系统,但在我们看来,这种属于裸奔就可以处理的
John Lee<j.y.lee@yeah.net>
20:48:40

与RTOS基本没有关系。
John Lee<j.y.lee@yeah.net>
20:50:49

下面几篇,说的是实时性的特点,都是些一般概念,很好理解的,大家可以自己看看。
John Lee<j.y.lee@yeah.net>
20:53:45

总之来说,“实时性”,在每个嵌入式系统中(包括所有裸奔的单片机),都是有要求的。
John Lee<j.y.lee@yeah.net>
20:55:46

但很多时候,大家(做项目时)很少谈及这个问题(有意无意地忽略了),是因为大多数系统的实时性要求较低,普通的实现都基本满足
John Lee<j.y.lee@yeah.net>
20:58:37

第2章的内容是讲嵌入式开发的一般知识,主要是开发平台方面的。
John Lee<j.y.lee@yeah.net>
20:59:21

这个与RTOS的直接关系不大
John Lee<j.y.lee@yeah.net>
21:01:09

但这些内容,从本质上说,还是很重要的,你现在可能用不着这些内容,但以后迟早会用得着的。
John Lee<j.y.lee@yeah.net>
21:03:10

第3章,到3.4之前,也是一般知识。
John Lee<j.y.lee@yeah.net>
21:05:27

其实,这些都是自然而然的过程。
John Lee<j.y.lee@yeah.net>
21:05:55

大家可能自己写程序时,都是按照这个规则来做的。
John Lee<j.y.lee@yeah.net>
21:07:53

应用程序最后初始化,是因为它的初始化过程,可能会使用到RTOS的某些功能,即,对RTOS有依赖性。
John Lee<j.y.lee@yeah.net>
21:10:01

RTOS内部,也分了很多部件模块,其中,也有一些有依赖关系,所以,需要某些模块先初始化,某些后初始化。
John Lee<j.y.lee@yeah.net>
21:12:15

下面是第4章。
John Lee<j.y.lee@yeah.net>
21:13:30

前面的也都是些一般性概念,大家随便看看即可,我们从4.3开始。
John Lee<j.y.lee@yeah.net>
21:15:31

RTOS的基础部件,包括调度器,同步对象,和一些服务。
John Lee<j.y.lee@yeah.net>
21:16:45

某些RTOS在介绍时,说基本内核只有几百字节等等,这些都是忽悠大家的。
John Lee<j.y.lee@yeah.net>
21:17:24

光内核,是无法使用的。
John Lee<j.y.lee@yeah.net>
21:18:24

基本的中断服务,也是必须的
John Lee<j.y.lee@yeah.net>
21:19:08

同步对象,严格说来,不是必须的。
John Lee<j.y.lee@yeah.net>
21:19:55

但一个没有同步对象的应用系统,也没啥实用价值
John Lee<j.y.lee@yeah.net>
21:20:45

裸奔也就行了。
John Lee<j.y.lee@yeah.net>
21:21:37

一个稍微实用一点的应用系统,至少应该包含一种同步对象。
John Lee<j.y.lee@yeah.net>
21:22:56

我的意思是,如果某位编出来的基于RTOS的应用程序中,没有使用到任何同步对象,那么这个系统,用裸奔可能更简单一些。
John Lee<j.y.lee@yeah.net>
21:26:27

调度器,是RTOS的核心。
John Lee<j.y.lee@yeah.net>
21:28:44

它使用定义好的调度算法,根据中断服务和同步原语提供的信息,决定哪些任务运行处于什么样的状态(运行、就绪、阻塞等等)。
John Lee<j.y.lee@yeah.net>
21:29:45

所谓的可调度实体,通常就是指的“任务”。
John Lee<j.y.lee@yeah.net>
21:30:41

而且rtos系统中,通常都不止一个任务。
John Lee<j.y.lee@yeah.net>
21:31:09

那么究竟需要多少任务呢?
John Lee<j.y.lee@yeah.net>
21:32:11

任务多了,资源(特别是ram)消耗太大,任务少了,可能某些事件来不及处理。
John Lee<j.y.lee@yeah.net>
21:33:20

这个需要仔细设计,好像目前市面上没有关于这方面的书。
John Lee<j.y.lee@yeah.net>
21:34:14

任务的功能设计和划分。
John Lee<j.y.lee@yeah.net>
21:35:55

关于这些,我也只是有些经验积累而已,还没有时间提升到理论层面,所以,也暂时不好给大家讲这方面的内容。
John Lee<j.y.lee@yeah.net>
21:36:47

但我是希望和大家共同讨论这些问题的。
John Lee<j.y.lee@yeah.net>
21:37:15

作为经验之谈而已。
John Lee<j.y.lee@yeah.net>
21:38:24

关于任务的设计,如果有理论,最好了,我们就直接讲理论,放之四海。
John Lee<j.y.lee@yeah.net>
21:38:46

没有理论,我们就只能讲经验。
John Lee<j.y.lee@yeah.net>
21:38:59

但讲经验,需要通过实例。
John Lee<j.y.lee@yeah.net>
21:41:50

所以,分析一些相对复杂的系统,就事论事,把它能够比较好的纳入RTOS应用,大家就可以从中吸取经验。
John Lee<j.y.lee@yeah.net>
21:43:23

接着说调度器
John Lee<j.y.lee@yeah.net>
21:43:51

调度器的基本操作之一是所谓的“任务切换”。
John Lee<j.y.lee@yeah.net>
21:44:22

任务切换,是通过上下文切换完成的。
John Lee<j.y.lee@yeah.net>
21:45:00

上下文,是指“任务”运行时的必要信息。
John Lee<j.y.lee@yeah.net>
21:45:59

把这些必要信息,保存到某处,就相当于对当前任务做了一个“快照”。
John Lee<j.y.lee@yeah.net>
21:46:41

一般也可以把上下文称为“现场”
John Lee<j.y.lee@yeah.net>
21:48:14

一般的CPU,上下文包括:所有的CPU寄存器,栈指针。
John Lee<j.y.lee@yeah.net>
21:49:17

保存的地方,一般在任务控制块(TCB)中,或者任务栈中。
John Lee<j.y.lee@yeah.net>
21:49:59

在TCB中,有一个很小的优势:位置固定。
John Lee<j.y.lee@yeah.net>
21:50:49

而在任务栈中,必须保存到任务栈顶。
John Lee<j.y.lee@yeah.net>
21:51:39

但任务栈顶,这个位置并不固定,所以,还需要保存一个此位置的“指针”到TCB中。
John Lee<j.y.lee@yeah.net>
21:53:25

TCB一般被认为是固定的。
John Lee<j.y.lee@yeah.net>
21:55:11

调度器,保存当前任务的上下文,然后再装载需要执行的任务的上下文,这个过程,就是任务切换。
John Lee<j.y.lee@yeah.net>
21:57:33

当然也有动态分配的。
John Lee<j.y.lee@yeah.net>
21:58:00

但我个人意见是:不用动态分配



相关帖子

沙发
xyz549040622|  楼主 | 2012-4-15 08:47 | 只看该作者
【课间提问及讨论】
John Lee(1513562323) 22:01:39 好,问个简单的: RTOS的模块中,“中断服务”和“系统节拍服务”,有没有依赖关系?抢答开始!!!











使用特权

评论回复
板凳
abin0415| | 2012-4-15 17:25 | 只看该作者
顶,昨晚有事,漏了一大部分。

使用特权

评论回复
地板
[惊涛骇浪]| | 2012-4-15 18:29 | 只看该作者
谢谢

使用特权

评论回复
5
eehomer| | 2012-4-15 21:25 | 只看该作者
什么群呀 怎么加进去呀

使用特权

评论回复
6
batsong| | 2012-4-16 08:58 | 只看该作者
讲RTOS貌似是我的提议,但是我被群T出来了,神马情况:L

使用特权

评论回复
7
john_lee| | 2012-4-16 09:54 | 只看该作者
6# batsong
我已经给你回过站内信了,让你再加群即可。

使用特权

评论回复
8
plc_avr| | 2012-4-16 10:53 | 只看该作者
顶起来!

使用特权

评论回复
9
ji7411| | 2012-4-16 11:29 | 只看该作者
顶起。大家多交流。

使用特权

评论回复
10
batsong| | 2012-4-16 21:51 | 只看该作者
7# john_lee
苦于不知道群号啊,QQ也搜索不出来,李老师

使用特权

评论回复
11
yongjun_meng| | 2012-4-17 16:17 | 只看该作者
认真学习

使用特权

评论回复
12
kkkk123456| | 2012-5-2 08:12 | 只看该作者
谢谢啊

使用特权

评论回复
13
hongdan0714jin| | 2012-5-8 10:41 | 只看该作者
群号哪里有啊???正在自学,迫切想加入听课行列。。。

使用特权

评论回复
14
okyouwin| | 2012-5-8 11:39 | 只看该作者
顶个。

使用特权

评论回复
15
dengcong| | 2012-5-8 17:20 | 只看该作者
顶一个

使用特权

评论回复
16
zxs2000| | 2012-5-10 11:05 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:qq群: 嵌入式系统arm初学者 224636155←← +→→点击-->小 i 精品课全集,21ic公开课~~←←→→点击-->小 i 精品课全集,给你全方位的技能策划~~←←

2782

主题

19267

帖子

104

粉丝