当前位置:  开发笔记 > 程序员 > 正文

嵌入式系统最差的做法

如何解决《嵌入式系统最差的做法》经验,为你挑选了6个好方法。

在开发嵌入式系统时,您会考虑"最差实践"?

我对不该做的一些想法是:

避免抽象硬件层,而是在整个代码中扩展硬件访问.

没有任何类型的仿真环境,只有exe/cute的实际硬件.

避免单元测试,可能是由于以上两点

不在分层结构中开发系统,因此较高层可能依赖于调试和工作的较低层功能

选择硬件而不考虑将使用它的软件和工具

使用专为简化调试而设计的硬件,例如无测试点,无调试LED,无JTAG等.

我确信那里有很多好的想法,不该做什么,让我们听听他们!

Dan.. 56

未初始化的异常向量(你知道,对于"永远不会达到"的那些)

跟我说吧:全局变量.特别是在没有保护的情况下在ISR和任务(或前台循环)之间共享的.

在必要时未使用"volatile".

具有DisableInterrupts()然后EnableInterrupts()配对的例程.了解?不是RestoreInterrupts(),而是ENABLE.是的,筑巢.

测试时没有GPIO切换.

船上没有测试点.

没有用于查看运行时系统状态的LED或串行端口.

无法测量CPU的忙/空闲程度.

除最严重的情况外,使用内联汇编.写一个快速标注.

使用for(i = 0; i <1000; i ++){}来"延迟一点".是的,那不会用一百种不同的方式咬你......

不使用const可能保留RAM并减少启动时间(不复制/初始化变量)

我有更多,但这应该让我们开始....



1> Dan..:

未初始化的异常向量(你知道,对于"永远不会达到"的那些)

跟我说吧:全局变量.特别是在没有保护的情况下在ISR和任务(或前台循环)之间共享的.

在必要时未使用"volatile".

具有DisableInterrupts()然后EnableInterrupts()配对的例程.了解?不是RestoreInterrupts(),而是ENABLE.是的,筑巢.

测试时没有GPIO切换.

船上没有测试点.

没有用于查看运行时系统状态的LED或串行端口.

无法测量CPU的忙/空闲程度.

除最严重的情况外,使用内联汇编.写一个快速标注.

使用for(i = 0; i <1000; i ++){}来"延迟一点".是的,那不会用一百种不同的方式咬你......

不使用const可能保留RAM并减少启动时间(不复制/初始化变量)

我有更多,但这应该让我们开始....



2> Dan..:

在我伤害自己之前有人阻止了我.

顺便说一句,我意识到并非所有这些都是嵌入式开发的严格特定,但我相信它们中的每一个在嵌入式世界中至少与现实世界一样重要.

在制定时间表时,请继续并假设一切都将在第一时间开始工作.

没有示波器和/或逻辑分析仪的接近板启动.ESP.范围,从来没用过.

在设计过程中不要考虑电源.热量,效率,纹波对ADC读数和系统行为的影响,EMF辐射,启动时间等问题并不重要.

无论你做什么,不要使用复位控制器(5美分IC类型),只需使用RC电路(希望其中有很多高频交流噪声耦合到其中)

拥抱大爆炸!不要逐步开发小块并经常整合,傻瓜!只需和旁边的同事一起编写好几个月的代码,然后在大型贸易展演示前一晚将它们拼凑起来!

不要使用调试/跟踪语句来设置代码.可见性很差.

你的ISR中有很多东西.泡泡排序,数据库查询等...嘿,没有人会打扰你,你发言,享受它的伙伴!

忽略设计中的电路板布局.让自动布线器通过那些匹配的阻抗走线和高电流高频电源进入城镇.嘿,你有更重要的事情要担心,伙伴!

使用全新的,未经发布的,未发布的早期采用者芯片,特别是如果它是安全关键(航空,医疗)或大批量(召回100万个单位很有趣).为什么在那个4芯300 MHz 7级流水线芯片上进行新的硅采样时去维加斯呢?


哇,听起来就像我以前的工作场所!

3> Dan..:

好的第2轮......还有几个:

不要使用看门狗定时器(尤其是内置定时器!)

当缩放整数数学就足够时,使用浮点类型和例程

如果没有保证,请使用RTOS

当它真的有意义时,不要使用RTOS

永远不要看生成的汇编代码来了解底层发生了什么

编写固件,使其无法在现场更新

不要记录您正在做的任何假设

如果你在测试/调试时看到一些奇怪的东西,就要忽略它,直到它再次发生; 它可能不是什么重要的事情,如停电,错过的中断,堆栈损坏的迹象,或其他一些稍纵即逝的间歇性问题

在确定堆栈大小时,最好的理念是"从小开始并继续增加,直到程序停止崩溃,然后我们可能会好"

不要利用像Micrium的uC/Probe这样的运行时分析工具(我确定还有其他的)

在运行主应用程序之前不要包括硬件的开机自检 - 嘿,启动代码正在运行,哪些可能无法正常工作?

绝对不要在你不打算实施的POST(上面)中包含RAM测试

如果目标处理器有一个MMU,对于所有神圣的东西,不要使用那个可怕的MMU!特别是不要让它保护你免受代码空间的写入,数据空间的执行等等....

如果您一直在测试,调试和集成某些编译器选项(例如,没有/低优化),请务必在最终发布版本之前进行全面优化!但是如果你不打算测试,只能打开优化.我的意思是,你已经测试了几个月 - 可能会出错?!??!



4> jholl..:

初始化后的动态内存分配.系统启动并运行后,内存池应保持静态.



5> nzpcmad..:

在伐木设施上吝啬.嵌入式系统很难调试,您需要大量的日志记录.

没有能力允许记录级别.许多系统中的一个系统会出现奇怪的行为,您需要将该系统的日志记录的调试级别设置为更详细的系统.

不允许某种输出端口允许记录到例如控制台.

没有"单步执行"代码的能力.

没有能力分析代码,因此您可以看到需要优化哪些位,例如在汇编程序中.

没有开发某种"健全性测试",因此您可以在装载前和装运前快速检查设备是否正常工作.

基于一些"本土"操作系统的设计



6> tloach..:

试图开发而无需访问您正在开发的实际硬件.


@Craig McQueen:独立于平台的仿真可以让人们在没有硬件的情况下获得成功.不幸的是,人们可能会发现真实硬件的定时行为与仿真器完全不同,需要进行大的重新加工.
推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有