BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / embedded-system / #3700同步于 2009/2/23
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Embedded_System机器人发帖

[合集] [请教]关于uCOS的一些问题

lester98
2009/2/23镜像同步2 回复
☆─────────────────────────────────────☆ Husky (哈士奇奇) 于 (Thu Feb 19 20:08:48 2009) 提到: 是一些基本概念的问题 看书的时候还感觉比较理解,但一应用就感觉没看透,还请大牛帮忙解释解释 1、信号量与邮箱的区别在哪儿? 2、事件和任务的关系? 3、创建信号量时要赋的初始值为N的时候,是怎样一种情况? ☆─────────────────────────────────────☆ hobby (hobby) 于 (Thu Feb 19 21:15:21 2009) 提到: 1、它们都是任务间通信的手段,但是应用场合不同 信号量用作任务同步或者资源的互斥访问 至于邮箱,名副其实的,可以“邮寄”一些东东给别的任务 举个例子的话,我觉得可以说信号量就像别人打你电话只响一下(具体代表什么含义在于你们之间的约定),而邮箱就像短信哇,写啥都行。当然,二进制信号量也可以用邮箱实现。 2、任务与事件的概念不同 任务作为一个竞争系统资源的单位,各个待执行的任务被系统统一调度; 而任务之间(或者任务与中断之间)的互动体现在信号上,也就是事件。某些事件的发生可以使任务的运行状态发生变化。 比如两个任务A、B同时竞争某个资源,以信号量为途径实现互斥。 在A获得了信号量后,在使用资源的时候,B由于等待信号量而处于阻塞状态。 A使用完毕资源后,告知B“我用完了,你们用吧”,这个事件的传达是通过信号量完成的。 3、这个问题懒得敲了,复制粘贴之 “对信号量的初始计数值赋值。该初始值为0到65,535之间的一个数。如果信号量是用来表示一个或者多个事件的发生,那么该信号量的初始值应设为0。如果信号量是用于对共享资源的访问,那么该信号量的初始值应设为1(例如,把它当作二值信号量使用)。最后,如果该信号量是用来表示允许任务访问n个相同的资源,那么该初始值显然应该是n,并把该信号量作为一个可计数的信号量使用。” ☆─────────────────────────────────────☆ hobby (hobby) 于 (Thu Feb 19 21:18:37 2009) 提到: 补充一点,对于各个比较模糊的概念,也可以从参数方面加深理解 比如信号量主要是初值,而消息队列是一个指针(内容是发送方写好的) ☆─────────────────────────────────────☆ dianeda (芊芊) 于 (Fri Feb 20 14:07:26 2009) 提到: 不错不错,比喻很可爱 【 在 hobby 的大作中提到: 】 : 1、它们都是任务间通信的手段,但是应用场合不同 : 信号量用作任务同步或者资源的互斥访问 : 至于邮箱,名副其实的,可以“邮寄”一些东东给别的任务 : ................... ☆─────────────────────────────────────☆ Husky (哈士奇奇) 于 (Sun Feb 22 20:57:12 2009) 提到: 感谢1楼的解答,但是还有一些疑惑: 是不是说一个任务,可以对应多个事件? 为什么多事件的初始值要0? 初始值为n时,什么叫做“相同的资源”呢? 望能详解,感谢! ☆─────────────────────────────────────☆ hobby (hobby) 于 (Mon Feb 23 00:16:27 2009) 提到: 可以一个任务对应多个事件吧,看你怎么设计了,比较简单的情况的话,一个任务可能也就关注一个事件。 关于初始值的问题,你说的应该是信号量的初始值吧,信号量最大的作用就是共享和竞争资源 初始值为n的情况,比如有n台打印机,每个时间点上一台打印机只有一个任务可以访问,如果有m个任务都想使用打印机,而且m>n的话,就有资源的征用问题,引入一个初始值为n的信号量,此信号量的数值所代表的就是“当前还有多少打印机可以使用”。想用打印机的任务去看信号量,如果还有的话就Take之,否则就等待(阻塞)或者先干别的去(不等待立即返回),同样的,使用过打印机的就Give之,以便其他任务可以使用打印机。 初值为0的情况也是普遍存在的,例如一个数据处理系统,任务A产生数据,缓存到一定数目后交给任务B做处理,这个事件使用信号量做通知的手段。那么系统初始化时,对B而言,是没有数据要处理的,那么信号量自然为0了。每当任务A提交一次数据,对信号量加1(做SemGive),任务B发现信号量非0后,就去处理数据,处理一个,对信号量减1(做SemTake) 一般就是这样用的吧,其实这些东西不算做ucos专有的,而是操作系统的一些知识。建议LZ找本好的参考书系统的看看,免得别人给你解释的一星半点的反而让你产生错误的理解。 PS:ucos的参考资料我这里倒是有,是ucos学习小组的资料,需要的话说一声
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
hobby机器人#1 · 2009/2/23
咦~合集了 PS:原来的那个帖子也还在?
lester98机器人#2 · 2009/2/23
【 在 hobby 的大作中提到: 】 : 咦~合集了 : PS:原来的那个帖子也还在? 合集便于收藏到精华区,但是并不一定非得删掉原来的帖子