【问题标题】:MSP430 instruction cyclesMSP430 指令周期
【发布时间】:2015-02-20 18:00:34
【问题描述】:

您好,我正在使用 contiki os 开发 Tmote sky motes(MSP430 微处理器)。我想知道在我的编程(软件)中进行乘法运算时使用的指令周期数。

谢谢你, 阿维吉特

【问题讨论】:

  • 对于什么类型的数据,整数还是浮点数?
  • 嗨,它仅适用于无符号整数。整数是8位还是16位或32位也有关系吗?因为我有结果(32bit)= x(32bit)* y(8bit)* z(8bit)。
  • 这取决于编译器是否以及如何使用硬件乘法器。显示汇编代码。

标签: msp430 microprocessors


【解决方案1】:

msp430 是 16 位系统,因此不直接支持 32 位值。 32 位操作通常被转换为汇编代码作为 16 位操作序列。

8位和16位操作的执行时间可以在TI application report "The MSP430Hardware Multiplier"找到:

Table 4. CPU Cycles Needed With Different Multiplication Modes

OPERATION: Unsigned Multiply (MPY)
SOFTWARE LOOP: 139...171
HARDWARE MPYer: 8
SPEED INCREASE: 17.4...21.4

OPERATION: Unsigned multiply-and-accumulate (MAC)
SOFTWARE LOOP: 137...169
HARDWARE MPYer: 8
SPEED INCREASE: 17.1...21.1

OPERATION: Signed Multiply (MPYS)
SOFTWARE LOOP: 145...179
HARDWARE MPYer: 8
SPEED INCREASE: 18.1...22.4

OPERATION: Signed multiply-and-accumulate (MAC)
SOFTWARE LOOP: 143...177
HARDWARE MPYer: 17
SPEED INCREASE: 8.4...10.4

硬件乘数应该在默认编译设置下处于活动状态,但请使用msp430-objdump 检查生成的目标文件以确保。

【讨论】:

    【解决方案2】:

    您可以使用 Michael Kohn 的 naken_asm 来禁用 Intel hex 或 ELF 文件,它会计算每条指令的循环计数。我过去使用过它,循环计数器对于 CPU 来说是可以的(例如在你的 Tmote 中),但在 CPUX 中不完全支持。

    您可以从命令行调用它,如下所示:

    naken_util -disasm <infile>
    

    其中 是十六进制或 ELF 文件的名称。默认处理器是 MSP430,但您需要编译器中的汇编列表,以便能够将原始代码与包含循环计数的反汇编代码相匹配。

    另一种选择是使用MSPDebug 的跟踪器选项,它可以跟踪正在运行的软件并提供最新的指令周期计数。但是,我从未将它用于此目的,因此无法提供示例。

    【讨论】:

    • 来自https://github.com/mikeakohn/naken_asm/blob/master/disasm/msp430.c 的源代码,它看起来不像处理算术运算。不过很有趣。
    • @kfx:我认为它确实可以处理它们。我过去用过它,不记得它缺少算术指令。您需要查看代码以及 https://github.com/mikeakohn/naken_asm/blob/master/table/msp430.c,但例如 ADD.w R6,R7 应该由 disasm_msp430() 的 case OP_TWO_OPERAND 处理。只有特殊说明会直接在您链接到的源中处理。
    猜你喜欢
    • 1970-01-01
    • 2016-01-17
    • 2021-06-24
    • 1970-01-01
    • 2020-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-30
    相关资源
    最近更新 更多