Хех, точно, никогда не обращал внимание на колонку "TOP" таблицы, теперь хоть знать буду. Спасибо.ARV писал(а):читайте даташит - СТС работает по OCR1A или ICR1.AI_Disable писал(а):А таймер разве не сбросится по достижению OCR1B? Я боялся, что режим CTC выбирается для обоих регистров сравнения одновременно.
WinAvr в вопросах и ответах
- Реклама
Что делает эта функция pgm_read_byte(); и как ее заменить в CVAVR?
Я не Сашок!!!
- Сообщения: 42
- Зарегистрирован: Пн янв 04, 2010 16:06:47
Эта функция отвечает за чтение из флэша, если не ошибаюсь.
в CVAVR вы просто объявляете переменную типа flash char и можете ее использовать вместо этой функции.sachok писал(а):Что делает эта функция pgm_read_byte(); и как ее заменить в CVAVR?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Реклама
Вот это у меня есть:
Нужно переделать под 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Я не Сашок!!!
а почему вы не в теме про CVAVR задаете вопрос?
я же сказал, надо объявлять переменные иначе - вот и все!
я же сказал, надо объявлять переменные иначе - вот и все!
Код: Выделить всё
flash char font_lookup[][] = {...........};
lcd_cache[lcd_cache_index++] = font_lookup[ch - 32][i] << 1;если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Потому что вопрос по переделке кода с WinAVR, AVRGCCARV писал(а):а почему вы не в теме про CVAVR задаете вопрос?
Спасибо!!! Теперь всё понятно стало.
Я не Сашок!!!
- Сообщения: 512
- Зарегистрирован: Вт дек 22, 2009 02:24:50
Не нашёл в дебрях документации, объясните как расшифровать все эти опции командной строки, например:
avr-gcc -I"." -I"../usbdrv" -I"../." -g -mmcu=atmega16 -Wall -DF_CPU=16000000UL -Os -fsigned-char -DDEBUG_LEVEL=2 -c ../usbdrv/usbdrv.c
Если написать
-DF_CPU=16000000UL
без UL будет разница ?
avr-gcc -I"." -I"../usbdrv" -I"../." -g -mmcu=atmega16 -Wall -DF_CPU=16000000UL -Os -fsigned-char -DDEBUG_LEVEL=2 -c ../usbdrv/usbdrv.c
Если написать
-DF_CPU=16000000UL
без UL будет разница ?
- Сообщения: 42
- Зарегистрирован: Пн янв 04, 2010 16:06:47
не возможно, а стопроцентно воспримет как int. по умолчанию все числовые константы воспринимаются, как intminime писал(а):возможно он воспримет число как int без знака
U - без знака
L лонг
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
а почему ж нельзя? если написано на GAS (GNU assembler) - без проблем, а если на обычном-привычном, то придется немного поколдовать с исходником, чтобы WinAVR скомпилировал его...Cat Career писал(а):Народ, а можно к winavr-овскому проекту подключить готовую ассемблеровскую библиотеку? И как это сделать, если можно?
Заранее благодарен за ответ...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
сделать придется минимум следующее:
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 - на английском
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 8
- Зарегистрирован: Чт янв 28, 2010 16:27:21
Поиском не нашел, решил задать вопрос..
Как на сях в WinAVR можно прочитать содержимое регистра, например R0?
Как на сях в WinAVR можно прочитать содержимое регистра, например R0?
зададимся вопросом: а зачем это надо?!uchar писал(а):Поиском не нашел, решил задать вопрос..
Как на сях в WinAVR можно прочитать содержимое регистра, например R0?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 8
- Зарегистрирован: Чт янв 28, 2010 16:27:21
Хотел прочитать несколько байт памяти программ - на асме это делал командой 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" чему соответствуют?
r0 это R0 а z это Zuchar писал(а):У оператора mov ссылка %0 соответствует операнду "=r" - это понятно, а операнды "z" и "r0" чему соответствуют?Код: Выделить всё
: "=r" (__result) \ : "z" (__addr16) \ : "r0" \
Вторая строка "констрейнов" - это "входы" ассемблерной вставки, и тут прописано, что в регистр "z" надо записать значение __addr16.
Получите ассемблерный исходник ключиком -S и посмотрите, что там выполняется непосредственно перед комментарием
/* #APP */
отмечающим начало кода из вставки.
Третья строка - это "что мы портим из регистров, не указав их в первых двух строках"
В документации всё расписано.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
и снова повторюсь: ЗАЧЕМ ЭТО НАДО?uchar писал(а):Хотел прочитать несколько байт памяти программ - на асме это делал командой LPM, в принципе все было понятно.ARV писал(а):зададимся вопросом: а зачем это надо?!
Решил попробовать на С, выяснил, что есть макрос pgm_read_byte_near(address_short) __LPM((uint16_t)(address_short)) - ну и решил,
что результат чтения как и на асме тоже сохраняется в регистре R0.
у вас есть функция pgm_read_byte(addr) - зачем вам приплетать ассемблер?! пользуйтесь на здоровье тем, что уже за вас сделали!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!


