📄 83.htm
字号:
: 短时定时程序或无限循环程序来扫描这些标志位或状态字,再启动相应的处理程序,这不 <br>
: 就相当于把原本可以一次完成的事情,拆成了两段吗?肯定要引入新的变量,增加跳转时 <br>
: 间,也就相当于增加了系统被干扰的机会,跳转是程序最容易跑飞的时候,这样做的好处 <br>
: 是什么呢? <br>
: 如果一次发生了多个中断,那么启动的处理程序应该是相当于一个线程,或是一个任务, <br>
: 应该是独立运行的,这时这个短时定时程序或无限循环程序要启动多个线程,而此时多线 <br>
: 程之间的通讯以及对线程根据优先级进行频繁的执行、挂起,却要由内核来做?那么这个 <br>
: 短时定时程序或无限循环程序到底有什么用呢?为什么不直接由内核来管理呢?直接由内 <br>
: 核来管理这些中断信号?还是你说的这个程序本身就是内核呢? <br>
: 我觉得这个流程就好像是 <br>
: ................... <br>
<br>
-- <br>
According to the system log, windows had already started, but <br>
it seems to be murdered mysteriously! :-DDDDDDDD <br>
<br>
<br>
※ 来源:·BBS 水木清华站 smth.org·[FROM: 66.75.17.82] <br>
发信人: wheregone (猫猫), 信区: Embedded <br>
标 题: Re: 又一道嵌入试题! <br>
发信站: BBS 水木清华站 (Thu Nov 8 13:50:28 2001) <br>
<br>
<br>
实际上 在中断里发消息或mail,物理上也是置标志位 <br>
对不对? <br>
<br>
<br>
【 在 neuronlee (机械化神经元) 的大作中提到: 】 <br>
: 我想她说的是在没有RTOS的情况下的解决方案.由中断程序设置标志然后 <br>
: 退出,由其他程序接手是很正常的行为.无论有无RTOS这样做都有其道理, <br>
: 应情况而易. <br>
<br>
<br>
-- <br>
the longing for love, the search for knowledge, <br>
and unbearable pity for the suffering of mankind. <br>
------------------------------------------------ <br>
<br>
<br>
※ 来源:·BBS 水木清华站 smth.org·[FROM: 202.120.8.69] <br>
发信人: hongchen (kissing-fire), 信区: Embedded <br>
标 题: Re: 又一道嵌入试题! <br>
发信站: BBS 水木清华站 (Thu Nov 8 13:58:30 2001) <br>
<br>
<br>
<br>
【 在 wangyyff (郁闷的大面瓜) 的大作中提到: 】 <br>
: 这根本就不是操作系统,只是最简单的单片机程序, <br>
: 扯这么多大理论出来干啥?受不了你 <br>
虽然你已经受不了我了 <br>
不过我还是想把这个问题弄明白 <br>
这样写单片机程序有什么好处。 <br>
<br>
中断1,2,3。。。->置位或写状态字<-无限循环,查询状态位,启动程序 <br>
<br>
能不能举个例子,说明一下这样写程序的理由呢? <br>
<br>
-- <br>
<br>
※ 来源:·BBS 水木清华站 smth.org·[FROM: 166.111.60.132] <br>
发信人: wheregone (猫猫), 信区: Embedded <br>
标 题: Re: 又一道嵌入试题! <br>
发信站: BBS 水木清华站 (Thu Nov 8 14:09:52 2001) <br>
<br>
单线程编程只能这样处理多任务吧 <br>
比如你要处理键盘,要处理UART的数据,又要输出 <br>
只能在一个大循环里套小循环,特别是用户菜单 <br>
这个方法缺点多多: <br>
两个中断之间如果处理时间不够,会得不到响应或延迟太 <br>
多 <br>
<br>
维护和升级太麻烦 <br>
不利于多人合作写代码 <br>
<br>
<br>
<br>
【 在 hongchen (kissing-fire) 的大作中提到: 】 <br>
: 虽然你已经受不了我了 <br>
: 不过我还是想把这个问题弄明白 <br>
: 这样写单片机程序有什么好处。 <br>
: 中断1,2,3。。。->置位或写状态字<-无限循环,查询状态位,启动程序 <br>
: 能不能举个例子,说明一下这样写程序的理由呢? <br>
<br>
<br>
-- <br>
the longing for love, the search for knowledge, <br>
and unbearable pity for the suffering of mankind. <br>
------------------------------------------------ <br>
<br>
<br>
<br>
※ 来源:·BBS 水木清华站 smth.org·[FROM: 202.120.8.69] <br>
发信人: hongchen (kissing-fire), 信区: Embedded <br>
标 题: Re: 又一道嵌入试题! <br>
发信站: BBS 水木清华站 (Thu Nov 8 16:58:57 2001) <br>
<br>
<br>
【 在 wheregone (猫猫) 的大作中提到: 】 <br>
: 单线程编程只能这样处理多任务吧 <br>
: 比如你要处理键盘,要处理UART的数据,又要输出 <br>
: 只能在一个大循环里套小循环,特别是用户菜单 <br>
应该是使用短时定时器中断来查询键盘中断, <br>
串口工作在中断方式 <br>
: 这个方法缺点多多: <br>
: 两个中断之间如果处理时间不够,会得不到响应或延迟太 <br>
: 多 <br>
: 维护和升级太麻烦 <br>
: 不利于多人合作写代码 <br>
我明白了,先把中断产生的信息和数据存储下来,然后再一一去执行, <br>
可以避免没有响应,保证按优先级顺序执行。 <br>
这个方式可能提高了编程效率,和结构性,但是可能会带来跳转太多, <br>
系统容易死机。 <br>
真是一个矛盾,要想提高编程效率,必然降低代码的执行效率。 <br>
<br>
<br>
-- <br>
<br>
※ 来源:·BBS 水木清华站 smth.org·[FROM: 166.111.60.132] <br>
发信人: ncic (yiran), 信区: Embedded <br>
标 题: Re: 又一道嵌入试题! <br>
发信站: BBS 水木清华站 (Thu Nov 8 21:14:39 2001) <br>
<br>
大面瓜说的是有道理,有依据的, <br>
中断处理程序分成两部分可以更快更及时地的响应中断,更少地丢失中断信号 <br>
一般而言CPU在执行中断处理程序的时候是禁止中断的,因为这样可以避免编写 <br>
可重入的处理程序,如果此时允许中断,那么处理程序必须是可重入的,这在内核 <br>
代码中是很麻烦,很耗资源的事情。 <br>
要更快更即使地响应中断必须使真正的中断处理程序足够短,只做一些必须做 <br>
的事情,比如从外设读数据到缓冲区,这也可以叫做前台程序,而处理缓冲区数据 <br>
的工作则又后台程序完成,一般CPU在处理后台程序的时候是允许中断的。 <br>
Linux里也是这样的,它的中断处理程序有一个上半部和下半部机制,上半部和前台 <br>
程序类似,一般禁止中断,下半部类似于后台程序,允许中断。 <br>
在《Linux设备驱动程序》里有个例子,可以让并口拼命发中断(需要9,10脚短接) <br>
中断处理程序用上下半部机制实现时的中断处理速度比普通方式实现快很多。 <br>
有些事情不是想当然就可以的,实际问题需要一些实际的经验和技巧。 <br>
<br>
【 在 wangyyff (郁闷的大面瓜) 的大作中提到: 】 <br>
: 我的理解和你的好像不太一样耶, <br>
: 前后台这种概念在没有操作系统的嵌入式系统里讲的很多,并不仅仅是限制在网络应用 <br>
: 下面引述邵老师的一段话: <br>
: 前后台系统是指不使用实时操作系统的嵌入式应用程序。一般做法是,写一个无限循环 <br>
: 的程序 <br>
: ,在程序中查询每个事件是否发生,每个任务是否具备运行条件,如果是,则处理这个 <br>
: 事件或执行这个任务。这可以看成是一个后台程序。 <br>
: 而系统对中断的响应可以看成是前台程序,中断的打入表示某事件的发生,在中断服务 <br>
: 子程序中,一般对中断做一些简单的处理,然后给出一个某事件发生了的标志,待后台 <br>
: 程序来处理。后台可以叫作任务级,前台叫作中断级。 <br>
在中断服务程序里不对中断作处理,只是置一个标志位,或者写一个状态字,然后由一个 <br>
短时定时程序或无限循环程序来扫描这些标志位或状态字,再启动相应的处理程序,这不 <br>
就相当于把原本可以一次完成的事情,拆成了两段吗?肯定要引入新的变量,增加跳转时 <br>
间,也就相当于增加了系统被干扰的机会,跳转是程序最容易跑飞的时候,这样做的好处 <br>
是什么呢? <br>
如果一次发生了多个中断,那么启动的处理程序应该是相当于一个线程,或是一个任务, <br>
应该是独立运行的,这时这个短时定时程序或无限循环程序要启动多个线程,而此时多线 <br>
程之间的通讯以及对线程根据优先级进行频繁的执行、挂起,却要由内核来做?那么这个 <br>
<br>
核来管理这些中断信号?还是你说的这个程序本身就是内核呢? <br>
我觉得这个流程就好像是 <br>
<br>
中断信号1,2,3。。。->程序,得到标志位或状态字->启动线程->内核管理线程 <br>
<br>
那么为什么不直接 <br>
<br>
中断信号1,2,3。。。->内核->启动和管理线程 <br>
<br>
愚人之见。 <br>
请大家就这个问题深入探讨探讨吧! <br>
<br>
<br>
<br>
<br>
-- <br>
<br>
<br>
<br>
-- <br>
<br>
※ 来源:·BBS 水木清华站 smth.org·[FROM: 166.111.33.82] <br>
发信人: hongchen (kissing-fire), 信区: Embedded <br>
标 题: Re: 又一道嵌入试题! <br>
发信站: BBS 水木清华站 (Thu Nov 8 22:00:10 2001) <br>
<br>
<br>
【 在 ncic (yiran) 的大作中提到: 】 <br>
: 大面瓜说的是有道理,有依据的, <br>
: 中断处理程序分成两部分可以更快更及时地的响应中断,更少地丢失中断信号 <br>
: 一般而言CPU在执行中断处理程序的时候是禁止中断的,因为这样可以避免编写 <br>
: 可重入的处理程序,如果此时允许中断,那么处理程序必须是可重入的,这在内核 <br>
: 代码中是很麻烦,很耗资源的事情。 <br>
内核是不是指嵌入式操作系统的内核? <br>
还是泛指任何操作系统? <br>
还是任何核心程序? <br>
: 要更快更即使地响应中断必须使真正的中断处理程序足够短,只做一些必须做 <br>
: 的事情,比如从外设读数据到缓冲区,这也可以叫做前台程序,而处理缓冲区数据 <br>
: 的工作则又后台程序完成,一般CPU在处理后台程序的时候是允许中断的。 <br>
: Linux里也是这样的,它的中断处理程序有一个上半部和下半部机制,上半部和前台 <br>
: 程序类似,一般禁止中断,下半部类似于后台程序,允许中断。 <br>
: 在《Linux设备驱动程序》里有个例子,可以让并口拼命发中断(需要9,10脚短接) <br>
实际系统中恐怕不会出现这种情况吧, <br>
肯定应该通过主系统精确定时来触发这种外部频繁事件吧 <br>
否则这种中断,恐怕没有哪个系统能承受得了,这么频繁的进行中断,系统不死机才怪! <br>
<br>
: ................... <br>
好久没有和人深入讨论问题了,真是觉得高兴! <br>
<br>
-- <br>
<br>
※ 来源:·BBS 水木清华站 smth.org·[FROM: 166.111.60.132] <br>
发信人: flyking (小排), 信区: Embedded <br>
标 题: Re: 又一道嵌入试题! <br>
发信站: BBS 水木清华站 (Thu Nov 8 22:58:28 2001) <br>
<br>
我想内核应该是指操作系统,但是写这些程序时,就把他们想象成除此以外的 <br>
处理就行了,经确定时的问题肯定是不行的,因为任何外部中断都有可能随时发生 <br>
而很多必须立即做出响应的 <br>
【 在 hongchen (kissing-fire) 的大作中提到: 】 <br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -