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

 
 
> макросы для ассемблера SAM4L, AtmelStudio
sifadin
сообщение Oct 24 2014, 01:54
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 443
Регистрация: 11-02-09
Пользователь №: 44 698



Здравствуйте!
использую ассемблерные вставки
в проге
Позарез нужно использовать макросы

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

Переменные определяю через .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]");

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

Потенциальное спасибо
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
alexeyv
сообщение Oct 24 2014, 03:12
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 298
Регистрация: 26-01-09
Из: Пермь
Пользователь №: 43 940



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

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)


Сообщение отредактировал alexeyv - Oct 24 2014, 03:17
Go to the top of the page
 
+Quote Post
sifadin
сообщение Oct 24 2014, 15:25
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 443
Регистрация: 11-02-09
Пользователь №: 44 698



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


Простите а Вы уверены, что он подсунет значение luncode а не ее как текст?
Go to the top of the page
 
+Quote Post



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

 


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


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