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

 
 
 
Reply to this topicStart new topic
> Как правильно сделать вставку АСМ кода на С IAR AVR, подскажите, ато уже сил нету
west329_
сообщение May 6 2008, 10:51
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 378
Регистрация: 10-09-07
Из: UKR/Voz
Пользователь №: 30 423



Код
asm ("Label2: nop \n\t"
             "sbr   PORTB,1 \n"
             "jmp   Label2\n");


при такой вставки компилятор ругается и пишет следуещее
Цитата
Error[Og005]: Unknown symbol in inline assembly: "PORTB" E:\RADIO\IAR4.21A\avr\tutor\Xbox2\main.c 237
Error[Og006]: Syntax error in inline assembly: "Error[43]: Illegal effective address" E:\RADIO\IAR4.21A\avr\tutor\Xbox2\main.c 237


когда убераю стороку
Код
"sbr   PORTB,1 \n"

собирает проект нормально.
Подскажите как его заставить видеть свои регистры ???

Сообщение отредактировал west329_ - May 6 2008, 10:53
Go to the top of the page
 
+Quote Post
KRS
сообщение May 6 2008, 12:11
Сообщение #2


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

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



1. Для установки бита в порту используется инструкция SBI
2. PORTB использовать нельзя для встроенного асма он не действует
3. если вы напишите while(1) {__no_operation(); PORTB|=1;} вы получите аналогичный код без всякого асма.
Go to the top of the page
 
+Quote Post
608
сообщение May 6 2008, 12:48
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 70
Регистрация: 8-05-07
Пользователь №: 27 604



Цитата(west329_ @ May 6 2008, 13:51) *
Подскажите

Мне когда-то помогло
Прикрепленные файлы
Прикрепленный файл  asm_in_C.pdf ( 97.9 килобайт ) Кол-во скачиваний: 194
 
Go to the top of the page
 
+Quote Post
sKWO
сообщение May 15 2008, 11:19
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 355
Регистрация: 27-03-07
Из: Україна, Чуднів
Пользователь №: 26 530



Цитата(west329_ @ May 6 2008, 13:51) *
Подскажите как его заставить видеть свои регистры ???

Обращайтесь к их адрессам
Код
IN      R16, 0x13

в регистр 16 копируем состояние пинов порта С меги8535

Цитата(608 @ May 6 2008, 15:48) *
Мне когда-то помогло

ничего не увидел про инлайн ассемблер


--------------------
нельзя недооценивать предсказуемость глупости
Go to the top of the page
 
+Quote Post
608
сообщение May 15 2008, 12:31
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 70
Регистрация: 8-05-07
Пользователь №: 27 604



Цитата(sKWO @ May 15 2008, 14:19) *
ничего не увидел про инлайн ассемблер

Посмотрите еще здесь http://electronix.ru/forum/index.php?showtopic=33328
а в приложении первоисточник по asm inline..
Удачи

Сообщение отредактировал 608 - May 15 2008, 13:07
Прикрепленные файлы
Прикрепленный файл  cavr.pdf ( 1.92 мегабайт ) Кол-во скачиваний: 188
 
Go to the top of the page
 
+Quote Post
Alex_1811
сообщение May 28 2008, 10:38
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 178
Регистрация: 31-10-06
Из: Яблунець
Пользователь №: 21 821



Вопрос!
Во flash объявлен массив Bootstrap;
Как получить адрес массива чтобы использовать его для чтения
данных?

__asm("LDI R30,-младьший байт адреса-");
__asm("LDI R31,-старший байт адреса-");
__asm("LPM R16,Z+");
__asm("LPM R16,Z+");
Go to the top of the page
 
+Quote Post
608
сообщение May 28 2008, 11:22
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 70
Регистрация: 8-05-07
Пользователь №: 27 604



Цитата(Alex_1811 @ May 28 2008, 13:38) *
Как получить адрес массива чтобы использовать его для чтения
данных?

При С-кодировании Ваш массив Bootstrap может быть объявлен во Flash так:
__flash byte Bootstrap []={0x01, 0x64, 0x89, 0x02, 0x00};
Обратите внимание, размерность не задается, т.е. []

А переписать его в другой BS, можно так, и asm не нужен:
for(y=0;y<5;y++){BS[y]=Bootstrap[y];}

Сообщение отредактировал 608 - May 28 2008, 11:25
Go to the top of the page
 
+Quote Post
Alex_1811
сообщение May 29 2008, 12:14
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 178
Регистрация: 31-10-06
Из: Яблунець
Пользователь №: 21 821



Цитата(608 @ May 28 2008, 14:22) *
При С-кодировании Ваш массив Bootstrap может быть объявлен во Flash так:
__flash byte Bootstrap []={0x01, 0x64, 0x89, 0x02, 0x00};
Обратите внимание, размерность не задается, т.е. []

А переписать его в другой BS, можно так, и asm не нужен:
for(y=0;y<5;y++){BS[y]=Bootstrap[y];}


Скорости AVR и так не хватает, каждый такт на счету.
На асме чтение и пересылка в SPI будет на много быстрее.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 08:00
Рейтинг@Mail.ru


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