pax*_*blo 51
嵌入式软件在过去10年中可能已经取得了很大进展,但我们通常会做到以下几点:
希望自从我上次这样做以来情况有所改善.我不希望我最大的敌人痛苦.
Cra*_*een 20
在PC环境中进行单元测试可以获得很多好处(用PC C编译器编译代码并在PC单元测试框架中运行代码),有几个附带条件:
stdint.h类型uint16_t而不是普通unsigned int等类型.我们遵循这些规则,发现在PC单元测试框架中对应用程序层代码进行单元测试之后,我们可以充分相信它运行良好.
PC平台上的单元测试的优点:
laa*_*lto 13
嵌入式系统是一个广泛的主题,但总的来说,让我们把它看作是一个结合了硬件和软件的特定用途产品.我的嵌入式背景来自手机,它只是所有嵌入式系统的一小部分.我将尝试在抽象方面略微提出以下几点:
尽可能抽象出硬件依赖性.通过这种方式,您可以在模拟的"硬件"上运行单元测试,还可以测试在目标上难以测试的各种罕见/异常情况.为了防止抽象成本,您可以使用例如条件编译.
尽可能少地依靠硬件.
在模拟器或交叉编译器环境中运行的单元测试仍不能保证代码在目标硬件上运行.你也必须在目标上进行测试.尽早测试目标.
这里缺乏经验的声音,但这是我最近一直在考虑的事情.在我看来,最好的方法是
A)在PC环境中编写尽可能多的与硬件无关的应用程序代码,然后再将其写入目标,并在同一时间编写单元测试(首先在PC上执行此操作应该有助于您分离与硬件无关的东西).通过这种方式,您可以使用您选择的单元测试仪,然后以旧式方式测试与硬件相关的内容 - 使用RS-232和/或示波器以及I/O引脚发送时间相关数据,具体取决于运行速度.
B)将它全部写在目标硬件上,但是有一个make目标来有条件地编译单元测试构建,该构建将运行单元测试并通过RS-232或其他方式输出结果(或可以分析结果的数据).如果你没有很多内存,这可能会很棘手.
编辑7/3/2009我刚刚想到了如何对硬件相关的东西进行单元测试.如果您的硬件事件发生得太快而无法使用RS-232进行记录,但您不想手动筛选大量的示波器数据检查以查看您的I/O引脚标记是否按预期上升和下降,则可以使用PC具有集成DIO的卡(例如National Instruments的数据采集卡系列)可自动评估这些信号的时序.然后,您只需在PC上编写软件即可控制数据采集卡与当前运行的单元测试同步.
我们设法使用模拟器测试相当多的硬件相关代码,我们使用Keil的模拟器和IDE(不附属只使用他们的工具).我们编写模拟器脚本以我们期望它做出反应的方式驱动"硬件",我们能够非常可靠地测试我们的工作代码.当然,对于某些测试,可能需要花费一些精力来为硬件建模,但对于大多数情况来说,这非常有效,并且允许我们在没有任何可用硬件的情况下完成大量工作.在访问硬件之前,我们已经能够在模拟器中接近完整的系统工作,并且一旦将代码放在真实的东西上,就很少有问题要处理.这也可以显着加快代码的生成,因为一切都可以在PC上完成,同时可以使用更深入的调试器来模拟芯片,而不是尝试在硬件上做所有事情.
使其能够可靠地用于复杂的控制系统,存储器接口,定制SPI驱动的IC甚至是单显示器.
小智 5
这里有很多很好的答案,一些没有提到的事情是运行诊断代码以便:
| 归档时间: |
|
| 查看次数: |
26719 次 |
| 最近记录: |