单元测试AVR汇编语言


11

您如何对汇编代码进行单元测试?

我正在将串行伺服控制器作为hexapod机器人项目的一部分进行工作,并且代码已经变得越来越复杂了;)无论如何,作为C ++服务器开发人员,我习惯于在日常工作中使用单元测试,并且因此一直在尝试对我的AVR汇编代码进行相同类型的测试。我已经找到了一种对我来说行得通的方法(请参阅此处),但是我对是否缺少任何标准工具或技术感兴趣。

更新:对于那些感兴趣的人,现在可以在此处找到伺服控制器的完整资源和单元测试。

Answers:


3

我也将其描述为优雅,但如果您会原谅我的介入,则想补充一下问题。

我知道在这种情况下可以使用非常昂贵的软件包,但是在我所在的公司工作,除非我们确定它能满足我们的需求,否则我们无法负担这笔费用。

测试驱动开发(TDD)是我听说过用于开发的更好的系统之一,我很喜欢它,但是占用我时间的问题通常是由复杂的中断和硬件事件引起的,许多人将其称为故障。当星星对齐时,每隔2小时就会出现问题,这似乎是一件很小的事情,但是如果您的手机每周冻结一次,则会骂工程师的名字。在我们的情况下,当事情真的崩溃时,我们必须投入大量精力,正如您可以想象的那样,我喜欢避免这种情况。

我已经看到了非常智能的解决方案,用于检查子系统的功能,如果实施得当,可能会在每周工作50小时中为我节省3个小时,但是如果有一种智能的方法来查找故障情况,它将为我节省数周的工作寻找偶尔在重负载下在现场发生的“错误”。

这篇文章可能并没有多大帮助,但是我发现将所有内容都展示出来会使所有内容更易于解决。如果有一种TDD方法来查找故障情况,我可以得到数以十万计的赔偿。-最大


1
我还没有真正考虑过测试中断代码和非中断代码之间的交互。这是一个好点。我正计划在中断情况之外测试我的PWM生成计时器中断代码,其方式与测试我的主串行代码的方式类似。我想,即使我涵盖了所有这些内容,我仍然会错过互动。我想我可以在测试中触发中断(使用计时器中断很容易,但是可以将所有中断代码设置为在测试工具中的计时器中断上运行)。不平凡。
Len Holgate

1
我可能会误解您,但我会尽量注意非中断和中断代码的交互。在使用原子操作时,我可能应该放松一些,但从未证明它会在使用我们的优化程序时造成损害。当一个中断延迟另一个中断时会出现问题,我帮助学生解决的一个常见中断将是中断驱动的PWM生成。如果您需要极高的速度,例如在芯片中使用“比较”模块,而另一个中断正忙于将时间花在其他事情上,并且使您延迟了50uS,这可能是世界末日。
Kortuk

1
在某些情况下,您可以拥有优先级,或者甚至可以使某个中断自行禁用并在内部重新启用全局中断(取决于平台),但是我自己开发的最简单方法是将中断时间限制在绝对必要的时间并使用正常的代码来执行其余的工作。
09年

1
我当前的设计以及建议的新设计都在我的博客中进行了解释。现在,我有一个由定时器中断生成的64个PWM通道,没有其他中断。串行通过轮询完成。这意味着PWM坚如磐石,但串行可能有问题。我的新设计将使用UART中断以及用于产生PWM的计时器,并仔细重新启用和阻止中断,以确保无干扰的PWM和无干扰的UART处理...
Len Holgate

2
我以PWM为例,存在此问题的系统具有3个SPI接口,其中SPI连接中的1个具有3个芯片。共有4种不同的端口中断,通知外部芯片状态变化以及其他一些情况。拥有的接口越多,问题就越严重。
Kortuk

2

有趣。圣诞节过后,我打算考虑用Pics做一些汇编程序,如果我有更多的时间,我将对您的系统有一个很好的了解。

我能看到的一种方法是用另一种语言编写某种框架的脚本,以创建和拆除模拟对象等,但是如何将其与芯片/仿真接口将是一个问题。

如果它变得太繁琐,那将超过单元测试的好处,也使您不太愿意使用它。


使它在模拟器中运行是我最初的障碍,直到我弄清楚了如何将代码分解为单独的文件,然后简单地“模拟”出一些我会跳转到实际代码中的标签。完成后,我将发布整个内容。将单元测试改造为代码需要花费一些时间,但这是非常值得的。
Len Holgate

既然我有适当的机会浏览您的方法,我认为它相当优雅。也许圣诞节后我会看一看avrs,因为与他们相比,与Pics相比,与他们有关的社区内容更多。任何想法对于AVR汇编程序编程来说都是不错的Linux IDE。
Amos,2009年

1
您可以使用GNU工具链代替AVR Studio(这是Atmel的免费工具集)。可以在Linux上运行它,但是我不需要这样做。
Len Holgate

刚刚找到此链接到Linux Journal上有关在Linux下进行AVR开发的文章:linuxjournal.com/article/7289
Len Holgate,2009年

我对该文章的主要担心是它是2005年的,所以可能已经过时了。
Amos
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.