Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: макросы для ассемблера SAM4L
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
sifadin
Здравствуйте!
использую ассемблерные вставки
в проге
Позарез нужно использовать макросы

Иначе это будет сложно отладить

Переменные определяю через .set
asm(".set luncode, r3");
asm(".set lun1code, #0x2000");
asm(".set luncode, lun1code");

а также использую "функции"

asm(".macro SetCE0 lun");

asm(" push {r0, luncode}");
asm(" SetLunCode lun");
asm(" str luncode, [PORT,Icmdrclr]");
asm(" pop {r0, luncode}");

asm(".endm");

Проблема в том что он не раскрывает символические имена переменных
Лепит прямо то что написано

asm(" str luncode, [PORT,Icmdrclr]");

Компилятор ес-сно выдает ошибку
Как ему объяснить чтобы он переварил?

Потенциальное спасибо
alexeyv
Код
а также использую "функции"

asm(".macro SetCE0 lun");

asm(" push {r0, luncode}");
asm(" SetLunCode lun");
asm(" str luncode, [PORT,Icmdrclr]");
asm(" pop {r0, luncode}");

asm(".endm");


1. Макрос это не функция! Макросы в асм это почти тоже самое что и дефайны в Си.
2. А разве можно в асмовских вставках использовать директивы ассеблера? никогда не видел и не делал. Раньше, когда писал на асме, макросы определял в .inc-файлах, которые прицеплял к .asm. Тут получается строки обрабатывает препроцессор Си, потом копилятор, потом (чтобы развернуть директивы асма) препроцессор асма, а потом уже ассемблер. Но вот обработка препроцессором асма меня что-то смущает. А есть ли она?
3.Что Вам мешает добавить в проект асмовский файл, в котором написать функции в соответствии с соглашениями СИ?
4. Или определить сишные дефайны, в которых будете вызывать асмовские вставки?
Код
#define SetCE0(lun)   do{ \
asm(" push {r0, luncode}"); \
asm(" SetLunCode lun"); \
asm(" str luncode, [PORT,Icmdrclr]"); \
asm(" pop {r0, luncode}");\
while(0)
sifadin
Цитата(alexeyv @ Oct 24 2014, 06:12) *
3.Что Вам мешает добавить в проект асмовский файл, в котором написать функции в соответствии с соглашениями СИ?
4. Или определить сишные дефайны, в которых будете вызывать асмовские вставки?


Насчет дефайнов вы мне хорошую вещь подсказали


asm файл можно но как-то для меня необычно

sifadin
Цитата(alexeyv @ Oct 24 2014, 07:12) *
. Или определить сишные дефайны, в которых будете вызывать асмовские вставки?
Код
#define SetCE0(lun)   do{ \
.....
asm(" SetLunCode lun"); \
.....
asm(" pop {r0, luncode}");\
while(0)


Простите а Вы уверены, что он подсунет значение luncode а не ее как текст?
kolobok0
Цитата(sifadin @ Oct 24 2014, 05:54) *
.. asm(" push {r0, luncode}");
...asm(" str luncode, [PORT,Icmdrclr]");
..


если не ошибаюсь, то переменные передаются параметром. а точнее смотрите доки на конкретный компилятор. обещаю - узнаете много новогоsm.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.