尽信书不如无书

imjacob Post at 2007/6/23 11:02:00

看《基于嵌入式实时操作系统的程序设计技术》(周航慈,北京航空航天大学出版社)的时候,有这样一句话:“ 关中断的优点是简单,缺点是影响系统的实时性。为了减轻对系统实时性的不利影响,访问共享资源的关键段落代码必须尽量简单,绝对不允许在关键代码中包含有可能使自己挂起的系统服务函数;否则将使系统死机。

正巧手头在弄threadx操作系统,于是作了个实验。把tx_event_flags_get()这一个可能使自己的系统服务函数放在临界区,然后运行,发现根本没有死机,程序照样运行,并且还走到了ISR中的tx_event_flags_set()函数里。唔唔唔~~~我纳闷了。

这是怎么回事呢? 后来请教同事,说一定是哪里开了中断了,调查一下果然发现tx_event_flags_get()这个函数里开了中断,呵呵。

同事的概念是清楚。我就看到这一现象闷了,想不到系统服务函数里也会有文章。实际上是自己脑子比较死的表现。

threadx可真妖。或许这个也不是threadx的妖,还是把threadx移植到我们硬件上的人自己实现的。

自己想象,那本书讲的没错,threadx也没错。但是软件这东西,实在是活络。我们要做的是把一些基本原理搞清楚,举一反三。譬如你能在临界区进入ISR吗? 不能得,那进入呢?很简单,那个就不是临界区阿!!

让我想起了我们读大学那会儿我们伟大的钱校长曾经告诫我们的老师们的:给同学们上课讲定律一定要讲明它的局限性,虽然学校的老师不是这样做的,但钱校长的话还是不容置疑的。

已有 2 位网友发表了看法