WinAvr в вопросах и ответах
Re: WinAvr в вопросах и ответах
можно вызвать одну функцию. сама запишет (при необходимости) 5 символов:
char src[] = "12345";
eeprom_update_block ((void*)src, (void *)0, 5);
char src[] = "12345";
eeprom_update_block ((void*)src, (void *)0, 5);
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: WinAvr в вопросах и ответах
a_skr писал(а):можно вызвать одну функцию. сама запишет (при необходимости) 5 символов:
char src[] = "12345";
eeprom_update_block ((void*)src, (void *)0, 5);
А как программа узнает где эта переменная должна находиться?
Разве спецификатор EEMEM не нужно использовать?
Если подсказывать, то полностью.
Re: WinAvr в вопросах и ответах
а я не заводил переменной EEMEM, а указал явный адрес в EEPROM - ноль (второй параметр функции eeprom_update_block) и копирую туда строку src из ОЗУ. можно завести и переменную в EEPROM. вопрос был "как записать в еепром строку длиной 5 символов".
Re: WinAvr в вопросах и ответах
Ромыч писал(а):как записать в еепром строку длинной в 5 символов
В яндекс вбиваешь вопрос свой и получишь что то типа такого:
http://samou4ka.net/page/chtenie-i-zapi ... m-v-winavr
- Ромыч
- Прорезались зубы
- Сообщения: 210
- Зарегистрирован: Ср янв 06, 2010 22:02:25
- Откуда: Уфа сити
- Контактная информация:
Re: WinAvr в вопросах и ответах
я пока так и сделал. спасибо. а теперь вопрос реально нубасский
есть, скажем, массив[20] с полезными 8 ячейками. чтобы добавить девятую надо искать первый ноль в массиве (если полезное значение в любом случае !=0)? эх... работала бы отладка студио-протеус с бреками по си, а не по ассемблеру.....
Что в цивилизованном мире называют "устаревшие технологии", в России зовется "технологии, проверенные временем"
- Ромыч
- Прорезались зубы
- Сообщения: 210
- Зарегистрирован: Ср янв 06, 2010 22:02:25
- Откуда: Уфа сити
- Контактная информация:
Re: WinAvr в вопросах и ответах
оптимизация отключена, выбрать свой *.с не получается, для трассировки доступна только delay.c
на этом шаге у меня и есть заминка... прошивка - .елф

на этом шаге у меня и есть заминка... прошивка - .елф
Спойлер

Последний раз редактировалось Gudd-Head Ср май 15, 2013 14:23:59, всего редактировалось 1 раз.
Причина: Нарушение п.2.6 Правил Форума
Причина: Нарушение п.2.6 Правил Форума
Что в цивилизованном мире называют "устаревшие технологии", в России зовется "технологии, проверенные временем"
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: WinAvr в вопросах и ответах
a_skr писал(а):а я не заводил переменной EEMEM, а указал явный адрес в EEPROM - ноль (второй параметр функции eeprom_update_block) и копирую туда строку src из ОЗУ. можно завести и переменную в EEPROM. вопрос был "как записать в еепром строку длиной 5 символов".
Хорошее дело, а потом путаться что по какому адресу находится, лучше бы реально полезный пример
Я то понял как можно, но не все так понимают.- ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
Re: WinAvr в вопросах и ответах
vitalik_1984, а Ваши два сообщения прямо блещут полезностью? по мне так a_skr помог больше, чем Вы.
Ставим плюсы: )
- Ромыч
- Прорезались зубы
- Сообщения: 210
- Зарегистрирован: Ср янв 06, 2010 22:02:25
- Откуда: Уфа сити
- Контактная информация:
Re: WinAvr в вопросах и ответах
ребят, по моему вопросу. Почему реально он лезет за исходником в програм файлс? прошелся по этому .елф хексом - это путь к тулчейну студии. в настройках у нее такой же стоит. студия шестая кстати..
Что в цивилизованном мире называют "устаревшие технологии", в России зовется "технологии, проверенные временем"
Re: WinAvr в вопросах и ответах
Ромыч писал(а):есть, скажем, массив[20] с полезными 8 ячейками. чтобы добавить девятую надо искать первый ноль в массиве (если полезное значение в любом случае !=0)?
ну да, а как иначе? Можно держать массив в памяти и по нему смотреть где ноль. или при очистке значения (установке его в ноль) запоминаешь где-нить номер ячейки. И при записи просто пишешь в этот номер. Но тут надо при записи тогда искать новый ноль, если у тебя может сразу следовать новая запись.
Ну или если в программировании нормально секешь то организуй буфер FIFO на базе связного списка с указателями и ты всегда будешь знать где у тебя ноль и есть ли ще вообще пустые ячейки.
- uni
- Встал на лапы
- Сообщения: 137
- Зарегистрирован: Пт дек 07, 2007 11:17:40
- Откуда: г. Екатеринбург
- Контактная информация:
Re: WinAvr в вопросах и ответах
Файл dsn должен находиться в корне C проекта. Это один из самых часто задаваемых вопросов по Proteus.
Россия навсегда!
- Ромыч
- Прорезались зубы
- Сообщения: 210
- Зарегистрирован: Ср янв 06, 2010 22:02:25
- Откуда: Уфа сити
- Контактная информация:
Re: WinAvr в вопросах и ответах
скажите, а реально программно понизить частоту процессора? скажем, в простое в каком то состоянии ожидания понизить, потом по необходимости повысить, когда применение вачдога невозможно
Что в цивилизованном мире называют "устаревшие технологии", в России зовется "технологии, проверенные временем"
- ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
Re: WinAvr в вопросах и ответах
в некоторых AVR есть, в некоторых нет. На память помню единственный с такой возможностью: ATtiny2313. Надо смотреть даташит на конкретный контроллер в разделе Clock System.
Ставим плюсы: )
Re: WinAvr в вопросах и ответах
Пишу прошивку для ATMega88PA-AU. ВинАвр такого не принимает, поэтому указал MCU = atmega88pa, но при этом он ругается на таймеры:
какой файл надо заинключить или что сделать?
До этого писал для атмеги16, подключал только
и все работало. Тут не проходит такой фокус.
Код: Выделить всё
main.c:78: error: 'TCCR0' undeclared (first use in this function)
main.c:78: error: (Each undeclared identifier is reported only once
main.c:78: error: for each function it appears in.)
main.c:79: error: 'TIMSK' undeclared (first use in this function)
main.c: In function '__vector_16':
main.c:91: error: 'TCCR0' undeclared (first use in this function)
make.exe: *** [main.o] Error 1
какой файл надо заинключить или что сделать?
До этого писал для атмеги16, подключал только
Код: Выделить всё
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
и все работало. Тут не проходит такой фокус.
- Ромыч
- Прорезались зубы
- Сообщения: 210
- Зарегистрирован: Ср янв 06, 2010 22:02:25
- Откуда: Уфа сити
- Контактная информация:
Re: WinAvr в вопросах и ответах
а если просто atmega88 прпробовать? обычно всякие PU, L и прочие окончания не ставятся
Что в цивилизованном мире называют "устаревшие технологии", в России зовется "технологии, проверенные временем"
Re: WinAvr в вопросах и ответах
пробовал. Изначально так и было, пока до таймеров не дошел.
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: WinAvr в вопросах и ответах
Ромыч писал(а):а если просто atmega88 попробовать? обычно всякие PU, L и прочие окончания не ставятся
Что пробовать то Есть файл - костыль io.h в нем конкретно для каждого мк прописан заголовочный файл, который подходит для каждого мк.
Далее если с io.h не происходит ошибок, значит соответствующий заголовок atmegaxx.h для мк загружается.
Так же это значит,что некоторые регистры в мк 88 отличаются от того, что пытаются использовать в программе.
Вот документы, в них написано, что все обновления и модификации сделаны с учетом старых регистров и таким образом имеют обратную совместимость.
AVR512: Migration from ATmega48/88/168 to ATmega48P/88P/168P
AVR528: Migrating from ATmega48P/88P/168P to ATmega48PA/88PA/168PA
При этом еще нужно нормально в проекте указывать камень, иначе не будет правильно работать данный костыль.
Далее берем регистр, которого якобы нет в камне TCCR0 находим в даташите TCCR0B Опа не хватает буквы.
Смотрим по коду какой бит меняется и заменяем обращение к неопределенному регистру на нормальное.
Либо тогда уже если хочется обращаться как к двухбайтному регистру, тогда прописываем в заголовочном адреса первых байт этих регистров.
PS есть в обиходе и 88P и 88PA
Вот копия строки вызова компилятора из Студии
avr-gcc -mmcu=atmega88pa -Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT 3123.o -MF dep/3123.o.d -c ../3123.c
Re: WinAvr в вопросах и ответах
А io.h я так понимаю автоматом подгружается? Заменил названия регистров, все зашуршало....
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: WinAvr в вопросах и ответах
Нет, io.h вы записываете, а из него автоматом в соответствии с ключами компиляции для конкретного Мк препроцессор подключает нужные заголовочные файлы.