1
ShadowStar 2012-10-03 23:18:41 +08:00 1
我还真遇到过,做嵌入式的开发,判断一个地址的值是否等于特定的值失败,但是打印处理确实是那个值。
想你说的读取、写入的错误没那么容易发生,对于外部设备的读写不是简单的几个指令就完成的。 一般出错就是跑飞了,有kernel的话就panic,没有kernel的话就core trap。 |
2
HowardMei 2012-10-04 12:14:46 +08:00 2
绝大多数嵌入式系统出现‘跑飞’,都不是芯片内部问题,而是电路板设计问题,晶振、电源、接地、接触、寄生、走线串扰之类,也有的是软件问题,时序没考虑清楚。
CPU内部关键模块当然有冗余设计,各子模块内部校验、纠错、测试接口也一样都不会少,更不用说极其昂贵的QA流程了,什么DC/AC探针测试,什么零下40度到零上120度让芯片跑各种Corner Condition Cases,还有专门的封装测试厂,哪环节不是一分钟多少美金地烧钱,不可能像软件那样放着Bug以打补丁为生。服务器CPU冗余模块很多,低端MCU较少见模块级冗余,但是门级电路冗余还是会做的。 指令很上层,读在CPU内部变成写不可能,在最简单的MCU里所涉及的寻址、时序、运算电路单元也会有一大片,00010与00001在多级流水中涉及的门电路南辕北辙,内部出错不可能。对外输出时,接口/总线可能会出错,比如Output Buffer电平被钳制,这时芯片整个异常是应该的,不然你怎么发现某个蠢家伙焊错? 另外,存储芯片控制逻辑也都是时钟边缘触发,并带校验,不会胡乱执行指令。 |
3
jimaobian OP 原来如此,自己对CPU的了解还真得非常有限,感谢两位的回复~~
|