谁说mcu上不可能发生死锁?

[复制链接]
8699|47
 楼主| 冷漠 发表于 2010-8-11 11:06 | 显示全部楼层 |阅读模式
本帖最后由 冷漠 于 2010-8-11 11:14 编辑
……mcu上就那么几个简单的任务, 竟然也要出现死锁, 还想指望用软件能自动解决, 这样的程序员该打pigu。

                                                       —— 引用自所长言论



呵呵,无知。看看下面的程序(要不要冷漠写成51程序?)



               图2    含有竞争条件的生产者-消费者问题。



       ……现在回到竞争条件的问题。这里有可能会出现竞争条件,其原因是对count的访问未加
限制。有可能出现以下情况:
        缓冲区为空,消费者刚刚读取count的值发现它为0。此时调度程序决定暂停消费者并启动运行生产者。生产者向缓冲区中加入一个数据项,将count加1。现在count的值变成了1。它推断认为由于count刚才为0,所以消费者此时很可能在睡眠,于是生产者调用wakeup来唤醒消费者。
        不幸的是,消费者此时在逻辑上并未睡眠,所以唤醒信号丢失。当消费者下次运行时,它将测试先前读到的count值,发现它为0,于是去睡眠。这样生产者迟早会添满整个缓冲区,然后睡眠。这样一来两个进程都将永远睡眠下去。
                                        ——摘自 ……

               死锁就这样发生了。


    上面2个生产者 / 消费者mcu 任务,用HOT大叔的裸奔嵌入式操作系统HotTask51写也行,让冷漠用RTX51_FULL写也行也行,哪个不是51mcu上发生的死锁?



所长是玩PC机软件的,以为51mcu做不了什么?
——怕是自己不会做吧。


看看 Intel 和 Keil 写的51_RTOS:邮箱、队列、链表,IPC,DiJkstra信号量,Token……内存管理,时钟管理,I/O管理……一个都不少。( 所长该不会说
它没有文件管理——我服。)



      


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
yewuyi 发表于 2010-8-11 11:09 | 显示全部楼层
想故意搞出来肯定是能的啦。。。
 楼主| 冷漠 发表于 2010-8-11 11:28 | 显示全部楼层

所有的假设都是故意弄出来的,所有的创新都源自假设。

本帖最后由 冷漠 于 2010-8-11 15:36 编辑

下面举一个大道至简《感悟设计》中所举的实际OS死锁的例子,是大道至简亲临现场亲手解决的:

请查阅《感悟设计》P41 第4.4章 宽容包纳,和而不同

呵呵,多个任务因公共共享内存分配不足而造成的死锁。大道至简的解决方案是最简单有效的:
      “  我不用多任务共享,我有足够的内存32M,每个任务在编译阶段就分配各自的私有内存空间。” (因为以前的技术使mcu 内存容量有限。所以有多任务共享技术研究。)

      于是,ucLinux 阳春白雪的内存管理被称为“操作系统固有的毛病”垃圾般弃之不用,绕道而行了。我们大道至简老师成了能够发现和修改ucLinux操作系统问题,敢于在ucLinux 操作系统核心层动刀子的高手。

        依照冷漠的看法,如果大道至简老师具有在ucLinux核心层动刀子的能力,他怎么至今还在那种小地方呆着玩电路设计?电阻电容三极管,辅导一帮初入门者;太屈才了吧。

        如果能把一个ucLinux 的内存管理“固有的问题”——如果真有问题的话——分析出来,修改完善,——涉及解决死锁研究课题。那才是一个人超级才智发挥,做为国人争气的顶级智举。
         如此人才,怎么不到中科院来应聘?还整天热衷于为小老板搞产品设计。
         另外至少我们单位软件专业的博士,研究员什么的,还没有谁发现ucLinux 有内存管理方面的固有毛病,——他们还想研究死锁问题呢……北京的研究单位、大学里都是草包?!
xuyiyi 发表于 2010-8-11 12:32 | 显示全部楼层
搬个板凳坐着听课
流行音乐 发表于 2010-8-11 15:37 | 显示全部楼层
死锁与硬件无关,这是逻辑问题。
yewuyi 发表于 2010-8-11 15:42 | 显示全部楼层
呵呵,冷漠本是和H掐上的,怎么掐着掐着又和大道至简掐起来了呢?
highgear 发表于 2010-8-11 22:31 | 显示全部楼层
顶流行音乐。

冷漠, 你的脑袋怎么了?
死锁是一个程序员的 bug, 不是不可能发生, 而是不可以有。就 51 那么一点东西, 程序竟然也要出现死锁, 你说这样的程序员该不该打 pigu?  指望能自动被解决, 更该被打。
祥帆电子 发表于 2010-8-11 22:47 | 显示全部楼层
菜鸟一如既往的围观表演
踢球老越位 发表于 2010-8-11 22:57 | 显示全部楼层
呵呵,冷漠本是和H掐上的,怎么掐着掐着又和大道至简掐起来了呢?
yewuyi 发表于 2010-8-11 15:42

战线太长了,属于战略失误
huangqi412 发表于 2010-8-11 23:20 | 显示全部楼层
呵呵, 继续掐,洽洽更健康。
原野之狼 发表于 2010-8-11 23:52 | 显示全部楼层
冷漠大侠,这个程序片段只是说明了死锁是咋回事,作者特意搞了这么一个例子来说明问题。
而实际上这么写程序会死得很惨,多任务间如此共享变量本来就是个严重错误,而且这种情况下也不宜采用wakeup的方式,OS已经有很多机制来解决此问题,比如这个问题可以利用消息队列来处理啊,再高级点可以采用管道来处理啊。
任何法宝都不是万能的,并且法宝本身也会要求使用者按照它的规则来使用。
ocon 发表于 2010-8-12 06:17 | 显示全部楼层
先有结论,再去找论据。。。
ddtx 发表于 2010-8-12 08:55 | 显示全部楼层
消息机制,PV法则
ylsiw 发表于 2010-8-12 09:01 | 显示全部楼层
技术高低和学历什么的没有太大的关系吧,小公司也出好产品的,然后慢慢成长成大公司,楼主说中科院,现在中国搞研究很少专注技术了,只是在紧跟着政策做课题。
 楼主| 冷漠 发表于 2010-8-12 09:30 | 显示全部楼层
本帖最后由 冷漠 于 2010-8-12 09:42 编辑

简单回11楼原野之狼版主:
任何技术都是有代价的。刚看电视,农村各户装了电灯,但农民头上挂着电灯,下面还是点着煤油灯,停电?——他付不起电费!推广概念:高技术是要花钱的;低级通信(简单OS系统调用)是免费的。

高级通信是不错,一般人,绝大多数人写不出来,只能借助高级OS系统函数调用。OS软件代价多少?

一个51RTOS是15 吨银子;比微软的Windos 气粗多了。我们公司如果拿不到300吨以上的项目,经理是绝对不会批准买51RTOS的。
    没有电灯,只好由我们这些程序员点煤油灯没有阳春白雪,只好做下里巴人,——临界、互斥、信号量;反正中国代价最低的就是人。(哈哈,经理不批,我已经个人买了。)
    什么?自己写消息队列?忘了冷漠是菜鸟,还真希望各位高手能借助论坛在此露一手,教咱初学者写一个能用的邮箱或者消息队列学习学习, 冷漠一定照规矩付学费,先承诺预付1吨……谁来?

——就是别像所长那样,书上抄一个PC机上 X语言消息队列,还说是自己写的;写出来51上不能用。(所长自己写的就不能修改成51上能用的?一来真格的就露馅。支支吾吾至今也没有一个51上能用的。)PC机上的东东咱冷漠水平低看不懂。——如若看得懂,早就自己写了。
      
         冷漠一定照规矩付学费,先预付1吨……谁先来?
mxh0506 发表于 2010-8-12 09:41 | 显示全部楼层
硬件有硬件的死锁,软件有软件的死锁。
想要搞都能搞出来的……:sleepy:
 楼主| 冷漠 发表于 2010-8-12 09:45 | 显示全部楼层
想写本世界著名OS 教材肯定都能写出来的,就是冷漠不想写罢了。
ayb_ice 发表于 2010-8-12 09:47 | 显示全部楼层
又掐上了
...
yewuyi 发表于 2010-8-12 09:55 | 显示全部楼层
晕,1吨银子是多少R MB啊?!
highgear 发表于 2010-8-12 09:58 | 显示全部楼层
消息队列何难之有, highgear 就足够了,不用劳动原野之狼大驾。

如果冷漠你有银子,愿意付学费, 可以给 21icbbs 捐 10 吨银子。21ic 确认收到后, 我给你做一个 51 下能用的 通用的消息队列, 你不但可以指定队列的形式(动态还是静态), 也可以指定消息处理机制(dispatch 还是注册回叫事件)。

这算是我给 21icbbs 的一点贡献吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:要想让别人关照自己的自尊,首先自己先要有所成就才行。

17

主题

921

帖子

4

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