打印

OSMemGet() 缺憾

[复制链接]
4602|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
shizaigaole|  楼主 | 2010-8-13 14:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
UCOSII 是个好东西。

唯一感觉任务同步手段好像还是有缺憾。

比如 OSMemGet() ,

如果消费方没有释放内存,生产方,还必须进行延时再申请内存,


如果 OSMemGet() 也带有同步特性,当能申请成功则继续运行,

否则任务挂起等待,

这该多好啊

相关帖子

沙发
airwill| | 2010-8-14 12:30 | 只看该作者
这也算是缺憾呀?
如果强制要取消费方的内存, 可以使用信号量呀. 不是同步问题解决了

使用特权

评论回复
板凳
HWM| | 2010-8-14 17:33 | 只看该作者
to LZ:

这样做是给应用程序多一个选择,否则的话将总是“死等”在里面。

使用特权

评论回复
地板
shizaigaole|  楼主 | 2010-8-15 07:58 | 只看该作者
HWM恰恰是理解反了吧?

UCOS里面的任务挂起不存在死等的情况。

对本生产任务,因为没产品存储场所,当然必须挂起

使用特权

评论回复
5
HWM| | 2010-8-15 19:11 | 只看该作者
to 4L:

我说的是给应用程序一个选择。意思是说若没存储资源任务不能继续干任何事的话,就自己等着(同时继续请求存储资源)。但若任务还可以干些其他事的话,则可以先处理一下其他的事项,完了或中途再检测存储资源是否可用。

另外,采用这种方法还可以有效的防止死锁的出现。

使用特权

评论回复
6
shizaigaole|  楼主 | 2010-8-15 22:38 | 只看该作者
LS的思想出发点就不对。

如果一个任务需要等待不同的外部条件,

并且这两个条件可以导致,不分优先权的代码运行片段,

这个任务基本上要考虑分割为不同的任务。

否则会形成扫描运行方式,和大循环无异。


如果用这种思想用OS,还不如大循环来的方便

使用特权

评论回复
7
HWM| | 2010-8-15 22:52 | 只看该作者
to 6L:

如果可以有多线程且无线程数限制,那完全可以让一个特定线程去等待。但通常基于MCU的OS和应用程序规模有限,不可能让进程无限制地创建线程(某些OS甚至无此功能)。因此有必要在一个线程内(若无多线程的话则在一个进程内)监控多个对象。处理问题不能走极端,非左即右通常不是最佳选择。

使用特权

评论回复
8
ji_dan| | 2010-11-16 15:42 | 只看该作者
……经过OS管理的二维数组,即动态内存块的优势在哪里啊?请教大牛们!

使用特权

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

本版积分规则

146

主题

3735

帖子

11

粉丝