реклама на сайте
подробности

 
 
> AVR STACK
demiurg_spb
сообщение Aug 6 2008, 10:55
Сообщение #1


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Написал макросы для работы со стеком...
Но я не являюсь спецом по ASM в AVRGCC.
Прошу великих Гуру окинуть сие творчество на передмет косяков...
И вообще, можно-ли в GCC использовать стек в таком ключе или есть нюансы?
Код
// ============================================================================
#define __avr_stack_pop()                 \
(__extension__({                          \
    uint8_t __result;                     \
    __asm__ __volatile__                  \
    (                                     \
        "pop %0"            "\n\t"        \
        : "=r" (__result)                 \
        :                                 \
    );                                    \
    __result;                             \
}))

// ============================================================================
#define __avr_stack_push(value)           \
(__extension__({                          \
    uint8_t __value = (uint8_t)value;     \
    __asm__ __volatile__                  \
    (                                     \
        "push %0"            "\n\t"       \
        :                                 \
        : "r" (__value)                   \
    );                                    \
}))

Тест:
Код
#define stack_push  __avr_stack_push
#define stack_pop   __avr_stack_pop
    unsigned char i = 0;
    do
    {
        stack_push(i);
        i = stack_pop();
    } while (++i<5);

Выход:
Код
    cabe:    80 e0           ldi    r24, 0x00; 0
    cac0:    8f 93           push    r24
    cac2:    8f 91           pop    r24
    cac4:    8f 5f           subi    r24, 0xFF; 255
    cac6:    85 30           cpi    r24, 0x05; 5
    cac8:    d8 f3           brcs    .-10     ; 0xcac0 <main+0x2>


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
KRS
сообщение Aug 6 2008, 11:53
Сообщение #2


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



а для чего вам это надо?
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Aug 6 2008, 12:02
Сообщение #3


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Парсить удобно...

Да ещё была одна задумка, но она похоже накрылсь...

Хотел сохранять номер пункта родительского меню для последующего восстановления при возврате -
но пока не работает - MCU ресетится...
Разбираюсь в чём дело.
Если push и pop в одной процедуре - всё ок....


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 17:22
Рейтинг@Mail.ru


Страница сгенерированна за 0.01397 секунд с 7
ELECTRONIX ©2004-2016