【问题标题】:Using Valgrind on an Embedded project在嵌入式项目中使用 Valgrind
【发布时间】:2013-07-30 06:24:26
【问题描述】:

目前我正在做一个嵌入式项目。我正在使用 IAR Embedded Workbench IDE,目标平台是基于 8051 的微控制器。是否可以使用 Valgrind 工具来检查我写的代码?

【问题讨论】:

  • 你问过 valgrind 用户的邮件列表吗?你检查过valgrind.org 吗?
  • 你应该检查这个页面,Valgrind 支持的平台[1]。不支持 8051 微控制器指令集。 [1]:valgrind.org/info/platforms.html
  • @jclin 发表您的评论作为答案。

标签: embedded valgrind


【解决方案1】:

不,是*。

否:正如另一位评论者所说,Valgrind 不能在 8051 架构上运行,因此您不能像在 x86 系统上那样使用 Valgrind。

是*:(星号 (*) 是因为它是有限的“是”)

但如果您满足以下条件,您可以在代码的非 8051/IAR 特定部分使用 Valgrind:

  1. 将特定于 8051 和特定于 IAR 的代码与体系结构/编译器无关的代码分开。
    • 您可能希望这样做,这样代码就不会因为分离不可知代码而变得更大。 (我假设代码大小非常宝贵,因为您使用的是 8051。)
  2. 使用 gcc 编译与架构/编译器无关的代码,并使用 Valgrind 在您的台式机/笔记本电脑开发机器(可能是 x86 机器)上运行它。
    • 当然,您可以使用任何其他 Valgrind 支持的架构/编译器,x86/gcc 不是您唯一的选择。

这样 Valgrind 将能够检查你的一些代码,这总比没有好。

分离代码的编译器/芯片特定部分也将使其更具可移植性和可重用性。

哦,这没有直接关系,但您还应该考虑使用像 PC-Lint 这样的静态分析程序:http://www.gimpel.com/html/index.htm

它会检查 Valgrind 会检查的一些东西,以及 Valgrind 不会检查的许多东西。此外,它还会检查您的所有代码,而不仅仅是非 8051/IAR 代码。

那里有很多类似的工具; PC-Lint 是我见过的最流行的。

【讨论】:

  • 不完全是。当然,您可以随时检查您在其他架构上的代码是否存在常见错误,但可能找不到与架构相关的一些问题。对我来说,我发现了一个字节序的错误。在 Linux 32/64 位中,Valgrind 没有任何问题。但是,这是 Sun SPARC 的一个问题。
  • 这就是我所说的“这样 Valgrind 将能够检查你的一些代码,这总比没有好。”由于您在不同的架构上运行,因此不会发现与 8051 相关的架构问题。
  • 我想你应该知道 8051 是什么。它是一个微控制器,而不是通用 CPU。它没有功能齐全的操作系统,许多操作是通过直接 IO 和硬件中断和/或使用非常小的 RTOS 完成的。所以大部分为 8051 写的程序都无法在使用 GCC 的通用 OS 上编译和运行,所以我认为在 Valgrind 下无法检查 8051 内存问题。
  • 你是对的,@jclin,但我不确定你在说什么。不,特定于 8051 的东西不会在 Valgrind 中运行或测试。但我的回答是说 Valgrind 至少可以运行和测试非 8051/IAR 代码,如果它与 8051/IAR 代码分开,然后在 Valgrind 支持的系统上运行。我的回答是否不清楚或具有误导性?如果是这样,您能否提出改进建议?谢谢!
  • 你也是对的。您可以在其他运行 Valgrind 的平台上编译和测试平台无关代码。
【解决方案2】:

你应该检查这个页面,Valgrind Supported Platforms。 Valgrind 不支持 8051 微控制器指令集。

此外,您应该知道 Valgrind 是一个指令模拟器。这意味着您必须在系统上运行 Valgrind,它使用操作系统和 C 或其他 POSIX 库的基础层运行您的代码,以模拟程序的内存读/写或分析。所以8051是不可能运行Valgrind的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-18
    • 1970-01-01
    • 2019-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    • 1970-01-01
    相关资源
    最近更新 更多