-
既然能提出问题,那肯定早有别人研究过了。
高级语言为什么可靠?例如C。
1、在你分模块写程序之后,C能保证即使这段程序跑飞,它只可能在当前模块里跳来跳去,不可能跳出本模块跳到其他的模块去影响别人/把瘟疫传染给别人。
C编译器不会连这点功能都没有。
2、如果当前运行模块里有处理硬件的功能,当模块程序跑飞时,岂不要发生控制紊乱?
这就是分层设计的必要。
任何操作系统都设计为:只有内核层才能处理硬件!其它任何核外层模块都只能通过专用接口向内核申请做处理硬件的服务。而内核是全系统最坚固可靠(rubust)的部分,虚拟硬件,是不会乱(跑飞)的。
3、有没有可能一个跑飞的程序,在模块里跳来跳去,就恰好跳到申请内核服务的接口那乱申请硬件动作?
这就像一个人在一个迷宫里撞来撞去,恰好就撞到了那个出口(接口),但是除非他已经回到了规则的轨道(迷径)。而且即使这样出到了内核层,也要被内核严格审查之后才能进行硬件服务。这些都不是编程员担心的事了。
4、如果跑飞的程序进入了死循环,岂不是死机了?
一个OS 十几到几十ms调度一次,每次调度都将终止跳乱的模块程序而恢复到其它模块任务重新开始。即使死机,不会超过一次调度间隔时间。
-
我用8032做的电子钟走了一个星期了,还是和电视上显示的时间一致!没加修正程序.倒是我家电子表差了好几秒.
-
假定要求设计这样一个系统:(书上抄的,好像是轿车自动档控制系统)
1、必须以每0.5S间隔测量汽车的当前速度;
2、每秒钟刷新显示40次;
3、没隔05S输出所计算的新的油门位置;
4、如果已发出报警,必须在20分钟之后关掉;
5、前门被打开时,如果30S内没有输入正确的口令,则报警;
6、必须每秒采样1000次发动机振动;
必须每20ms扫描一次键盘;
7、主机CAN节点必须每秒与其他节点(传感器或警报节点)通信一次;
8、传感器每秒采样一次。
9、......
10、......
用超循环的方法很难设计好这个系统,顾此失彼。但是在OS平台上,完成这个设计,即简单又可靠。
OS是什么意思?OS是一个非常稳定的平台,有极好的健壮性。也许你在上面构筑的程序不是很稳定的,可能会塌陷(跑飞),但是OS可以让它重新竖立起来。这在超循环模式下是需要“高手”才能做到不可预测的程度。这样的高手,不是每个单位都有的。如果真有,他也肯定先为自己设计一个平台了。
超循环模式就像用砖头盖房子,只能盖简单的民房。要盖摩天大厦,就不能用砖头。
我刚听说世界十大建筑,仅北京就占了3座——鸟巢、中央电视塔、新北京机场?楼。可惜,都是外国建筑师为我们设计的。
中国人只会用砖头盖民房吗?我们只会用超循环模式设计简单的软件吗?中国哪种轿车上的自控系统是自己研发的?
去年刚听说QQ车上的方向盘扭力自控单片机系统50万招标,结果北京两所重点大学和YY研究所三家单位联合攻关5年,经费用光了也没过关。(据说就是程序跑飞这一关过不去)。教授程序好编,可惜什么叫系统的健壮性。
-
TTL-CMOS接口问题?
4094的1、2、3脚少了3个上拉电阻吧。
很简单,慢速行不行?
如果不行,——接口问题。
如果行,——(程序)时序问题。
-
如果要把R1~R7入栈,将成为:
MOV A,R1
PUSH ACC
MOV A,R2
PUSH ACC
MOV A,R3
PUSH ACC
......
出栈时:
POP ACC
MOV R7,A
POP ACC
MOV R6,A
......
谁也看不懂,连自己都要小心弄错。
再看2楼:假设要把01区的R1~R7入栈:
PUSH 9
PUSH 0AH
PUSH 0BH
......
出栈时:
POP ?
.......
POP 0BH
POP 0AH
POP 9
再看按照规范:
using 1 ;或者using 0/using 2/using 3
PUSH AR1
PUSH AR2
PUSH AR3
......
出栈时
POP AR7
POP AR6
POP AR5
......
POP AR2
POP AR1
-
using 0
PUSH AR1