您好我正在研究带有contiki操作系统的Tmote sky motes(MSP430微处理器)。我想知道在编程(软件)中进行乘法运算时使用的指令周期数。
谢谢你, Avijit
答案 0 :(得分:0)
msp430是一个16位系统,因此不直接支持32位值。通常将32位操作转换为汇编代码,作为16位操作序列。
可以在TI application report "The MSP430Hardware Multiplier":
中找到8位和16位操作的执行时间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
HW乘数应该在默认编译设置下处于活动状态,但请使用msp430-objdump
检查生成的目标文件以确保。
答案 1 :(得分:0)
您可以使用Michael Kohn的naken_asm来解除Intel十六进制或ELF文件,并计算每条指令的周期数。我过去曾经使用它,循环计数器对于CPU来说是可以的(例如在你的Tmote中)但在CPUX中并不完全支持。
您可以从命令行调用它,只需:
naken_util -disasm <infile>
其中&lt; infile&gt;是十六进制或ELF文件的名称。默认处理器是MSP430,但您需要编译器中的汇编列表,以便能够将原始代码与包含循环计数的反汇编代码进行匹配。
另一种选择是使用MSPDebug的跟踪选项,它可以跟踪正在运行的软件并提供最新的指令周期计数。但是,我从未将它用于此目的,因此无法提供示例。