发信人: flyking (小排), 信区: Embedded (Wed Nov 7 23:20:44 2001)
这其实就是OSI七层标准的层间接口吧,我想,比如我做过的遥控接受程序可能与此类似 下层(可以在中断中)循环的接收解码每一个位,当解码完一个完整的字后,设置标志,和 数据缓冲区。这一层只干这些,不管别的。 上层循环监测标志位和缓冲区,发现数据以后分支处理。可以在向上分层 相对的就分别是foreground loop和background loop. 我看《计算机网络》那本经典书的理解也是这个思想
[FROM: 210.52.211.162] 发信人: wangyyff (郁闷的大面瓜), 信区: Embedded (Thu Nov 8 08:22:41 2001)
我的理解和你的好像不太一样耶, 前后台这种概念在没有操作系统的嵌入式系统里讲的很多,并不仅仅是限制在网络应用
下面引述邵老师的一段话: 前后台系统是指不使用实时操作系统的嵌入式应用程序。一般做法是,写一个无限循环 的程序 ,在程序中查询每个事件是否发生,每个任务是否具备运行条件,如果是,则处理这个 事件或执行这个任务。这可以看成是一个后台程序。 而系统对中断的响应可以看成是前台程序,中断的打入表示某事件的发生,在中断服务 子程序中,一般对中断做一些简单的处理,然后给出一个某事件发生了的标志,待后台 程序来处理。后台可以叫作任务级,前台叫作中断级。
【 在 flyking (小排) 的大作中提到: 】 : 这其实就是OSI七层标准的层间接口吧,我想,比如我做过的遥控接受程序可能与此类似 : 下层(可以在中断中)循环的接收解码每一个位,当解码完一个完整的字后,设置标志,和 : 数据缓冲区。这一层只干这些,不管别的。 : 上层循环监测标志位和缓冲区,发现数据以后分支处理。可以在向上分层 : 相对的就分别是foreground loop和background loop. : 我看《计算机网络》那本经典书的理解也是这个思想
-- =====================================================================
[FROM: 203.93.105.209] 发信人: hongchen (kissing-fire), 信区: Embedded (Thu Nov 8 09:58:44 2001)
【 在 wangyyff (郁闷的大面瓜) 的大作中提到: 】 在中断服务程序里不对中断作处理,只是置一个标志位,或者写一个状态字,然后由一个 短时定时程序或无限循环程序来扫描这些标志位或状态字,再启动相应的处理程序,这不 就相当于把原本可以一次完成的事情,拆成了两段吗?肯定要引入新的变量,增加跳转时 间,也就相当于增加了系统被干扰的机会,跳转是程序最容易跑飞的时候,这样做的好处 是什么呢? 如果一次发生了多个中断,那么启动的处理程序应该是相当于一个线程,或是一个任务, 应该是独立运行的,这时这个短时定时程序或无限循环程序要启动多个线程,而此时多线 程之间的通讯以及对线程根据优先级进行频繁的执行、挂起,却要由内核来做?那么这个 短时定时程序或无限循环程序到底有什么用呢?为什么不直接由内核来管理呢?直接由内 核来管理这些中断信号?还是你说的这个程序本身就是内核呢? 我觉得这个流程就好像是
中断信号1,2,3。。。->程序,得到标志位或状态字->启动线程->内核管理线程
那么为什么不直接
中断信号1,2,3。。。->内核->启动和管理线程
--
[FROM: 166.111.60.132] 发信人: flowerwind (windflower), 信区: Embedded (Thu Nov 8 12:14:18 2001)
能不能举个实际的例子
--
[FROM: 166.111.156.224] 发信人: wangyyff (郁闷的大面瓜), 信区: Embedded (Thu Nov 8 12:53:09 2001)
这根本就不是操作系统,只是最简单的单片机程序, 扯这么多大理论出来干啥?受不了你
【 在 hongchen (kissing-fire) 的大作中提到: 】 : 在中断服务程序里不对中断作处理,只是置一个标志位,或者写一个状态字,然后由一个 : 短时定时程序或无限循环程序来扫描这些标志位或状态字,再启动相应的处理程序,这不 : 就相当于把原本可以一次完成的事情,拆成了两段吗?肯定要引入新的变量,增加跳转时 : 间,也就相当于增加了系统被干扰的机会,跳转是程序最容易跑飞的时候,这样做的好处 : 是什么呢? : 如果一次发生了多个中断,那么启动的处理程序应该是相当于一个线程,或是一个任务, : 应该是独立运行的,这时这个短时定时程序或无限循环程序要启动多个线程,而此时多线 : 程之间的通讯以及对线程根据优先级进行频繁的执行、挂起,却要由内核来做?那么这个 : 短时定时程序或无限循环程序到底有什么用呢?为什么不直接由内核来管理呢?直接由内 : 核来管理这些中断信号?还是你说的这个程序本身就是内核呢? : 我觉得这个流程就好像是 : ...................
-- =====================================================================
[FROM: 203.93.105.209] 发信人: flyking (小排), 信区: Embedded (Thu Nov 8 13:03:58 2001)
我认为中断程序中干的都是对实时要求很高的东西,比如解固定速率的编码,如果你在解出 一个编码之前把控制权交给内核,可能下次中断时前一个码系统还码分配到时间处理 所以这种情况必须中断中完成以后再交出cpu,所谓分层和前后台的目的就在这里,前台 是要实时的,后台有空再干,以此类推,相对的前台总比相对的后台优先处理, 比如一种数据结构:8位组成byte,16位组成dbyte,32位组成word,64位组成block,前一种 子帧总要先处理,处理完了就交给后台处理更高级的帧。当然实际中不用这么繁 【 在 hongchen (kissing-fire) 的大作中提到: 】 : 在中断服务程序里不对中断作处理,只是置一个标志位,或者写一个状态字,然后由一个 : 短时定时程序或无限循环程序来扫描这些标志位或状态字,再启动相应的处理程序,这不 : 就相当于把原本可以一次完成的事情,拆成了两段吗?肯定要引入新的变量,增加跳转时 : 间,也就相当于增加了系统被干扰的机会,跳转是程序最容易跑飞的时候,这样做的好处 : 是什么呢? : 如果一次发生了多个中断,那么启动的处理程序应该是相当于一个线程,或是一个任务, : 应该是独立运行的,这时这个短时定时程序或无限循环程序要启动多个线程,而此时多线 : 程之间的通讯以及对线程根据优先级进行频繁的执行、挂起,却要由内核来做?那么这个 : 短时定时程序或无限循环程序到底有什么用呢?为什么不直接由内核来管理呢?直接由内 : 核来管理这些中断信号?还是你说的这个程序本身就是内核呢? : 我觉得这个流程就好像是 : ...................
[FROM: 210.52.210.55] 发信人: neuronlee (机械化神经元), 信区: Embedded (Thu Nov 8 13:13:01 2001)
我想她说的是在没有RTOS的情况下的解决方案.由中断程序设置标志然后 退出,由其他程序接手是很正常的行为.无论有无RTOS这样做都有其道理, 应情况而易. 【 在 hongchen (kissing-fire) 的大作中提到: 】 : 在中断服务程序里不对中断作处理,只是置一个标志位,或者写一个状态字,然后由一个 : 短时定时程序或无限循环程序来扫描这些标志位或状态字,再启动相应的处理程序,这不 : 就相当于把原本可以一次完成的事情,拆成了两段吗?肯定要引入新的变量,增加跳转时 : 间,也就相当于增加了系统被干扰的机会,跳转是程序最容易跑飞的时候,这样做的好处 : 是什么呢? : 如果一次发生了多个中断,那么启动的处理程序应该是相当于一个线程,或是一个任务, : 应该是独立运行的,这时这个短时定时程序或无限循环程序要启动多个线程,而此时多线 : 程之间的通讯以及对线程根据优先级进行频繁的执行、挂起,却要由内核来做?那么这个 : 短时定时程序或无限循环程序到底有什么用呢?为什么不直接由内核来管理呢?直接由内 : 核来管理这些中断信号?还是你说的这个程序本身就是内核呢? : 我觉得这个流程就好像是 : ...................
--
[FROM: 66.75.17.82] 发信人: wheregone (猫猫), 信区: Embedded (Thu Nov 8 13:50:28 2001)
实际上 在中断里发消息或mail,物理上也是置标志位 对不对?
【 在 neuronlee (机械化神经元) 的大作中提到: 】 : 我想她说的是在没有RTOS的情况下的解决方案.由中断程序设置标志然后 : 退出,由其他程序接手是很正常的行为.无论有无RTOS这样做都有其道理, : 应情况而易.
-- ------------------------------------------------
[FROM: 202.120.8.69] 发信人: hongchen (kissing-fire), 信区: Embedded (Thu Nov 8 13:58:30 2001)
: 这根本就不是操作系统,只是最简单的单片机程序, : 扯这么多大理论出来干啥?受不了你 虽然你已经受不了我了 不过我还是想把这个问题弄明白 这样写单片机程序有什么好处。
中断1,2,3。。。->置位或写状态字<-无限循环,查询状态位,启动程序
能不能举个例子,说明一下这样写程序的理由呢?
--
[FROM: 166.111.60.132] 发信人: wheregone (猫猫), 信区: Embedded (Thu Nov 8 14:09:52 2001)
单线程编程只能这样处理多任务吧 比如你要处理键盘,要处理UART的数据,又要输出 只能在一个大循环里套小循环,特别是用户菜单 这个方法缺点多多: 两个中断之间如果处理时间不够,会得不到响应或延迟太 多
维护和升级太麻烦 不利于多人合作写代码
【 在 hongchen (kissing-fire) 的大作中提到: 】 : 虽然你已经受不了我了 : 不过我还是想把这个问题弄明白 : 这样写单片机程序有什么好处。 : 中断1,2,3。。。->置位或写状态字<-无限循环,查询状态位,启动程序 : 能不能举个例子,说明一下这样写程序的理由呢?
[FROM: 202.120.8.69] 发信人: hongchen (kissing-fire), 信区: Embedded (Thu Nov 8 16:58:57 2001)
【 在 wheregone (猫猫) 的大作中提到: 】 : 单线程编程只能这样处理多任务吧 : 比如你要处理键盘,要处理UART的数据,又要输出 : 只能在一个大循环里套小循环,特别是用户菜单 应该是使用短时定时器中断来查询键盘中断, 串口工作在中断方式 : 这个方法缺点多多: : 两个中断之间如果处理时间不够,会得不到响应或延迟太 : 多 : 维护和升级太麻烦 : 不利于多人合作写代码 我明白了,先把中断产生的信息和数据存储下来,然后再一一去执行, 可以避免没有响应,保证按优先级顺序执行。 这个方式可能提高了编程效率,和结构性,但是可能会带来跳转太多, 系统容易死机。 真是一个矛盾,要想提高编程效率,必然降低代码的执行效率。
--
[FROM: 166.111.60.132] 发信人: ncic (yiran), 信区: Embedded (Thu Nov 8 21:14:39 2001)
大面瓜说的是有道理,有依据的, 中断处理程序分成两部分可以更快更及时地的响应中断,更少地丢失中断信号 一般而言CPU在执行中断处理程序的时候是禁止中断的,因为这样可以避免编写 可重入的处理程序,如果此时允许中断,那么处理程序必须是可重入的,这在内核 代码中是很麻烦,很耗资源的事情。 要更快更即使地响应中断必须使真正的中断处理程序足够短,只做一些必须做 的事情,比如从外设读数据到缓冲区,这也可以叫做前台程序,而处理缓冲区数据 的工作则又后台程序完成,一般CPU在处理后台程序的时候是允许中断的。 Linux里也是这样的,它的中断处理程序有一个上半部和下半部机制,上半部和前台 程序类似,一般禁止中断,下半部类似于后台程序,允许中断。 在《Linux设备驱动程序》里有个例子,可以让并口拼命发中断(需要9,10脚短接) 中断处理程序用上下半部机制实现时的中断处理速度比普通方式实现快很多。 有些事情不是想当然就可以的,实际问题需要一些实际的经验和技巧。
在中断服务程序里不对中断作处理,只是置一个标志位,或者写一个状态字,然后由一个 短时定时程序或无限循环程序来扫描这些标志位或状态字,再启动相应的处理程序,这不 就相当于把原本可以一次完成的事情,拆成了两段吗?肯定要引入新的变量,增加跳转时 间,也就相当于增加了系统被干扰的机会,跳转是程序最容易跑飞的时候,这样做的好处 是什么呢? 如果一次发生了多个中断,那么启动的处理程序应该是相当于一个线程,或是一个任务, 应该是独立运行的,这时这个短时定时程序或无限循环程序要启动多个线程,而此时多线 程之间的通讯以及对线程根据优先级进行频繁的执行、挂起,却要由内核来做?那么这个
核来管理这些中断信号?还是你说的这个程序本身就是内核呢? 我觉得这个流程就好像是
中断信号1,2,3。。。->程序,得到标志位或状态字->启动线程->内核管理线程
那么为什么不直接
中断信号1,2,3。。。->内核->启动和管理线程
愚人之见。 请大家就这个问题深入探讨探讨吧!
--
[FROM: 166.111.33.82] 发信人: hongchen (kissing-fire), 信区: Embedded (Thu Nov 8 22:00:10 2001)
【 在 ncic (yiran) 的大作中提到: 】 : 大面瓜说的是有道理,有依据的, : 中断处理程序分成两部分可以更快更及时地的响应中断,更少地丢失中断信号 : 一般而言CPU在执行中断处理程序的时候是禁止中断的,因为这样可以避免编写 : 可重入的处理程序,如果此时允许中断,那么处理程序必须是可重入的,这在内核 : 代码中是很麻烦,很耗资源的事情。 内核是不是指嵌入式操作系统的内核? 还是泛指任何操作系统? 还是任何核心程序? : 要更快更即使地响应中断必须使真正的中断处理程序足够短,只做一些必须做 : 的事情,比如从外设读数据到缓冲区,这也可以叫做前台程序,而处理缓冲区数据 : 的工作则又后台程序完成,一般CPU在处理后台程序的时候是允许中断的。 : Linux里也是这样的,它的中断处理程序有一个上半部和下半部机制,上半部和前台 : 程序类似,一般禁止中断,下半部类似于后台程序,允许中断。 : 在《Linux设备驱动程序》里有个例子,可以让并口拼命发中断(需要9,10脚短接) 实际系统中恐怕不会出现这种情况吧, 肯定应该通过主系统精确定时来触发这种外部频繁事件吧 否则这种中断,恐怕没有哪个系统能承受得了,这么频繁的进行中断,系统不死机才怪!
: ................... 好久没有和人深入讨论问题了,真是觉得高兴!
--
[FROM: 166.111.60.132] 发信人: flyking (小排), 信区: Embedded (Thu Nov 8 22:58:28 2001)
我想内核应该是指操作系统,但是写这些程序时,就把他们想象成除此以外的 处理就行了,经确定时的问题肯定是不行的,因为任何外部中断都有可能随时发生 而很多必须立即做出响应的 【 在 hongchen (kissing-fire) 的大作中提到: 】 : 内核是不是指嵌入式操作系统的内核? : 还是泛指任何操作系统? : 还是任何核心程序? : 实际系统中恐怕不会出现这种情况吧, : 肯定应该通过主系统精确定时来触发这种外部频繁事件吧 : 否则这种中断,恐怕没有哪个系统能承受得了,这么频繁的进行中断,系统不死机才怪! : 好久没有和人深入讨论问题了,真是觉得高兴!
[FROM: 210.52.211.247] 发信人: wangyyff (郁闷的大面瓜), 信区: Embedded (Fri Nov 9 08:40:52 2001)
为什么频繁中断就会把系统搞死?说说看 精确定时?系统的实时性何在?
【 在 hongchen (kissing-fire) 的大作中提到: 】 : 内核是不是指嵌入式操作系统的内核? : 还是泛指任何操作系统? : 还是任何核心程序? : 实际系统中恐怕不会出现这种情况吧, : 肯定应该通过主系统精确定时来触发这种外部频繁事件吧 : 否则这种中断,恐怕没有哪个系统能承受得了,这么频繁的进行中断,系统不死机才怪! : 好久没有和人深入讨论问题了,真是觉得高兴!
[FROM: 203.93.105.209] 发信人: neuronlee (机械化神经元), 信区: Embedded (Fri Nov 9 11:02:25 2001)
我想你说的是进程间通信巴.各种通信机制不同,实现方法也不同. 在传统的UNIX中,发SIGNAL实际上就是在进程控制块中的数据结构 中置相应的位.但发消息就不太一样了,因为涉及到数据传输, 所以在进程内存空间分离的情况吓要进行内存拷贝,在许多嵌入式 操作系统中因为内存空间是统一的,所以仅传送指针就行了. 但中段有其特殊性,就是不能阻塞.这是极其重要的. 【 在 wheregone (猫猫) 的大作中提到: 】 : 实际上 在中断里发消息或mail,物理上也是置标志位 : 对不对?
[FROM: 66.75.17.82] 发信人: neuronlee (机械化神经元), 信区: Embedded (Fri Nov 9 11:04:15 2001)
他不过是在没OS的情况吓实现一个简单的调度程序而已. 【 在 hongchen (kissing-fire) 的大作中提到: 】 : 虽然你已经受不了我了 : 不过我还是想把这个问题弄明白 : 这样写单片机程序有什么好处。 : 中断1,2,3。。。->置位或写状态字<-无限循环,查询状态位,启动程序 : 能不能举个例子,说明一下这样写程序的理由呢?
[FROM: 66.75.17.82] 发信人: neuronlee (机械化神经元), 信区: Embedded (Fri Nov 9 11:10:44 2001)
是呀,定时时限太短空耗许多CPU时间,太长又不能保证及时响应.
: 为什么频繁中断就会把系统搞死?说说看 : 精确定时?系统的实时性何在?
[FROM: 66.75.17.82] 发信人: hongchen (kissing-fire), 信区: Embedded (Fri Nov 9 18:58:31 2001)
: 为什么频繁中断就会把系统搞死?说说看 这只是我个人的经验,因为以前做工控的时候,如果频繁中断,系统程序 很容易跑飞,而且一旦强电磁干扰来,使用中断程序比使用查询方式更容易 死机。不信你可以找个大电动机试试。大电动机的电磁 脉冲瞬间浪涌电流 导致的尖峰脉冲,不过是千伏级。而BC类设备电磁兼容性测试时,加的电压 可以到5000V。这时候程序如果是使用中断方式,很容易发生程序指针某位 翻转。但是如果使用顺序执行的程序,就不容易发生这种情况。而且现场 的控制方式往往使用数字电路,或者使用极低级的单片机来做核心的控制。 实际上就是按一个固定的流程来启动程序。 : 精确定时?系统的实时性何在? 频繁中断情况下,使用精确定时,当然可以保证系统的实时性,因为只有当 CPU需要外设工作,或者需要外设数据时,才会启动设备,所以由CPU根据预先 设定的工作流程,通过精确定时来启动外设,这样做比让外设频繁发送中断, 在系统的可靠性和稳定性上会好一些。当然如果只是消费类的普通民用设备, 你用中断和查询两者之间没有差别,只取决于你自己的爱好,或者为了团队 编程方便。 但是如果是一个工控项目,或者是象我这种高可靠性的设备,我想恐怕没有人 会使用频繁中断这种方式的。不信你可以去问问看。
--
[FROM: 166.111.60.132] 发信人: wangyyff (郁闷的大面瓜), 信区: Embedded (Mon Nov 12 08:27:40 2001)
【 在 hongchen (kissing-fire) 的大作中提到: 】 : 这只是我个人的经验,因为以前做工控的时候,如果频繁中断,系统程序 : 很容易跑飞,而且一旦强电磁干扰来,使用中断程序比使用查询方式更容易 : 死机。不信你可以找个大电动机试试。大电动机的电磁 脉冲瞬间浪涌电流 : 导致的尖峰脉冲,不过是千伏级。而BC类设备电磁兼容性测试时,加的电压 : 可以到5000V。这时候程序如果是使用中断方式,很容易发生程序指针某位 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ : 翻转。但是如果使用顺序执行的程序,就不容易发生这种情况。而且现场 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 说说看,为什么会这样?这个结论有什么理论依据?还是这个结论仅仅是你 的个人经验总结?中断操作的软件编写肯定是比关掉中断查询对程序员的要求 要高得多,所以……你有没有想过出现这种问题是因为你软件设计的问题? 别多心,我不是怎么怎么你,我自己在编写一些东东时也喜欢先关着中断试通 一些外设,然后再试着用中断来搞,毕竟在中断时需要考虑的东东太多。
: 的控制方式往往使用数字电路,或者使用极低级的单片机来做核心的控制。 : 实际上就是按一个固定的流程来启动程序。 : 频繁中断情况下,使用精确定时,当然可以保证系统的实时性,因为只有当 : CPU需要外设工作,或者需要外设数据时,才会启动设备, 我的天哪,如果每个做工控的人都这么考虑自己的设备,工控岂不是比PC还好搞? 不好意思,我还真没搞过工控,门外汉,不多嘴了^_^
: 所以由CPU根据预先 : 设定的工作流程,通过精确定时来启动外设,这样做比让外设频繁发送中断, : ...................
-- =====================================================================
[FROM: 203.93.105.209] 发信人: hongchen (kissing-fire), 信区: Embedded (Mon Nov 12 12:11:02 2001)
【 在 wangyyff (郁闷的大面瓜) 的大作中提到: 】 : ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ : ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ : 说说看,为什么会这样?这个结论有什么理论依据?还是这个结论仅仅是你 : 的个人经验总结?中断操作的软件编写肯定是比关掉中断查询对程序员的要求 : 要高得多,所以……你有没有想过出现这种问题是因为你软件设计的问题? : 别多心,我不是怎么怎么你,我自己在编写一些东东时也喜欢先关着中断试通 : 一些外设,然后再试着用中断来搞,毕竟在中断时需要考虑的东东太多。 为了搞清楚这个问题,我曾经把图书馆里所有相关的书籍,都翻了个编,然后把 手头上ADC的光盘中的所有应用资料与之相关的部分,都看了一遍。EMC问题可以 说是电路里最复杂的问题,虽然我一直都在这个问题上不断收集资料,但是仍然 不敢说就对这个问题有很好的理解,只能说入了一点门吧。 可能普通人很难想象,你的电路板放到一个大电动机旁边,平常工作的很好,但是 在大电动机启动瞬间,或者电磁继电器阵列开启瞬间,你的电路板总线上全是1, 还有,如果你使用地址线的低位,做地址选通,你可能经常访问不了你的外设, 因为经常这些位在随机翻动。 其实原因很简单,Ldi/dt,一个小的电感,任何导线,或者说电路中的任何东西都 有电感,而i=q/t=cu/t,di/dt=cdu/dt,任何电路中的东西都有电容,自己有节 电容,寄生电容,耦合电容,对其他东西有分布电容,或各种各样的杂散电容, 这些电容最终导致了位移电流的产生,这是你不管用什么样的屏蔽,都无法彻底去除 的,这个电流的变化,最终通过电感会产生电压。其实所有设备都有一个电冲击 上限,民用设备一般也就是1000多伏左右,一个1000多伏的电脉冲产生的电磁波, 就足以让你的电路板上某些总线,或数字电平,全为1了。 中断方式,你的程序指针会跳变,而且是硬件产生的突发性跳变,这也就意味着 无穷的频率分量,频带无限宽,因为这是一个冲击或阶跃,这个时候,虽然你的 电路可能正常时工作很好,但是在外界干扰和自身电磁波干扰下,某一位地址发生 翻转,这是完全可能的,虽然概率很低。理论上虽然这种概率很低,可是实际情况中, 这种概率一点也不低。一个月中间有那么一两次,你说是低还是高。对于我这行中 的监护仪,监护的都是要死的人,它一个月死机一两次,你说是高还是低? 但是顺序执行的程序,程序指针只是随主频逐个增加。相对而言,自身的干扰会 小一些。 以上仅仅是我的一些想法。因为实际中曾经出现过这样的问题,而且我老是遇到 设备死机的问题,还经常要去修,所以自己在这上面,下过一些功夫去琢磨。也就是 后来对于没有通过EMC检测的CPU是一点兴趣也没有。 至于程序问题,我觉得也有,因为不用嵌入式操作系统的监护仪,就特别皮实,而 用了嵌入式操作系统的监护仪就老死机。我就曾经想,是不是嵌入式操作系统降低 了设备的可靠性。因为嵌入式操作系统程序太过复杂,而且实际上不停的在中断程序, 启动程序,所以我认为这也是降低设备可靠性的一个原因。 为此,对嵌入式操作系统一直持怀疑态度。最近因为想到了解决 的方法,才开始考虑嵌入式系统这个方案了。 : 我的天哪,如果每个做工控的人都这么考虑自己的设备,工控岂不是比PC还好搞? : 不好意思,我还真没搞过工控,门外汉,不多嘴了^_^ 工控好不好搞,我举一个你最熟悉的例子。XX做的大型集装箱检测系统,为什么现在 装备的不多,一个很重要的原因,就是因为XX的系统在自己的公司,检测什么问题都 没有,可是一装到人家那里,先是设备不工作,接着就是三天两头出问题,以至于要 请我认识的一个人,去现场指导,而我认识的这个人,其实是个销售,因为看的多了, 有很丰富的实际经验。人家问我,说为什么XX做的东西,你们自己都搞不定! 我无言以对! 工控和PC最大的区别是,工控是一个随时随地都要保证可靠工作的东西,而PC是一个 随时随地都可能死机的东西。 就好像我做的这个东西,随时随地都得考虑,它是不是能稳定可靠的工作,死机了 怎么办,出故障怎么办?PC很好办,重启,大不了按电源,可是好多设备,尤其是 军用的,工控的,医用的,你不能这么办? 这也就是为什么学生时候做的东西,被人称之为“玩意”,而不是产品,一个真实的 产品,它可能很简单,但是为了得到这个简单的设计,可能几代人的努力,仅仅只是 为了得到它! 说得太多了,别见怪啊! 愚人之见!
--
[FROM: 166.111.60.132] 发信人: wangyyff (郁闷的大面瓜), 信区: Embedded (Mon Nov 12 12:34:42 2001)
原来中断处理主要是因为程序跳转引起的总线信号变化而使得系统不稳定呀! 那么你的所说的没有中断的顺序执行就是按存储器地址由低到高的一个指令一个指令 地运行罗?这样好像是不错哦。 不过当程序运行到最高地址时,是不是就停着了?还有如果程序里有for呀,if呀等等 类似的需要跳转的语句时是不是也容易造成程序跑飞呀?那我们是不是应该尽量避免 这些语句呀?不过如果没有这些语句好像程序很难编呀,大侠你是怎么解决的呀?
--
[FROM: 203.93.105.209] 发信人: psun (sam), 信区: Embedded (Mon Nov 12 12:47:24 2001)
你说系统的抗干扰性能,这没错,但是不是就那么绝对, 比如用嵌入式操作系统,系统的抗干扰性能就不好,不用就好, 如果真象你说的那么严重的话,即使程序是顺序执行的, 读指令还是会读错吧,读写数据还是会出错吧,那我们大家什么都不用搞了, EMC问题不是这么就可以解决的。 【 在 hongchen (kissing-fire) 的大作中提到: 】 : 为了搞清楚这个问题,我曾经把图书馆里所有相关的书籍,都翻了个编,然后把 : 手头上ADC的光盘中的所有应用资料与之相关的部分,都看了一遍。EMC问题可以 : 说是电路里最复杂的问题,虽然我一直都在这个问题上不断收集资料,但是仍然 : 不敢说就对这个问题有很好的理解,只能说入了一点门吧。 : 可能普通人很难想象,你的电路板放到一个大电动机旁边,平常工作的很好,但是 : 在大电动机启动瞬间,或者电磁继电器阵列开启瞬间,你的电路板总线上全是1, : 还有,如果你使用地址线的低位,做地址选通,你可能经常访问不了你的外设, : 因为经常这些位在随机翻动。 : 其实原因很简单,Ldi/dt,一个小的电感,任何导线,或者说电路中的任何东西都 : 有电感,而i=q/t=cu/t,di/dt=cdu/dt,任何电路中的东西都有电容,自己有节 : 电容,寄生电容,耦合电容,对其他东西有分布电容,或各种各样的杂散电容, : ...................
--
[FROM: 203.93.105.209] 发信人: click (click), 信区: Embedded (Mon Nov 12 12:55:11 2001)
其实在cpu的实现中,中断和普通的branch,jump指令并没有什么区别,
都只是改变一下次的取指地址,然后设置某些特殊寄存器,在一个同步
cpu中,所有的寄存器改变都是由时钟同步的,在沿触发之前都必须有
一定的setup稳定时间的。因此我想没有你所说的积存器突然翻转的问题,
除非你的电路本身就不符合cpu的时序要求。
--
[FROM: 166.111.156.181] 发信人: hongchen (kissing-fire), 信区: Embedded Mon Nov 12 19:32:55 2001)
【 在 wangyyff (郁闷的大面瓜) 的大作中提到: 】 : 原来中断处理主要是因为程序跳转引起的总线信号变化而使得系统不稳定呀! : 那么你的所说的没有中断的顺序执行就是按存储器地址由低到高的一个指令一个指令 : 地运行罗?这样好像是不错哦。 : 不过当程序运行到最高地址时,是不是就停着了?还有如果程序里有for呀,if呀等等 : 类似的需要跳转的语句时是不是也容易造成程序跑飞呀?那我们是不是应该尽量避免 : 这些语句呀?不过如果没有这些语句好像程序很难编呀,大侠你是怎么解决的呀? 我当然不是说所有需要跳转的指令都不可以用,我觉得你有点钻牛角尖。 中断这种方式CPU到底是怎么取指的,CPU芯片内部电流怎么流的,我也不知道,但是可以 肯定的是,中断方式取指与平常的跳转肯定不是一样的。一定会在芯片内部产生不同于 平常程序指针只是简单的增加所产生的电磁波,而且此时由于节电容和各种杂散电容导致 的IO电流变化,肯定不同于普通的跳转。 我曾经用一个很简单的程序去试过。查询方式就是比中断方式稳定。 我在前一篇文章里也曾经说过,如果你只是做民用的东西,你不必在意。
--
[FROM: 166.111.60.132] 发信人: hongchen (kissing-fire), 信区: Embedded (Mon Nov 12 19:43:02 2001)
【 在 psun (sam) 的大作中提到: 】 : 你说系统的抗干扰性能,这没错,但是不是就那么绝对, : 比如用嵌入式操作系统,系统的抗干扰性能就不好,不用就好, 我不是说不用就好,也没有说用就好,什么问题都不是绝对的,而且对于民用 的东西,追求的是界面的个性化以及美观,即便经常死机,你也能忍受。Windows 老死机,你不也经常在用吗?也没有见你去用linux吧! : 如果真象你说的那么严重的话,即使程序是顺序执行的, : 读指令还是会读错吧,读写数据还是会出错吧,那我们大家什么都不用搞了, 但是二者出错的概率会是一样的,那你怎么解释使用嵌入式操作系统的监护仪 在医院倒一次闸的时候,一次死机18台呢?而另一家医院用的是一个根本不使用 嵌入式系统的单片机系统的监护仪,却200台很少坏,也很少死机。 : EMC问题不是这么就可以解决的。 EMC问题当然不是这样就可以解决的,EMC问题是一个综合问题,所以在我的新系统 里,即便使用Vxworks,也还是会使用工控里最老土的方法,来提高系统的稳定性。 但是不可否认的是,使用顺序执行的程序,同时辅以外部的监控,可以有效地保证 程序不跑飞,而且即便跑飞,也可以迅速回到上一个程序块。 我再举一个实际的例子。如果你的程序ROM没有用满,你怎么办? 日本的一个仪器的做法,是将程序分片,在片间加上判断语句,如果程序是跑飞的, 可以根据引导自动返回最近的程序块,整个程序依据顺序执行而分成若干片。 人们都说,汇编语言是不可以结构化的,可是任何语言都可以结构化编程,关键在于 你会不会动脑筋。
--
[FROM: 166.111.60.132] 发信人: hongchen (kissing-fire), 信区: Embedded (Mon Nov 12 19:48:57 2001)
【 在 click (click) 的大作中提到: 】 : 其实在cpu的实现中,中断和普通的branch,jump指令并没有什么区别, : 都只是改变一下次的取指地址,然后设置某些特殊寄存器,在一个同步 : cpu中,所有的寄存器改变都是由时钟同步的,在沿触发之前都必须有 : 一定的setup稳定时间的。因此我想没有你所说的积存器突然翻转的问题, : 除非你的电路本身就不符合cpu的时序要求。 我不这么认为,在VHDL语言中,用FPGA实现CPU的功能,如北大和中科院的做法, 那实现的只是CPU的功能,而不是真正的CPU,真正CPU的内部,在中断、取指和跳转, 以及普通程序指针累加的过程中,内部电流怎么流的,内部各种节电容,杂散电容 电量导致的瞬间电流变化,怎么会是一样的。如果是一样的,那么就没有必要设计 EMC的单片机了。 而且你说的是CPU按时序动作,如果CPU一切都按你设计的那样,那么它怎么可能死机?
【 在 hongchen (kissing-fire) 的大作中提到: 】 : 我不这么认为,在VHDL语言中,用FPGA实现CPU的功能,如北大和中科院的做法, : 那实现的只是CPU的功能,而不是真正的CPU,真正CPU的内部,在中断、取指和跳转, : 以及普通程序指针累加的过程中,内部电流怎么流的,内部各种节电容,杂散电容 : 电量导致的瞬间电流变化,怎么会是一样的。如果是一样的,那么就没有必要设计 : EMC的单片机了。 : 而且你说的是CPU按时序动作,如果CPU一切都按你设计的那样,那么它怎么可能死机?
-- ------------------------------------------------ [FROM: 202.120.8.69] 发信人: wheregone (猫猫), 信区: Embedded Mon Nov 12 20:59:59 2001)
NT, linux中断够多了吧,照样能几个月不死
OS也有好坏的说,
电路设计有好坏 CPU也有好坏的说, 板子设计也有好坏的说
CPU一般降额使用的时候是很安全的 关键看程序(OS)设计的好坏 OS不一定要有定时器中断
如果这样考虑,可能中国的火箭肯定到现在还没设计出来 以前不是说过用的就 INTEL 386吗
做产品和做实验室样板的确不一样 (其实我觉得产品化这工作不应该由设计人员来做) 不过想想条件,我觉得学生还是蛮不容易的
喂-------猫猫,你还在瞎扯哪------
【 在 hongchen (kissing-fire) 的大作中提到: 】 : 我当然不是说所有需要跳转的指令都不可以用,我觉得你有点钻牛角尖。 : 中断这种方式CPU到底是怎么取指的,CPU芯片内部电流怎么流的,我也不知道,但是可以 : 肯定的是,中断方式取指与平常的跳转肯定不是一样的。一定会在芯片内部产生不同于 : 平常程序指针只是简单的增加所产生的电磁波,而且此时由于节电容和各种杂散电容导致 : 的IO电流变化,肯定不同于普通的跳转。 : 我曾经用一个很简单的程序去试过。查询方式就是比中断方式稳定。 : 我在前一篇文章里也曾经说过,如果你只是做民用的东西,你不必在意。
-- ------------------------------------------------
[FROM: 202.120.8.69] 发信人: click (click), 信区: Embedded (Mon Nov 12 22:51:40 2001)
cpu设计过程中都要进行时序验证的,你所说的什么电容都已经包含在
时序里面了,不同的指令电路的电流当然不一样了,只要寄存器的值保持稳定,
功能当然是正常的了。之所以要设计emc的弹片机是因为程序的运行,无论是
中断的还是轮训的都会受到影响,否则为什么要设计emc的弹片机。
至于系统为什么会死机,原因很多,温度的过高过低,外界的强干扰,都会引起
电路特性的变化,最终导致寄存器的变化,导致死机。但是这对于中断和轮训都是
等概率事件。
你可以看国外用在航天等的一些系统会屏蔽除时钟中断外的其他中断,
那是为了防止频繁突发中断带来的系统性能的下降和特定任务时延的不确定性,
从来没有说什么防止不稳定性的。
【 在 hongchen (kissing-fire) 的大作中提到: 】 : 我不这么认为,在VHDL语言中,用FPGA实现CPU的功能,如北大和中科院的做法, : 那实现的只是CPU的功能,而不是真正的CPU,真正CPU的内部,在中断、取指和跳转, : 以及普通程序指针累加的过程中,内部电流怎么流的,内部各种节电容,杂散电容 : 电量导致的瞬间电流变化,怎么会是一样的。如果是一样的,那么就没有必要设计 : EMC的单片机了。 : 而且你说的是CPU按时序动作,如果CPU一切都按你设计的那样,那么它怎么可能死机?
--
[FROM: 166.111.156.181] 发信人: hongchen (kissing-fire), 信区: Embedded (Mon Nov 12 23:12:54 2001)
【 在 wheregone (猫猫) 的大作中提到: 】 : 还是自己用三极管搭CPU吧,这样放心了 我可不是那个意思 可靠级别不同,当然得使用不同的元件,使用不同的设计思想, 有些工控系统中,最核心的东西都还是用数字电路搭的呢?
--
[FROM: 166.111.185.198] 发信人: hongchen (kissing-fire), 信区: Embedded (Mon Nov 12 23:15:32 2001)
【 在 wheregone (猫猫) 的大作中提到: 】 : NT, linux中断够多了吧,照样能几个月不死 它的中断和CPU硬件中断可不是一回事 : OS也有好坏的说, : 电路设计有好坏 : CPU也有好坏的说, : 板子设计也有好坏的说 : CPU一般降额使用的时候是很安全的 : 关键看程序(OS)设计的好坏 是啊 : OS不一定要有定时器中断 : 如果这样考虑,可能中国的火箭肯定到现在还没设计出来 : 以前不是说过用的就 INTEL 386吗 最早用的是z80呢,那是中国第一种自己做的单片机,或者CPU : 做产品和做实验室样板的确不一样 : ...................
--
[FROM: 166.111.185.198] 发信人: hongchen (kissing-fire), 信区: Embedded (Mon Nov 12 23:30:45 2001)
【 在 click (click) 的大作中提到: 】 : cpu设计过程中都要进行时序验证的,你所说的什么电容都已经包含在 : 时序里面了,不同的指令电路的电流当然不一样了,只要寄存器的值保持稳定, 不可能,虽然我不懂,但是时序验证不可能包括所有的东西! 而且我可以告诉你,Intel的CPU设计软件是完全自己研发的,而且针对不同的CPU 设计都会做不同的修改,不可能是你说的一个简简单单的时序验证就可以解决一切 问题的! 功能当然是正常的了。之所以要设计emc的弹片机是因为程序的运行,无论是 : 中断的还是轮训的都会受到影响,否则为什么要设计emc的弹片机。 设计EMC的单片机是为了降低芯片内的电流回路面积,以Philips的EMC单片机为例, 设计4个VDDGND引脚对,那是为了降低单片机内部的电流回路面积。 我只是根据我自己的经验,中断方式比查询方式稳定一些,信不信由你! 反正我自己一直尽量避免使用中断。 : 至于系统为什么会死机,原因很多,温度的过高过低,外界的强干扰,都会引起 : 电路特性的变化,最终导致寄存器的变化,导致死机。但是这对于中断和轮训都是 : 等概率事件。 是吗?谁统计的? : 你可以看国外用在航天等的一些系统会屏蔽除时钟中断外的其他中断, : 那是为了防止频繁突发中断带来的系统性能的下降和特定任务时延的不确定性, : 从来没有说什么防止不稳定性的。 这还不是防止不稳定性?系统性能下降难道是稳定吗? 清华的小卫星不是就用VHDL引导程序顺序行,没有使用中断来触发程序,那是工控中最常 见的思路,将程序分解成顺序块,使用流程标志,通过外部系统监控程序是否跑飞
--
[FROM: 166.111.185.198] 发信人: click (click), 信区: Embedded (Tue Nov 13 00:10:10 2001)
一般ic设计的时序包括功能仿真,综合后仿真,layout后仿真,spice仿真,
这可不是简简单单的,几乎就是ic设计过程中最重要的部分了。
我说的系统性能的下降,是指当中断发生很频繁时,会导致寄存器不停的换进
换出,结果cpu很多时候都在做无用功。如果用轮训的话,要想满足高负载的情况,
则必须把轮训的周期设的很短,结果即使没有负载,系统的性能也会低的可怜的,
系统当然是稳定的了,但是能干什么事呢?
【 在 hongchen (kissing-fire) 的大作中提到: 】 : 不可能,虽然我不懂,但是时序验证不可能包括所有的东西! : 而且我可以告诉你,Intel的CPU设计软件是完全自己研发的,而且针对不同的CPU : 设计都会做不同的修改,不可能是你说的一个简简单单的时序验证就可以解决一切 : 问题的! : 功能当然是正常的了。之所以要设计emc的弹片机是因为程序的运行,无论是 : 设计EMC的单片机是为了降低芯片内的电流回路面积,以Philips的EMC单片机为例, : 设计4个VDDGND引脚对,那是为了降低单片机内部的电流回路面积。 : 我只是根据我自己的经验,中断方式比查询方式稳定一些,信不信由你! : 反正我自己一直尽量避免使用中断。 : 是吗?谁统计的? : 这还不是防止不稳定性?系统性能下降难道是稳定吗? : ...................
--
[FROM: 131.107.3.12] 发信人: wheregone (猫猫), 信区: Embedded (Tue Nov 13 09:18:47 2001)
IC设计的确是后期测试最最重要 华邦的PARISC就是省略了很多后期测试,才敢卖如此便宜 如果没记错的话,一个32位CPU的后期测试费用是100万 美圆 EECHINA上好象有的说的
【 在 click (click) 的大作中提到: 】 : 一般ic设计的时序包括功能仿真,综合后仿真,layout后仿真,spice仿真, : 这可不是简简单单的,几乎就是ic设计过程中最重要的部分了。 : 我说的系统性能的下降,是指当中断发生很频繁时,会导致寄存器不停的换进 : 换出,结果cpu很多时候都在做无用功。如果用轮训的话,要想满足高负载的情况, : 则必须把轮训的周期设的很短,结果即使没有负载,系统的性能也会低的可怜的, : 系统当然是稳定的了,但是能干什么事呢?
--
[FROM: 166.111.60.132] 发信人: wheregone (猫猫), 信区: Embedded (Tue Nov 13 09:39:23 2001)
那时候就做了一个74LS74吧
【 在 hongchen (kissing-fire) 的大作中提到: 】 : 你们真的是不知道,还是假的不知道! : 最早做航天的用的就是z80, : 为了不进口,所以才自己造的 : 自己不知道,也没有必要这样啊!!!
-- ------------------------------------------------
[FROM: 202.120.8.69] 发信人: psun (sam), 信区: Embedded (Tue Nov 13 09:39:39 2001)
如果你用“抄”或者别的什么,而不是用“做” 大家就都不会误解了。呵呵。 【 在 hongchen (kissing-fire) 的大作中提到: 】 : z80是80年代就有了 : 可是我也没有说 : 中国在80年代就把z80造出来了 : 你们怎么一个个都这样!!!
--
[FROM: 203.93.105.218] 发信人: wheregone (猫猫), 信区: Embedded (Tue Nov 13 09:43:13 2001)
都是X的意思
【 在 psun (sam) 的大作中提到: 】 : 如果你用“抄”或者别的什么,而不是用“做” : 大家就都不会误解了。呵呵。
-- ------------------------------------------------
[FROM: 202.120.8.69] 发信人: hongchen (kissing-fire), 信区: Embedded (Tue Nov 13 09:45:11 2001)
【 在 click (click) 的大作中提到: 】 : 一般ic设计的时序包括功能仿真,综合后仿真,layout后仿真,spice仿真, : 这可不是简简单单的,几乎就是ic设计过程中最重要的部分了。 那只是你能见得到的工具,如果仅仅是你见到的那些工具,干那些事情,中国的CPU 早就有了!你知道怎么设计IC吗?用VHDL写个东西,FPGA一流片,然后就对外说, 我造出CPU来了!人家Intel每年投入那么多钱,研究新的软件干嘛? : 我说的系统性能的下降,是指当中断发生很频繁时,会导致寄存器不停的换进 你这么设计你的系统吗?不停地产生中断?你为什么不给它设计好一个时序,定时启动, 定时读取,这样多省事呢? : 换出,结果cpu很多时候都在做无用功。如果用轮训的话,要想满足高负载的情况, : 则必须把轮训的周期设的很短,结果即使没有负载,系统的性能也会低的可怜的, 系统性能低的可怜,那是你这种设计导致的结果。 : 系统当然是稳定的了,但是能干什么事呢? 系统如果都不稳定,系统能干什么? 不过还是我那句话,你是在哪个领域内,干什么用,你就设计什么样的系统,任何事情 都不可能面面俱到,有利就有弊,关键是看利大于弊,还是弊大于利,我一再强调,如果 只是民用产品,你不需要去注意什么可靠性啦,死机就死机了,重启不得了吗,可是对于 军用,工业用,医用,你不能这样,所以才出现了很多,针对现场应用和各种特殊应用 下的解决方法。用查询代替中断,就是其中的一种。
我建议你把我发的文章好好看一下,不要断章取意 轮询难道就是像你说的那样吗?如果你这样做轮询,那只能说明你的水平 在前面我就说了,这时候应该是通过主机精确定时,来启动外设。这样可以避免使用 中断,真是不知道你们为什么,一个个这么绝对,好像轮询就只能是那样,中断就 只能是那样! 受不了你们!
--
[FROM: 166.111.60.132] 发信人: hongchen (kissing-fire), 信区: Embedded (Tue Nov 13 09:45:57 2001)
【 在 wheregone (猫猫) 的大作中提到: 】 : 那时候就做了一个74LS74吧 你做的吧!
--
[FROM: 166.111.60.132] 发信人: hongchen (kissing-fire), 信区: Embedded (Tue Nov 13 09:46:44 2001)
【 在 psun (sam) 的大作中提到: 】 : 如果你用“抄”或者别的什么,而不是用“做” : 大家就都不会误解了。呵呵。 我的本意就是这样,呵呵 因为咱们最擅长的不就是这个吗^.^
--
[FROM: 166.111.60.132] 发信人: neuronlee (机械化神经元), 信区: Embedded (Tue Nov 13 10:06:46 2001)
同意,抗干扰要有抗干扰的解决方案,程序就是程序,讲究的是 完备性,健壮性,可维护性,可重用性等.想从代码里解决电磁干 扰不对路.就象当初有人责怪我们的程序没有抗死机功能一样. 如果要在程序里考虑电磁干扰的话,那你为什么不考虑CPU因强大 电磁脉冲产生的电流而烧毁的情况呢? 你就得假设内存里的一切 都是错的,IO输入也时正确不正确的,中断在不该来的时候来了... 这程序你想怎么编?
【 在 psun (sam) 的大作中提到: 】 : 你说系统的抗干扰性能,这没错,但是不是就那么绝对, : 比如用嵌入式操作系统,系统的抗干扰性能就不好,不用就好, : 如果真象你说的那么严重的话,即使程序是顺序执行的, : 读指令还是会读错吧,读写数据还是会出错吧,那我们大家什么都不用搞了, : EMC问题不是这么就可以解决的。
--
[FROM: 66.75.17.82] 发信人: neuronlee (机械化神经元), 信区: Embedded (Tue Nov 13 10:12:12 2001)
我想同JUMP等指令还是有所区别的.JUMP的吓一条指令地址是在指令操作 数里给出的,而中断很可能要趋查中断向量表,并且如同你说的要改变 一些特殊的寄存器.他说的是不是指因为电磁干扰造成的寄存器翻转? 【 在 click (click) 的大作中提到: 】 : 其实在cpu的实现中,中断和普通的branch,jump指令并没有什么区别, : 都只是改变一下次的取指地址,然后设置某些特殊寄存器,在一个同步 : cpu中,所有的寄存器改变都是由时钟同步的,在沿触发之前都必须有 : 一定的setup稳定时间的。因此我想没有你所说的积存器突然翻转的问题, : 除非你的电路本身就不符合cpu的时序要求。
--
[FROM: 66.75.17.82] 发信人: neuronlee (机械化神经元), 信区: Embedded (Tue Nov 13 10:19:38 2001)
中断通过差中断向量表娶指,不过就是内存存取,要事这也有问题,很多 东西都有问题了. 【 在 hongchen (kissing-fire) 的大作中提到: 】 : 我当然不是说所有需要跳转的指令都不可以用,我觉得你有点钻牛角尖。 : 中断这种方式CPU到底是怎么取指的,CPU芯片内部电流怎么流的,我也不知道,但是可以 : 肯定的是,中断方式取指与平常的跳转肯定不是一样的。一定会在芯片内部产生不同于 : 平常程序指针只是简单的增加所产生的电磁波,而且此时由于节电容和各种杂散电容导致 : 的IO电流变化,肯定不同于普通的跳转。 : 我曾经用一个很简单的程序去试过。查询方式就是比中断方式稳定。 : 我在前一篇文章里也曾经说过,如果你只是做民用的东西,你不必在意。
--
[FROM: 66.75.17.82] 发信人: neuronlee (机械化神经元), 信区: Embedded (Tue Nov 13 10:36:08 2001)
我想你说的东西是微电的范畴,但在编程序时还要考虑这些东西不是太 头疼了嘛? 【 在 hongchen (kissing-fire) 的大作中提到: 】 : 我不这么认为,在VHDL语言中,用FPGA实现CPU的功能,如北大和中科院的做法, : 那实现的只是CPU的功能,而不是真正的CPU,真正CPU的内部,在中断、取指和跳转, : 以及普通程序指针累加的过程中,内部电流怎么流的,内部各种节电容,杂散电容 : 电量导致的瞬间电流变化,怎么会是一样的。如果是一样的,那么就没有必要设计 : EMC的单片机了。 : 而且你说的是CPU按时序动作,如果CPU一切都按你设计的那样,那么它怎么可能死机?
[FROM: 66.75.17.82] 发信人: SDRAM (Compute&Control~~~再回首), 信区: Embedded (Wed Nov 14 00:46:11 2001)
【 在 hongchen (kissing-fire) 的大作中提到: 】 : 短时定时程序或无限循环程序来扫描这些标志位或状态字,再启动相应的处理程序,这不 : 就相当于把原本可以一次完成的事情,拆成了两段吗?肯定要引入新的变量,增加跳转时 : 间,也就相当于增加了系统被干扰的机会,跳转是程序最容易跑飞的时候,这样做的好处 : 是什么呢?
其实这么做的目的是减小中断屏蔽时间,从而提高实时性能。
俺不知道跳传和跑飞有什么关系啊。正常执行的时候程序指针也是跳的吧, 不过好象一次只跳一个字。:-P 不管数据还是地址,错一位就足够要命的了。
不过中断多了也有麻烦,比如寄存器的保存和切换,高速CPU的流水线排空。
: 如果一次发生了多个中断,那么启动的处理程序应该是相当于一个线程,或是一个任务, : 应该是独立运行的,这时这个短时定时程序或无限循环程序要启动多个线程,而此时多线 : 程之间的通讯以及对线程根据优先级进行频繁的执行、挂起,却要由内核来做?那么这个 : 短时定时程序或无限循环程序到底有什么用呢?为什么不直接由内核来管理呢?直接由内 : 核来管理这些中断信号?还是你说的这个程序本身就是内核呢? : 我觉得这个流程就好像是 :
如果从线程或任务的角度考虑,无论是中断服务程序,还是后来的响应程序, 它们都是要通过某种方式和内核联系的。通常过程是:
中断 -> 中断程序入口(内核) -> 中断处理(其间很可能还要和内核打交道若干次) -> 中断程序出口(内核可以在此进行一次任务调度) -> 相应的任务开始执行 ...
: 中断信号1,2,3。。。->程序,得到标志位或状态字->启动线程->内核管理线程 : : 那么为什么不直接 : : 中断信号1,2,3。。。->内核->启动和管理线程 :
[FROM: 128.240.16.82] 发信人: stone (石头★又是秋天~开始流浪), 信区: Embedded (Thu Nov 15 11:04:27 2001)
呵呵,如果芯片有问题,电磁干扰不对路,那么就不做产品了么? 尤其是做芯片兼自主开发的公司,做一次芯片不容易,花上几百几千 万美刀也不一定能保证万无一失,这种情况下,只好采用程序补救 的方式。所以,我觉得hongchen兄说的还是有一定的道理。 没办法的情况下,只好如此将就了。 【 在 neuronlee (机械化神经元) 的大作中提到: 】 : 同意,抗干扰要有抗干扰的解决方案,程序就是程序,讲究的是 : 完备性,健壮性,可维护性,可重用性等.想从代码里解决电磁干 : 扰不对路.就象当初有人责怪我们的程序没有抗死机功能一样. : 如果要在程序里考虑电磁干扰的话,那你为什么不考虑CPU因强大 : 电磁脉冲产生的电流而烧毁的情况呢? 你就得假设内存里的一切 : 都是错的,IO输入也时正确不正确的,中断在不该来的时候来了... : 这程序你想怎么编?
--
[FROM: 166.111.64.227] 发信人: neuronlee (机械化神经元), 信区: Embedded (Thu Nov 15 12:18:02 2001)
芯片的BUG同电磁干扰不是一码事,芯片逻辑功能设计上的BUG当然可通过 程序来补救,我是说电磁干扰的问题. 【 在 stone (石头★又是秋天~开始流浪) 的大作中提到: 】 : 呵呵,如果芯片有问题,电磁干扰不对路,那么就不做产品了么? : 尤其是做芯片兼自主开发的公司,做一次芯片不容易,花上几百几千 : 万美刀也不一定能保证万无一失,这种情况下,只好采用程序补救 : 的方式。所以,我觉得hongchen兄说的还是有一定的道理。 : 没办法的情况下,只好如此将就了。
[FROM: 66.75.17.82] 发信人: gzmr (天空), 信区: Embedded (Sat Nov 17 13:23:52 2001)
举个例子 采用DSP进行语音压缩编码 DSP的速度很快,而外部是每过20ms才收集满一帧数据 这个时候怎么办呢? 外部的终端程序是每1/8000秒发生一次,采样一次 载采样的中断程序里面,就要设一个count,表示是否采满160个数 如果是的话,就把一个flag置一, 这个程序就相当于前台程序 而DSP程序里面就设一个循环,查询这个flag,如果为1,就执行相应的处理程序 这个就相当于后台程序乐 其实整个的前后台程序的划分,并不是单单对如何处理中断而言的, 它可以说是解决方案 对于这个例子,单个的中断如何处理,随便你的 但是实际上是要满足一种条件(发生了160次中断) 这个时候不管你用什么方式,都是用了前后台的概念 【 在 hongchen (kissing-fire) 的大作中提到: 】 : 虽然你已经受不了我了 : 不过我还是想把这个问题弄明白 : 这样写单片机程序有什么好处。 : 中断1,2,3。。。->置位或写状态字<-无限循环,查询状态位,启动程序 : 能不能举个例子,说明一下这样写程序的理由呢? |