打印

油箱 队列 存储块究竟有什么用

[复制链接]
2896|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
pttptt85|  楼主 | 2011-8-22 10:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我以前是用51的,现在在学ARM(STM32),但我看UCOS里有信号量、油箱、队列,不知道它们有什么用,例如:信号量用来表示一个USART是否被其他所用,在51里我可以设一个全局变量来表示,不就行了吗?还需用什么函数这么复杂呢?更何况还有什么油箱队列等。另:在51里,不是定义一个2维数组就自动动态分配了存储空间了吗?怎么在这里还要动态分配一个存储块呢?其为了碎片,但我看还是有可能产生呀。比如:我分配了10个128的存储区,但我只能一次获取一个128的块,如果我要一个连续的3个128,其块中如果有用了,那不是一样吗?
沙发
pttptt85|  楼主 | 2011-8-22 13:17 | 只看该作者
怎么没有人来指导说明一下呢?谢谢

使用特权

评论回复
板凳
香水城| | 2011-8-22 13:23 | 只看该作者
LZ找一本有关操作系统的书看看吧,至少是讲uCOS的。你的问题需要一本书的篇幅才能讲清楚。

使用特权

评论回复
地板
pttptt85|  楼主 | 2011-8-22 13:37 | 只看该作者
我看了UCOS的书,但还是没有理解其用意。在51里,就用几个全局变量就搞定,但在这里怎么变得如此复杂

使用特权

评论回复
5
swx2010| | 2011-8-22 13:42 | 只看该作者
4# pttptt85
上了系统,本来简单的程序操作就变复杂了,一直有和楼主一样的想法,但是系统的复杂做法可能考虑的更多,比如安全性、模块化,如何方便移植等问题

使用特权

评论回复
6
香水城| | 2011-8-22 13:58 | 只看该作者
我看了UCOS的书,但还是没有理解其用意。在51里,就用几个全局变量就搞定,但在这里怎么变得如此复杂
pttptt85 发表于 2011-8-22 13:37


单身的时候,一个人吃饱全家不饿;等你结了婚生了孩子,老婆孩子一大堆时,就没有那么简单了。你现在不理解,因为你还没有切身体会,:lol

使用特权

评论回复
7
永远的不知| | 2011-8-22 14:32 | 只看该作者
1# pttptt85

可以看看这本freertos的说明书,讲的比较简单明了,推荐楼主看看。
信号量、邮箱、队列主要用于各任务之间的通信,涉及到任务切换,这个变量无法直接做到;系统里的动态分配存储块,还对于着释放存储块,一个空间可以重复利用,可以被不同的任务利用,如果用全局数组则无法做到。

[local]1[/local]

使用特权

评论回复
8
永远的不知| | 2011-8-22 14:39 | 只看该作者
本帖最后由 永远的不知 于 2011-8-22 14:41 编辑

1# pttptt85

可以看看这本freertos的说明书,讲的比较简单明了,推荐楼主看看。
信号量、邮箱、队列主要用于各任务之间的通信,涉及到任务切换,这个变量无法直接做到;系统里的动态分配存储块,还对于着释放存储块,一个空间可以重复利用,可以被不同的任务利用,如果用全局数组则无法做到。

FreeRTOS_cn.pdf (3.02 MB)

使用特权

评论回复
9
pttptt85|  楼主 | 2011-8-22 15:01 | 只看该作者
我可以用分配了一个全局2维数组:buf[10][128];然后有一个全局变量:bufsize=0;数组从buf[bufsize]开始,如果当一个任务使用了一个数组则:bufsize ++,当一个任务不需要了,释放一个数组:bufsize--;
当bufsie<10,则表示还有数组可用,而且后面的任务只能用buf[bufsize],在这里使用不是随便用那个数组,根据bufsize的标号就可以了,这样和分配存储区不是一样的吗?用不着一些分配函数呀?
同理:在信息同步上也可一样

使用特权

评论回复
10
永远的不知| | 2011-8-22 15:15 | 只看该作者
9# pttptt85

您看看操作系统的内存管理,应该就明白了,系统已经做好了,你何苦又要自己管理内存?再有你说的方法,如果现在已经分配到bufsize=8了,这时候要释放buf4,你怎么办?只是简单的bufsize--,好像行不通吧。

使用特权

评论回复
11
ppy521| | 2011-8-22 15:35 | 只看该作者
这个问题,既简单又深奥。。。
楼主的境界还没有达到操作系统级别,还停留在前后台阶段,估计是程序写的还不够大。。

使用特权

评论回复
12
heuyck| | 2011-8-22 16:10 | 只看该作者
呵呵,停留在前后台是无法体会到任务切换的。有任务切换才会需要信号量、邮箱、队列。
OS可以说本来就是你设计的一部分。只不过人家总结、规范出来,你可以直接用,就不需要写这部分代码了。
实际有点类似库函数。你说你写51自己可以写代码实现库函数的功能,难道就不用库函数了?
人所做所发明的一切都是为了偷懒。。。。。。。所以说人是偷懒的动物。

使用特权

评论回复
13
xiao442613| | 2011-8-22 18:35 | 只看该作者
学习了!

使用特权

评论回复
14
wangjun403| | 2011-8-22 21:21 | 只看该作者
先看操作系统原理,再去看具体的操作系统

使用特权

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

本版积分规则

45

主题

110

帖子

1

粉丝