2014-02-21 4 views
-1

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

Я это пустое функцию:

void feed(void) 
{ 
IWDG_ReloadCounter(); 
} 

Вот инструкции.

//PUSH REGISTER ONTO STACK 
push {r7} 
//ADD 
add r7, sp, #0 

//??? 
mov.w r3, #12288 
//MOVE TOP 
movt r3, #16384 
//MOVE 16-BIT CONSTANT 
movw r2, #43690 
//STORE REGISTER WORD 
str r2, [r3, #0] 

//MOVE 
mov sp, r7 
//POP REGISTER FROM STACK 
pop {r7} 
//BRANCH INDIRECT 
bx lr 

Может понять, какой из них использовать. У каждого есть некоторые слова мудрости.

+2

Что вы пытаетесь достичь здесь? Компилятор сгенерировал 9 инструкций. Даже если предположить, что вы можете улучшить это, улучшение будет незаметным, если вы не будете запускать код непрерывно в течение нескольких недель. –

+0

То, что я пытаюсь сделать, это заставить это работать, потому что это не так. IWDG_ReloadCounter должен кормить сторожевой таймер, чтобы система не перезапускалась. И когда я пытаюсь использовать сгенерированную сборку для этой функции, ничего не происходит. Это пустота, поэтому мне не нужна вещь о стеке, поэтому из них больше, чем те, которые нажимают на стек и поп, я должен удалить. – mogren3000

+0

Тогда вам нужно изменить свой вопрос. Не совсем ясно, какова ваша цель, и не хватает информации, чтобы помочь диагностировать. –

ответ

0

Поскольку функция выполнена с указателем мне нужно только использовать эти инструкции:

mov.w r3, #12288 
movt r3, #16384 
movw r2, #43690 
str r2, [r3, #0]