WinAvr в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
uchar
Родился
Сообщения: 8
Зарегистрирован: Чт янв 28, 2010 16:27:21

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

Сообщение uchar »

avreal писал(а):Третья строка - это "что мы портим из регистров, не указав их в первых двух строках"


Эту фразу не понял.. А если опустить последнюю строчку - тогда что будет?



avreal писал(а):В документации всё расписано.


Из документации у меня книга Шпака и инфа с сайта http://avr-libc.narod.ru/11.htm, но мне не все понятно:(
uchar
Родился
Сообщения: 8
Зарегистрирован: Чт янв 28, 2010 16:27:21

?

Сообщение uchar »

Для чего хочу разобраться - в pgmspace.h есть макросы только для чтения из памяти программ, а как туда записать что-то - это вопрос.
Я решил попробовать сделать свой макрос, взяв за основу pgm_read_byte. Подскажите пжлст, если что не так делаю.

Код: Выделить всё

#define __SPM_classic__(addr,m_byte)   \
(__extension__({                \
    uint16_t __addr16 = (uint16_t)(addr); \
    uint8_t __result = (uint16_t)(m_byte);           \
    __asm__                     \
    (                           \
        "spm" "\n\t"            \
        "mov r0, %0" "\n\t"     \
        : "=r" (__result)       \
        : "z" (__addr16)        \
        : "r0"                  \
    );                          \
    __result;                   \
}))
Аватара пользователя
avreal
Опытный кот
Сообщения: 842
Зарегистрирован: Чт дек 31, 2009 19:27:45
Откуда: Бровари, Україна
Контактная информация:

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

Сообщение avreal »

uchar писал(а):
avreal писал(а):Третья строка - это "что мы портим из регистров, не указав их в первых двух строках"
Эту фразу не понял.. А если опустить последнюю строчку - тогда что будет?
Тогда компилятор будет считать, что R0 не изменился за время работы макроса. Что там в книге и по Вашей ссылке - не знаю, но в оригинальной документации на gcc и на avr-libc это достаточно понятно.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Аватара пользователя
avreal
Опытный кот
Сообщения: 842
Зарегистрирован: Чт дек 31, 2009 19:27:45
Откуда: Бровари, Україна
Контактная информация:

Re: ?

Сообщение avreal »

uchar писал(а):как туда записать что-то - это вопрос.
Вот ни разу не пользовался записью во флеш из программы, а лезть сейчас в документацию некогда.
В любом случае запись во флеш постраничная.

За основу можете взять макросы из "avr/boot.h"
Или ими же и пользоваться ;-)
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Vyacheslav
Родился
Сообщения: 1
Зарегистрирован: Ср фев 03, 2010 22:59:48
Контактная информация:

Сообщение Vyacheslav »

Подскажите а как переделать функцию для ее интеграции в код для CodeVisionAVR
*************************************************************************/
void lcd_puts_p(char flash *progmem_s)
/* print string from program memory on lcd (no auto linefeed) */
{
register char c;

while ( (c = pgm_read_byte(progmem_s++)) ) {
lcd_putc(c);
}

}/* lcd_puts_p */
Labus
Открыл глаза
Сообщения: 48
Зарегистрирован: Пн фев 01, 2010 22:48:14

Сообщение Labus »

Наверно несколько страниц назад надо посмотреть.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

Vyacheslav писал(а):Подскажите а как переделать функцию для ее интеграции в код для CodeVisionAVR
*************************************************************************/
void lcd_puts_p(char flash *progmem_s)
/* print string from program memory on lcd (no auto linefeed) */
{
register char c;

while ( (c = pgm_read_byte(progmem_s++)) ) {
lcd_putc(c);
}

}/* lcd_puts_p */
чем же вам бедный CVAVR не угодил, что вы решили из мерзкого кода WinAVR функции портировать? ведь есть все аналоги там и без этого...

я не специалист по CVAVR, но мне кажется, что если вы добавите в свою программу строку

Код: Выделить всё

#define pgm_read_byte(x) (x)
у вас все заработает :)

кстати, ваш код как-то подозрительно выглядит... какой-то он не до конца WinAVR-овский :)
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
РобоКОТ
Открыл глаза
Сообщения: 57
Зарегистрирован: Вс мар 01, 2009 16:41:36
Контактная информация:

Сообщение РобоКОТ »

Установил AVR Studio 4.18 и WinAVR20100110. Теперь при нажатии кнопки "Build and run" появляется окно выбора папки с надписью "please browse to present location for files originally found at c:\avrdev\gcc\gcc-4.3.3\gcc",
то бишь на русском "Пожалуйста, укажите дирректорию, гдг находятся файлы, изначально находившиеся в папке c:\avrdev\gcc\gcc-4.3.3\gcc"
Каталога gcc-4.3.3 не существует...наугад попробовал разные папки из WINAVR подсовывать ему.
В итоге программа работает не так, как надо, а если посмотреть, в дизассемблере- полно строк "file not found"
Установил снова AVR studio 4 и winavr 20080407- то же самое
Не знаю что делать :(
Последний раз редактировалось РобоКОТ Сб фев 06, 2010 13:41:39, всего редактировалось 1 раз.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

установите свежую версию WinAVR - например, 20090313, хотя уже есть релиз этого года с немного улучшенной оптимизацией. И студию рекомендую использовать хотя бы версии 4.16. Такой конфигурацией пользуюсь давно - проблем нет.

P.S. не допускайте русских букв "по пути" к студии и WinAVR.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
РобоКОТ
Открыл глаза
Сообщения: 57
Зарегистрирован: Вс мар 01, 2009 16:41:36
Контактная информация:

Сообщение РобоКОТ »

WinAVR 20100110 какраз этого года и установил поверх студии 4.18- от этого момента проблема и пошла
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

РобоКОТ писал(а):WinAVR 20100110 какраз этого года и установил поверх студии 4.18- от этого момента проблема и пошла
а предыдущие деинсталлировали?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
РобоКОТ
Открыл глаза
Сообщения: 57
Зарегистрирован: Вс мар 01, 2009 16:41:36
Контактная информация:

Сообщение РобоКОТ »

Первый раз нет, но уже раз 5 проделал эту процедуру с перезагрузкими между инсталляцией/деинсталляцией каждого продукта
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

ну поставьте предыдущий релиз WinAVR - релиз этого года странно появился: сначала выложили, а через сутки убрали, а потом спустя еще сутки или двое снова выложили, но уже другой архив, хотя назван так же... я успел скачать в первый раз - поставил, все нормально... второй выход скачал, но не стал ставить... может, и правильно сделал? ;) и студию я не обновляю уже давно...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
РобоКОТ
Открыл глаза
Сообщения: 57
Зарегистрирован: Вс мар 01, 2009 16:41:36
Контактная информация:

Сообщение РобоКОТ »

Так и поставил старый релиз- сообщения не вылазят, а все равно в дизасемблере полно сторок "file not found" и строки c адресом папки, которую я пытался подсунуть 2010му WinAVR- где-то оно прописалось так, что удаление программ не помогает :(... в общем не работает. Проект встал.
Аватара пользователя
РобоКОТ
Открыл глаза
Сообщения: 57
Зарегистрирован: Вс мар 01, 2009 16:41:36
Контактная информация:

Сообщение РобоКОТ »

Поудалял все в реестре, что связано со студией и ВинАвр, установил Студию 4.17 и ВинАВР 2008407 туда, куда просятся...компилируется без ошибок, сообщений, НО открываю дизассемблер и виижу:

@00000000: _delay_loop_2
---- UNKNOWN_FILE ------
0: File not found
+00000000: C012 RJMP PC+0x0013 Relative jump
+00000001: C02C RJMP PC+0x002D Relative jump
+00000002: C02B RJMP PC+0x002C Relative jump
---------- так далее---------------------
Глупый вопрос: Может это нормально "0: File not found" ? Данный текст появляется вначале ассемблерного листинга и там, где должен подключаться файл delay.h. При чем путь к файлу delay.h верен, при введение в эксплорер- файл открывается...
ни ошибок, ни предупреждений компилятор не выдает....
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

извините, а при чем тут дизассемблер? может, это студия чего-то не находит? я обычно LSS смотрю - листинг :)
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
РобоКОТ
Открыл глаза
Сообщения: 57
Зарегистрирован: Вс мар 01, 2009 16:41:36
Контактная информация:

Сообщение РобоКОТ »

Ассемблер при том, что именно там заметил странности после появления сообщений :) Может и студия. Пока отложил решение проблемы, занимаюсь другими.
Извините, а что такое LSS?
Последний раз редактировалось РобоКОТ Пн фев 08, 2010 14:25:00, всего редактировалось 1 раз.
Labus
Открыл глаза
Сообщения: 48
Зарегистрирован: Пн фев 01, 2010 22:48:14

Сообщение Labus »

Наверно это расширение файла с личтингом .lss
Аватара пользователя
РобоКОТ
Открыл глаза
Сообщения: 57
Зарегистрирован: Вс мар 01, 2009 16:41:36
Контактная информация:

Сообщение РобоКОТ »

Я так понял, в нем записан как листинг из *.c фаила, так и листинг из *.lst фаила- чтобы видеть как сишные комманды в асме реализуются. Или там можно еще что-то мега-полезное увидеть?
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

РобоКОТ писал(а):Я так понял, в нем записан как листинг из *.c фаила, так и листинг из *.lst фаила- чтобы видеть как сишные комманды в асме реализуются. Или там можно еще что-то мега-полезное увидеть?
ну, на счет мега-пользы сложно сказать... но уж не меньшее ее, чем в "плодах" дизассемблера студии :)
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Ответить

Вернуться в «AVR»