[新手园地] 《嵌入式系统的实时概念》手机学习笔记2

[复制链接]
 楼主| hotpower 发表于 2011-6-2 15:48 | 显示全部楼层 |阅读模式
本帖最后由 hotpower 于 2012-9-22 13:14 编辑

还是老规矩,俺没写完不许跟帖,否则咔嚓
 楼主| hotpower 发表于 2011-6-2 16:05 | 显示全部楼层
《第六章 信号灯》
看到了这一章节的标题,俺就想起了两部电影,《**毛信》和地道战。
前者是用山上的小树作为传递消息的载体,后者是放鬼子进村关门打狗。
前者用于对任务的同步运行,后者协调对共享资源的互斥访问。
在老师的look里,就是同步对象中的“计数信号量类”的look::sem_t
有两个最重要的有两个成员函数:
wait()和post()
 楼主| hotpower 发表于 2011-6-2 16:49 | 显示全部楼层
获取和释放信号灯
获取有等待和接收的含义,但释放有些难以理解。
真不如叫做接收和发送更好理解些。特别在消息的传递上面。
在共享资源应用中,获取和释放就理解正确了。
它们对应的函数在look里就是wait()和post()
 楼主| hotpower 发表于 2011-6-2 17:10 | 显示全部楼层
等待和信号同步
在rtos里面,存在着中断和任务,任务和任务之间的通讯问题。
运行中的任务主动阻塞,等待一个命令即同步信号的到来。
阻塞不想裸奔那样傻等,一直while那个信号,其他程序别玩了。
阻塞是将控制权交还给rtos,等信号发送源发送消息后再被唤醒。
有点回调函数的意思和事件驱动的味道。
即有事件发生才被唤醒干活,其他时间休息。
信号源可以是中断服务程序,也可以是其他任务。
但要特别注意,中断服务程序不要阻塞发送!
 楼主| hotpower 发表于 2011-6-2 18:02 | 显示全部楼层
look实现等待和信号同步
在作为中断和任务,任务和任务之间的信号传递应用中,一定要初始化sem为0。
那么wait()和post()的规则如下:
1.由于sem=0,故wait()认为信号灯不可使用,进入阻塞等待。
2.发送源,如中断服务程序或其他任务post(),此时sem=1,即信号灯可以使用,任务迁移到就绪,再从就绪到运行。
3.接收任务运行后,sem=0,即信号灯又不可使用了。由于任务的无限循环,所以必然回到(1)

以此规律循环往复,用不消失。

我们可以比较裸奔和rtos在这上面的最大区别,裸奔靠瞎忙,任务靠阻塞。
 楼主| hotpower 发表于 2011-6-3 08:54 | 显示全部楼层
单一共享资源访问同步
在多任务系统中,最需注意的就是对共享资源的互斥访问。
最经典的案例就是打印机的共享问题,即使级别最低的文件,也不应该被高级别任务强行终止。至少应该等待当前页打印完。
再者文件不可能高低级别的打印在一页上。
故多个打印任务必须串行化方向。
信号灯的规则是sem=0时不可用,任务被阻塞,非零可用,任务获取对资源的独占。
这个规则如同关门打狗,放鬼子进村。
sem=1,一股鬼子进村,sem=0,关门打狗!
由于sem=0,其他鬼子不能进村增援!
战斗结束,再开门sem=1,继续放鬼子进村!
 楼主| hotpower 发表于 2011-6-3 09:30 | 显示全部楼层
look实现共享资源的互斥访问
与中断和任务,任务和任务之间的消息传递不同,
sem要初始化为1,在任务里面,最先运行wait()的任务look将sem变为0,它会使企图
访问共享资源的任务阻塞。当本任务对共享资源的访问结束后,执行post()释放信号灯,look会将sem=1。
这样其他运行wait()的任务就有机会独自占用共享资源。
 楼主| hotpower 发表于 2011-6-3 11:28 | 显示全部楼层
信号灯笔记总结
1.信号灯可用,sem非0,任务继续运行,
  不可用,sem为0,任务阻塞等待。
2.在中断与任务,任务与任务之间的同步时,
   sem应该初始化为0,运行的任务wait()阻塞,中断或任务post()唤醒那个被阻塞的任务,
特别注意中断中不能阻塞post(),在look中,
应该在dsr()内,do_post()。
3.为共享资源的互斥访问时,sem应该初始化为非0,任务是先用wait()独占,再post()释放。

评分

参与人数 1威望 +1 收起 理由
电子write_cai + 1

查看全部评分

电子write_cai 发表于 2011-8-8 00:12 | 显示全部楼层
写完我顶
 楼主| hotpower 发表于 2011-12-3 12:57 | 显示全部楼层
顶起来学习
abin0415 发表于 2012-4-29 02:26 | 显示全部楼层
菜叔比喻的真形象。
wendaogo 发表于 2012-4-29 08:53 | 显示全部楼层
顶起来
klarke23 发表于 2012-4-29 09:06 | 显示全部楼层
顶起来。。:)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1460

主题

21619

帖子

508

粉丝
快速回复 在线客服 返回列表 返回顶部