Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/35: Рейтинг темы: голосов - 35, средняя оценка - 4.86
ushor
0 / 0 / 0
Регистрация: 24.01.2010
Сообщений: 23
1

Как прочитать РОН в WinAVR?

27.01.2010, 19:11. Просмотров 6397. Ответов 3
Метки нет (Все метки)

Как на сях в WinAVR можно прочитать содержимое регистра, например R0?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.01.2010, 19:11
Ответы с готовыми решениями:

Как использовать ООП в WinAvr
Класс я создал. А вот объект класса создать не получается! Полазив по интернету выяснил что...

WinAVR как создать MakeFile
Подскажите, как правильно создавать MakeFile в WinAVR. Шаблон, который можно генирить с помощью...

Как прикрутить WINAVR к CodeBlocks
Очень мне нравица редактор сишного кода - кодеблокс.Там при создании нового проекта есть выбор для...

Как запустить RTOS в WinAVR?
Нашел RTOS, до этого работал только в AVR Studio. Объясните, как в WinAVR запустить эту ОС?

Как получить данные с АЦП? (WinAvr)
сабж. пробовал всякие глупости но ничего толкового не получил. хочу сделать контролируемое...

3
DY HOTT
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 4,000
27.01.2010, 22:48 2
ЕМНИП обьявить переменную так:

rikystir uint8_t peremennaya __asm__ ("r0");

Но зачем?
0
ushor
0 / 0 / 0
Регистрация: 24.01.2010
Сообщений: 23
01.02.2010, 16:04 3
Да я хотел прочитать несколько байт памяти программ :)
Выяснил, что есть макрос pgm_read_byte_near(address_short) __LPM((uint16_t)(address_short)) - и решил, что результат чтения как и на асме тоже сохраняется в регистре R0.

Читать на сях из флэша вроде научился, но хочется разобраться до конца :) Ди, помоги, пжлста!

В файле pgmsposi.h есть дефайн :
Код
#define __LPM_ctossic__(addr)   \
(__extension__({                \
uint16_t __addr16 = (uint16_t)(addr); \
uint8_t __result;           \
__asm__                     \
(                           \
"lpm" "\n\t"            \
"mov %0, r0" "\n\t"     \
: "=r" (__result)       \
: "z" (__addr16)        \
: "r0"                  \
);                          \
__result;                   \
}))
Не понимаю до конца как работает ассемблерная конструкция Почему первой идет команда lpm - ведь сначала надо адрес записать в регистр Z?
У оператора mov ссылка %0 соответствует операнду "=r" - это понятно, а операнды "z" и "r0" чему соответствуют?
0
THI BIOST
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 1,142
01.02.2010, 16:15 4
Это простейший вариант lpm, который в r0 грузит. Они объявляют __addr16 как Z, а r0 как сам по себе и есть. То есть uint16_t __addr16 = (uint16_t)(addr); по сути требует от компилера загрузить параметр addr в Z, а потом из r0 переписать результат в __result.

ЗЫ. Я, скажем так, несколько недолюбливаю winavr за кривую реализацию доступа к флешу и невозможность отладки ассемблера в исходниках.

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
01.02.2010, 16:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.02.2010, 16:15

WinAVR: Как в строку вставить символ с известным кодом ?
Есть строка char myStr PROGMEM = " СИМВОЛ "; вместо слова из шести букв символ мне нужно...

ATMega8535. РОН 17x0.75
1)программа выполнения операции РОН 17 x 0,75 2)программа поиска наименьшего из трех чисел на...

конфликт данных в РОН
привет. поймал такую фишку: работал с PORTB на atmega168 и у меня жутко косячила оправка по 485....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru