Хех, точно, никогда не обращал внимание на колонку "TOP" таблицы, теперь хоть знать буду. Спасибо.ARV писал(а):читайте даташит - СТС работает по OCR1A или ICR1.AI_Disable писал(а):А таймер разве не сбросится по достижению OCR1B? Я боялся, что режим CTC выбирается для обоих регистров сравнения одновременно.
WinAvr в вопросах и ответах
- AI_Disable
- Сверлит текстолит когтями
- Сообщения: 1116
- Зарегистрирован: Чт окт 15, 2009 14:16:18
- Откуда: Екб
- Контактная информация:
- Реклама
- AI_Disable
- Сверлит текстолит когтями
- Сообщения: 1116
- Зарегистрирован: Чт окт 15, 2009 14:16:18
- Откуда: Екб
- Контактная информация:
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18556
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
в CVAVR вы просто объявляете переменную типа flash char и можете ее использовать вместо этой функции.sachok писал(а):Что делает эта функция pgm_read_byte(); и как ее заменить в CVAVR?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Реклама
- sachok
- Опытный кот
- Сообщения: 849
- Зарегистрирован: Сб янв 05, 2008 11:05:15
- Откуда: Україна м.Луцьк
- Контактная информация:
Вот это у меня есть:
Нужно переделать под CVAVR, если просто убрать то не работает.
Код: Выделить всё
void lcd_chr (unsigned char size, unsigned char ch )
{
unsigned char i, c;
if ( size == font_1x )
{
for ( i = 0; i < 5; i++ )
{
/* Copy lookup table from Flash ROM to LcdCache */
lcd_cache[lcd_cache_index++] = pgm_read_byte(&( font_lookup[ ch - 32 ][ i ] ) ) << 1;
}
}
}Код: Выделить всё
pgm_read_byteЯ не Сашок!!!
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18556
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
а почему вы не в теме про CVAVR задаете вопрос?
я же сказал, надо объявлять переменные иначе - вот и все!
я же сказал, надо объявлять переменные иначе - вот и все!
Код: Выделить всё
flash char font_lookup[][] = {...........};
lcd_cache[lcd_cache_index++] = font_lookup[ch - 32][i] << 1;если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18556
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
не возможно, а стопроцентно воспримет как int. по умолчанию все числовые константы воспринимаются, как intminime писал(а):возможно он воспримет число как int без знака
U - без знака
L лонг
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Cat Career
- Родился
- Сообщения: 12
- Зарегистрирован: Пн янв 11, 2010 12:51:31
- Откуда: Санкт-Петербург
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18556
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
а почему ж нельзя? если написано на GAS (GNU assembler) - без проблем, а если на обычном-привычном, то придется немного поколдовать с исходником, чтобы WinAVR скомпилировал его...Cat Career писал(а):Народ, а можно к winavr-овскому проекту подключить готовую ассемблеровскую библиотеку? И как это сделать, если можно?
Заранее благодарен за ответ...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Cat Career
- Родился
- Сообщения: 12
- Зарегистрирован: Пн янв 11, 2010 12:51:31
- Откуда: Санкт-Петербург
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18556
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
сделать придется минимум следующее:
1. переименовать файл ассемблера так, чтобы расширение стало .s
2. в функциях ассемблерного файла перераспределить регистры так, как требует WinAVR для функций для параметров и результата
3. описать секции и имена функций
4. описать переменные, если требуется
5. сделать заголовочный файл (.h) с описанием функций и данных ассемблерного модуля.
после этого компилировать проект
P.S. все необходимые манипуляции описаны в разделе документации к avr-libc из комплекта WinAVR - на английском
1. переименовать файл ассемблера так, чтобы расширение стало .s
2. в функциях ассемблерного файла перераспределить регистры так, как требует WinAVR для функций для параметров и результата
3. описать секции и имена функций
4. описать переменные, если требуется
5. сделать заголовочный файл (.h) с описанием функций и данных ассемблерного модуля.
после этого компилировать проект
P.S. все необходимые манипуляции описаны в разделе документации к avr-libc из комплекта WinAVR - на английском
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Как прочитать РОН в WinAVR?
Поиском не нашел, решил задать вопрос..
Как на сях в WinAVR можно прочитать содержимое регистра, например R0?
Как на сях в WinAVR можно прочитать содержимое регистра, например R0?
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18556
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Как прочитать РОН в WinAVR?
зададимся вопросом: а зачем это надо?!uchar писал(а):Поиском не нашел, решил задать вопрос..
Как на сях в WinAVR можно прочитать содержимое регистра, например R0?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Как прочитать РОН в WinAVR?
Хотел прочитать несколько байт памяти программ - на асме это делал командой LPM, в принципе все было понятно.ARV писал(а):зададимся вопросом: а зачем это надо?!uchar писал(а):Поиском не нашел, решил задать вопрос..
Как на сях в WinAVR можно прочитать содержимое регистра, например R0?
Решил попробовать на С, выяснил, что есть макрос pgm_read_byte_near(address_short) __LPM((uint16_t)(address_short)) - ну и решил,
что результат чтения как и на асме тоже сохраняется в регистре R0.
Сейчас уже разобрался как читать из flash-памяти, поковырял файл pgmspace.h, есть там дефайн такой :
Код: Выделить всё
#define __LPM_classic__(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; \
}))
У оператора mov ссылка %0 соответствует операнду "=r" - это понятно, а операнды "z" и "r0" чему соответствуют?
- avreal
- Опытный кот
- Сообщения: 842
- Зарегистрирован: Чт дек 31, 2009 19:27:45
- Откуда: Бровари, Україна
- Контактная информация:
Re: Как прочитать РОН в WinAVR?
r0 это R0 а z это Zuchar писал(а):У оператора mov ссылка %0 соответствует операнду "=r" - это понятно, а операнды "z" и "r0" чему соответствуют?Код: Выделить всё
: "=r" (__result) \ : "z" (__addr16) \ : "r0" \
Вторая строка "констрейнов" - это "входы" ассемблерной вставки, и тут прописано, что в регистр "z" надо записать значение __addr16.
Получите ассемблерный исходник ключиком -S и посмотрите, что там выполняется непосредственно перед комментарием
/* #APP */
отмечающим начало кода из вставки.
Третья строка - это "что мы портим из регистров, не указав их в первых двух строках"
В документации всё расписано.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18556
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Как прочитать РОН в WinAVR?
и снова повторюсь: ЗАЧЕМ ЭТО НАДО?uchar писал(а):Хотел прочитать несколько байт памяти программ - на асме это делал командой LPM, в принципе все было понятно.ARV писал(а):зададимся вопросом: а зачем это надо?!
Решил попробовать на С, выяснил, что есть макрос pgm_read_byte_near(address_short) __LPM((uint16_t)(address_short)) - ну и решил,
что результат чтения как и на асме тоже сохраняется в регистре R0.
у вас есть функция pgm_read_byte(addr) - зачем вам приплетать ассемблер?! пользуйтесь на здоровье тем, что уже за вас сделали!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!


