Для чего хочу разобраться - в pgmspace.h есть макросы только для чтения из памяти программ, а как туда записать что-то - это вопрос.
Я решил попробовать сделать свой макрос, взяв за основу pgm_read_byte. Подскажите пжлст, если что не так делаю.
avreal писал(а):Третья строка - это "что мы портим из регистров, не указав их в первых двух строках"
Эту фразу не понял.. А если опустить последнюю строчку - тогда что будет?
Тогда компилятор будет считать, что R0 не изменился за время работы макроса. Что там в книге и по Вашей ссылке - не знаю, но в оригинальной документации на gcc и на avr-libc это достаточно понятно.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
uchar писал(а):как туда записать что-то - это вопрос.
Вот ни разу не пользовался записью во флеш из программы, а лезть сейчас в документацию некогда.
В любом случае запись во флеш постраничная.
За основу можете взять макросы из "avr/boot.h"
Или ими же и пользоваться
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Подскажите а как переделать функцию для ее интеграции в код для 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);
}
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, но мне кажется, что если вы добавите в свою программу строку
Установил 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 раз.
установите свежую версию WinAVR - например, 20090313, хотя уже есть релиз этого года с немного улучшенной оптимизацией. И студию рекомендую использовать хотя бы версии 4.16. Такой конфигурацией пользуюсь давно - проблем нет.
P.S. не допускайте русских букв "по пути" к студии и WinAVR.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
ну поставьте предыдущий релиз WinAVR - релиз этого года странно появился: сначала выложили, а через сутки убрали, а потом спустя еще сутки или двое снова выложили, но уже другой архив, хотя назван так же... я успел скачать в первый раз - поставил, все нормально... второй выход скачал, но не стал ставить... может, и правильно сделал? и студию я не обновляю уже давно...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Так и поставил старый релиз- сообщения не вылазят, а все равно в дизасемблере полно сторок "file not found" и строки c адресом папки, которую я пытался подсунуть 2010му WinAVR- где-то оно прописалось так, что удаление программ не помогает ... в общем не работает. Проект встал.
Поудалял все в реестре, что связано со студией и ВинАвр, установил Студию 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 верен, при введение в эксплорер- файл открывается...
ни ошибок, ни предупреждений компилятор не выдает....
Ассемблер при том, что именно там заметил странности после появления сообщений Может и студия. Пока отложил решение проблемы, занимаюсь другими.
Извините, а что такое LSS?
Последний раз редактировалось РобоКОТ Пн фев 08, 2010 14:25:00, всего редактировалось 1 раз.
Я так понял, в нем записан как листинг из *.c фаила, так и листинг из *.lst фаила- чтобы видеть как сишные комманды в асме реализуются. Или там можно еще что-то мега-полезное увидеть?
РобоКОТ писал(а):Я так понял, в нем записан как листинг из *.c фаила, так и листинг из *.lst фаила- чтобы видеть как сишные комманды в асме реализуются. Или там можно еще что-то мега-полезное увидеть?
ну, на счет мега-пользы сложно сказать... но уж не меньшее ее, чем в "плодах" дизассемблера студии
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...