Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как правильно сделать вставку АСМ кода на С IAR AVR
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
west329_
Код
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"

собирает проект нормально.
Подскажите как его заставить видеть свои регистры ???
KRS
1. Для установки бита в порту используется инструкция SBI
2. PORTB использовать нельзя для встроенного асма он не действует
3. если вы напишите while(1) {__no_operation(); PORTB|=1;} вы получите аналогичный код без всякого асма.
608
Цитата(west329_ @ May 6 2008, 13:51) *
Подскажите

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

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

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

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

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

Посмотрите еще здесь http://electronix.ru/forum/index.php?showtopic=33328
а в приложении первоисточник по asm inline..
Удачи
Alex_1811
Вопрос!
Во flash объявлен массив Bootstrap;
Как получить адрес массива чтобы использовать его для чтения
данных?

__asm("LDI R30,-младьший байт адреса-");
__asm("LDI R31,-старший байт адреса-");
__asm("LPM R16,Z+");
__asm("LPM R16,Z+");
608
Цитата(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];}
Alex_1811
Цитата(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 будет на много быстрее.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.