0

我需要为没有 FP 单元的Cortex-M3处理器优化一些代码。我对优化领域完全陌生。无论如何,我使用VS 2012 Release Candidate在我的电脑(英特尔酷睿 i5Windows 7作为操作系统)上本地编译代码,然后将它们移植到 Cortex_M3。我尝试将我的代码写在一种尽可能少地使用浮点运算的方法。但我仍然有一些。所以我知道当我将它嵌入到 Cortex_M3 中时,它将利用模拟的 FPU 代码(软件 FPU)。由于我无法对 cortex_m3 进行分析,我在我的电脑上使用 VS2012(仪器方法)来验证哪些功能需要更多时间并且必须进行更多优化。我认为如果我不使用我的 PC 的 FP 单元,我的 PC 上的分析结果可以与 COrtex_M3 的结果成正比。Visual Studio(2008 pro. 或 2012 RC)中是否有允许我跳过(硬件)FP 单元的关键字或方式?

非常感谢您的见解

4

1 回答 1

1

您的 PC 与 Cortex M3 非常不同,在那里执行的优化不太可能有任何相关性。一些不同之处:

  • PC每个周期可以发出多条指令
  • PC每秒有几十亿个这样的周期,而几千万
  • PC 的缓存可能比 M3 的 RAM 多
  • 正如您所观察到的 - 浮点单元

M3 是一款嵌入式处理器 - 如果您无法以传统方式进行分析,要么获得更好的工具集,以便您可以使用设备中的硬件计时器来为您的功能计时,或者手动完成。或者切换一些端口引脚并将示波器挂在上面 - 这是正确嵌入的:)

编辑:


可以在没有操作系统的情况下进行分析 - 高端嵌入式工具链可以检测代码、运行代码并将结果拉回以进行后处理


除了看门狗之外,还有其他硬件定时器。在最简单的级别上,在执行某些任务之前编写一些函数来读取值,然后读取值,减去结果并打印出来。还可以完成更复杂的方案,记录许多迭代并跟踪统计数据等。


如果您有几个端口引脚,只需在要分析的功能之前设置一个,完成后将其清除。

使用 4 通道范围,您可以一次查看 4 段代码的执行时间(以及它们相对于彼此发生的时间,如果有人中断另一段代码,这将很有用)。如果你有更多,得到一个逻辑分析仪,你可以做负载!

您还可以看到执行时间的抖动或变化,这可能具有指导意义。随着角度的变化,在 libc trig 函数上尝试一下,您会发现在某些角度下,sin/cos 函数(例如)运行时间比在其他角度上要长。这在实时系统中可能是一个重大问题。

于 2012-06-27T08:55:29.283 回答