在开发嵌入式系统时,您会考虑"最差实践"?
我对不该做的一些想法是:
避免抽象硬件层,而是在整个代码中扩展硬件访问.
没有任何类型的仿真环境,只有exe/cute的实际硬件.
避免单元测试,可能是由于以上两点
不在分层结构中开发系统,因此较高层可能依赖于调试和工作的较低层功能
选择硬件而不考虑将使用它的软件和工具
使用专为简化调试而设计的硬件,例如无测试点,无调试LED,无JTAG等.
我确信那里有很多好的想法,不该做什么,让我们听听他们!
Dan.. 56
未初始化的异常向量(你知道,对于"永远不会达到"的那些)
跟我说吧:全局变量.特别是在没有保护的情况下在ISR和任务(或前台循环)之间共享的.
在必要时未使用"volatile".
具有DisableInterrupts()然后EnableInterrupts()配对的例程.了解?不是RestoreInterrupts(),而是ENABLE.是的,筑巢.
测试时没有GPIO切换.
船上没有测试点.
没有用于查看运行时系统状态的LED或串行端口.
无法测量CPU的忙/空闲程度.
除最严重的情况外,使用内联汇编.写一个快速标注.
使用for(i = 0; i <1000; i ++){}来"延迟一点".是的,那不会用一百种不同的方式咬你......
不使用const可能保留RAM并减少启动时间(不复制/初始化变量)
我有更多,但这应该让我们开始....
未初始化的异常向量(你知道,对于"永远不会达到"的那些)
跟我说吧:全局变量.特别是在没有保护的情况下在ISR和任务(或前台循环)之间共享的.
在必要时未使用"volatile".
具有DisableInterrupts()然后EnableInterrupts()配对的例程.了解?不是RestoreInterrupts(),而是ENABLE.是的,筑巢.
测试时没有GPIO切换.
船上没有测试点.
没有用于查看运行时系统状态的LED或串行端口.
无法测量CPU的忙/空闲程度.
除最严重的情况外,使用内联汇编.写一个快速标注.
使用for(i = 0; i <1000; i ++){}来"延迟一点".是的,那不会用一百种不同的方式咬你......
不使用const可能保留RAM并减少启动时间(不复制/初始化变量)
我有更多,但这应该让我们开始....
在我伤害自己之前有人阻止了我.
顺便说一句,我意识到并非所有这些都是嵌入式开发的严格特定,但我相信它们中的每一个在嵌入式世界中至少与现实世界一样重要.
在制定时间表时,请继续并假设一切都将在第一时间开始工作.
没有示波器和/或逻辑分析仪的接近板启动.ESP.范围,从来没用过.
在设计过程中不要考虑电源.热量,效率,纹波对ADC读数和系统行为的影响,EMF辐射,启动时间等问题并不重要.
无论你做什么,不要使用复位控制器(5美分IC类型),只需使用RC电路(希望其中有很多高频交流噪声耦合到其中)
拥抱大爆炸!不要逐步开发小块并经常整合,傻瓜!只需和旁边的同事一起编写好几个月的代码,然后在大型贸易展演示前一晚将它们拼凑起来!
不要使用调试/跟踪语句来设置代码.可见性很差.
你的ISR中有很多东西.泡泡排序,数据库查询等...嘿,没有人会打扰你,你发言,享受它的伙伴!
忽略设计中的电路板布局.让自动布线器通过那些匹配的阻抗走线和高电流高频电源进入城镇.嘿,你有更重要的事情要担心,伙伴!
使用全新的,未经发布的,未发布的早期采用者芯片,特别是如果它是安全关键(航空,医疗)或大批量(召回100万个单位很有趣).为什么在那个4芯300 MHz 7级流水线芯片上进行新的硅采样时去维加斯呢?
好的第2轮......还有几个:
不要使用看门狗定时器(尤其是内置定时器!)
当缩放整数数学就足够时,使用浮点类型和例程
如果没有保证,请使用RTOS
当它真的有意义时,不要使用RTOS
永远不要看生成的汇编代码来了解底层发生了什么
编写固件,使其无法在现场更新
不要记录您正在做的任何假设
如果你在测试/调试时看到一些奇怪的东西,就要忽略它,直到它再次发生; 它可能不是什么重要的事情,如停电,错过的中断,堆栈损坏的迹象,或其他一些稍纵即逝的间歇性问题
在确定堆栈大小时,最好的理念是"从小开始并继续增加,直到程序停止崩溃,然后我们可能会好"
不要利用像Micrium的uC/Probe这样的运行时分析工具(我确定还有其他的)
在运行主应用程序之前不要包括硬件的开机自检 - 嘿,启动代码正在运行,哪些可能无法正常工作?
绝对不要在你不打算实施的POST(上面)中包含RAM测试
如果目标处理器有一个MMU,对于所有神圣的东西,不要使用那个可怕的MMU!特别是不要让它保护你免受代码空间的写入,数据空间的执行等等....
如果您一直在测试,调试和集成某些编译器选项(例如,没有/低优化),请务必在最终发布版本之前进行全面优化!但是如果你不打算测试,只能打开优化.我的意思是,你已经测试了几个月 - 可能会出错?!??!
初始化后的动态内存分配.系统启动并运行后,内存池应保持静态.
在伐木设施上吝啬.嵌入式系统很难调试,您需要大量的日志记录.
没有能力允许记录级别.许多系统中的一个系统会出现奇怪的行为,您需要将该系统的日志记录的调试级别设置为更详细的系统.
不允许某种输出端口允许记录到例如控制台.
没有"单步执行"代码的能力.
没有能力分析代码,因此您可以看到需要优化哪些位,例如在汇编程序中.
没有开发某种"健全性测试",因此您可以在装载前和装运前快速检查设备是否正常工作.
基于一些"本土"操作系统的设计
试图开发而无需访问您正在开发的实际硬件.