Командные циклы MSP430

Привет, я работаю над Tmote sky motes (микропроцессор MSP430) с contiki os. Я хочу знать количество командных циклов, используемых при выполнении операции умножения в моем программном обеспечении (программном обеспечении).

Спасибо, Авиджит.


person aviian7    schedule 20.02.2015    source источник
comment
Для какого типа данных, целых чисел или чисел с плавающей запятой?   -  person Ross    schedule 20.02.2015
comment
Привет, это только для целых чисел без знака. также будет ли иметь значение, является ли целое число 8-битным, 16-битным или 32-битным? так как у меня есть результат (32 бита) = x (32 бита) * y (8 бит) * z (8 бит).   -  person aviian7    schedule 20.02.2015
comment
Это зависит от того, использует ли компилятор аппаратный множитель и как. Покажите ассемблерный код.   -  person CL.    schedule 20.02.2015


Ответы (2)


Msp430 — это 16-битная система, поэтому 32-битные значения напрямую не поддерживаются. 32-битная операция обычно транслируется в ассемблерный код как последовательность 16-битных операций.

Время выполнения 8-битных и 16-битных операций можно найти в Отчет о применении TI "Аппаратный множитель MSP430":

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, чтобы убедиться.

person kfx    schedule 24.02.2015

Вы можете использовать naken_asm Майкла Кона, чтобы разобрать шестнадцатеричный или ELF-файл Intel, и он рассчитает цикл считается для каждой инструкции. Я использовал его в прошлом, и счетчик циклов подходит для ЦП (например, в вашем Tmote), но не полностью поддерживается в CPUX.

Вы можете вызвать его из командной строки так же просто, как:

naken_util -disasm <infile>

где ‹infile› — это имя вашего шестнадцатеричного или ELF-файла. Процессор по умолчанию — MSP430, но вам понадобится листинг сборки из вашего компилятора, чтобы иметь возможность сопоставить исходный код с дизассемблированным кодом, который включает количество циклов.

Другой альтернативой может быть использование параметра трассировки MSPDebug, который может отслеживать работающее программное обеспечение и предоставлять актуальные инструкции. количество циклов. Однако я никогда не использовал его для этой цели, поэтому не могу привести пример.

person tinman    schedule 04.03.2015
comment
Из исходника на https://github.com/mikeakohn/naken_asm/blob/master/disasm/msp430.c не похоже, что он обрабатывает арифметические операции. Интересно однако. - person kfx; 08.03.2015
comment
@kfx: я думаю, что он с ними справляется. Я использовал его в прошлом и не помню, чтобы в нем отсутствовали арифметические инструкции. Вам нужно посмотреть код, а также https://github.com/mikeakohn/naken_asm/blob/master/table/msp430.c, но, например, ADD.w R6,R7 должен обрабатываться case OP_TWO_OPERAND disasm_msp430(). Только специальные инструкции обрабатываются непосредственно в источнике, на который вы ссылаетесь. - person tinman; 09.03.2015