当开发嵌入式系统时,您认为应避免哪些“最差的做法”?
以下是我认为不应该做的几件事:
我相信还有很多关于不应该做的好想法,让我们一起听听!
当开发嵌入式系统时,您认为应避免哪些“最差的做法”?
以下是我认为不应该做的几件事:
我相信还有很多关于不应该做的好想法,让我们一起听听!
我还有更多,但这应该能让我们开始了....
在我伤到自己之前,有人拦住我。
顺便说一下,我意识到这些并不都严格特定于嵌入式开发,但我认为每个问题在嵌入式世界中至少和现实世界一样重要。
制定时间表时,请假定一切都会第一次就成功。
在没有振荡器和/或逻辑分析仪的情况下进行板子调试。尤其是示波器,从来没用过。
在设计时不考虑电源供应。像热量、效率、纹波对ADC读数和系统行为的影响、EMF辐射、启动时间等问题并不重要。
无论你做什么,都不要使用复位控制器(5美分的IC类型),只使用RC电路(带有很多高频AC噪声耦合的电路)
拥抱宇宙大爆炸! 不要逐步开发小块,并经常集成,傻瓜! 只需与同事一起编写几个月,然后在大型贸易展示之前将所有内容组合在一起!
不要为代码添加调试/跟踪语句。 可见性很差。
在ISR中做很多事情。 冒泡排序,数据库查询等... 嘿,可能没有人会打断你,你有机会发挥!
忽略板子布局设计。 让自动布线工具随便处理匹配阻抗追踪和高电流、高频率电源供应。 嘿,你有更重要的事情要担心,伙计!
使用全新的、测试版的、未发布的、早期采用开发者的芯片,特别是安全关键(航空、医学)或大量生产(采样速度为300 MHz的4核心7级流水线芯片)。 为什么去拉斯维加斯,当这个芯片正在采样呢?
好的,第二轮……还有几个:
不要使用看门狗定时器(尤其是内置的!)
在可用缩放整数运算的情况下,使用浮点类型和例程
当没有必要时不要使用RTOS
在真正有意义的情况下使用RTOS
永远不要查看生成的汇编代码以了解底层发生了什么
编写固件使其无法在现场更新
不要记录任何您正在进行的假设
如果在测试/调试过程中看到奇怪的东西,请将其忽略,直到它再次发生;它可能不像电压跌落、未接中断、堆栈破坏的迹象或其他短暂和间歇性问题那样重要
在调整堆栈大小时,最好的策略是“从小开始逐步增加,直到程序停止崩溃,然后我们可能没问题”
不要利用运行时分析工具,例如Micrium的uC/Probe(我相信还有其他工具)
在运行主应用程序之前,不要包括硬件的自检功能 - 嘿,引导代码正在运行,可能有什么不起作用的问题呢?
绝对不要在POST中包含一个RAM测试(上面的), 因为你不会去实现它
如果目标处理器具有MMU,请不要使用那个可怕的MMU!特别是不要让它保护您免受对代码空间的写入、从数据空间执行等的攻击。
如果你已经用某一组编译器选项(例如没有/低优化)进行了测试、调试和集成,请确保在最终发布版本之前打开完整的优化!但是只有在不进行测试时才打开优化。我的意思是,你已经测试了数月 - 会出什么问题呢???
初始化后的动态内存分配。在系统运行时,内存池应保持静态。
尝试在没有实际硬件支持的情况下进行开发。
使用多个处理器来解决问题,并确保它们具有相反的字节序。然后确保它们之间的接口是其中一个直接访问另一个内存。
是的,我以前编写过这种架构。
如果不对“嵌入式编程”进行更详细的定义,那么就无法确定什么是好的或坏的实践。
例如,在CE或XPe平台上,使用非标准的'C'方言编写8位微控制器程序时可能会完全不合适。
在许多情况下,抽象是一种(过度)昂贵的奢侈品,因此“避免它”可能是好的而不是坏的。
以下是几点建议:
不要设计一个容易解释的架构,让你的开发人员、经理和客户都能够理解。
嵌入式系统几乎总是成本敏感的平台。不要指望硬件变得更慢(更便宜),也不要计划在关键数据路径中添加新功能。
大多数嵌入式系统都是“无头”(没有键盘、鼠标或任何其他HID)。不要在计划中写调试工具。也不要至少分配一名开发人员来维护它们。
一定要低估获得提示的时间。这是将核心CPU带到可以与您交互的状态所需的时间。
始终假设硬件子系统可以直接使用,例如内存、时钟和电源。