芯片|电子工程师会犯的29个常见错误!( 二 )


常见错误8:用户操作错误发生问题就不能怪我了 。
正 解:要求用户严格按手册操作是没错的 , 但用户是人 , 就有犯错的时候 , 不能说碰错一个键就死机 , 插错一个插头就烧板子 。 所以对用户可能犯的各种错误必须提前预测到并加以保护 。
常见错误9:这板子坏的原因是对端的板子出问题了 , 也不是我的责任 。
正 解:对于各种对外的硬件接口应有足够的兼容性 , 不能因为对方信号不正常 , 你就彻底罢工了 。 它不正常只应影响到与其有关的那部分功能 , 而其它功能应能正常工作 , 不应彻底罢工 , 甚至永久损坏 , 而且一旦接口恢复 , 你也应立即恢复正常 。
常见错误10:这部分电路只要要求软件这样设计就不会有问题 。
正 解:硬件上很多器件特性直接受软件控制 , 但软件是经常出现bug的 , 程序跑飞了之后无法预料会有什么操作 。 设计者应确保不论软件做什么样的操作硬件都不应在短时间内发生永久性损坏 。
系统效率

常见错误11:这么多任务到底是用中断还是用查询呢?还是中断快些吧 。

正 解:中断的实时性强 , 但不一定快 。 如果中断任务特别多的话 , 这个没退出来 , 后面又接踵而至 , 一会儿系统就将崩溃了 。 如果任务数量多但很频繁的话 , CPU的很大精力都用在进出中断的开销上 , 系统效率极为低下 , 如果改用查询方式反而可极大提高效率 , 但查询有时不能满足实时性要求 , 所以最好的办法是在中断中查询 , 即进一次中断就把积累的所有任务都处理完再退出 。
常见错误12:这主频100M的CPU只能处理70% , 换200M主频的就没事了 。
正 解:系统的处理能力牵涉到多种多样的因素 , 在通信业务中其瓶颈一般都在存储器上 , CPU再快 , 外部访问快不起来也是徒劳 。
常见错误13:CPU用大一点的CACHE , 就应该快了 。
正 解:CACHE的增大 , 并不一定就导致系统性能的提高 , 在某些情况下关闭CACHE反而比使用CACHE还快 。 其原因是搬到CACHE中的数据必须得到多次重复使用才会提高系统效率 。 所以在通信系统中一般只打开指令CACHE , 数据CACHE即使打开也只局限在部分存储空间 , 如堆栈部分 。 同时也要求程序设计要兼顾CACHE的容量及块大小 , 这涉及到关键代码循环体的长度及跳转范围 , 如果一个循环刚好比CACHE大那么一点点 , 又在反复循环的话 , 那就麻烦了 。
常见错误14:存储器接口的时序都是厂家默认的配置 , 不用修改的 。
正 解:BSP对存储器接口设置的默认值都是按最保守的参数设置的 , 在实际应用中应结合总线工作频率和等待周期等参数进行合理调配 。 有时把频率降低反而可提高效率 , 如RAM的 存取周期是70ns , 总线频率为40M时 , 设3个周期的存取时间 , 即75ns即可;若总线频率为50M时 , 必须设为4个周期 , 实际存取时间却放慢到了80ns 。
常见错误15:这个CPU带有DMA模块 , 用它来搬数据肯定快 。
正 解:真正的DMA是由硬件抢占总线后同时启动两端设备 , 在一个周期内这边读、那边些 。 但是很多嵌入CPU内的DMA只是模拟而已 , 启动每一次DMA之前要做很多准备工作(设起始地址和长度等) , 在传输时往往是先读到芯片内暂存 , 然后再写出去 , 即搬一次数据需两个时钟周期 , 比软件来搬要快一些(不需要取指令 ,没有循环跳转等额外工作) , 但如果一次只搬几个字节 , 还要做一堆准备工作 , 一般还涉及函数调用 , 效率并不高 。 所以这种DMA只对大数据块才适用 , 不要盲目使用 。
常见错误16:一个CPU处理不过来 , 就用两个分布处理 , 处理能力可提高一倍 。