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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

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

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

Сообщение ARV »

FreshMan писал(а):как правильно писать-читать переменную в eeprom ?

для WinAVR так: http://www.simple-devices.ru/attachment ... 1_2011.pdf
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Реклама
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

ага......, исходя из вашего мануала байт можна записать двумя способами
при помощи макроса
_EEPUT(var, addr)
и при помощи функции
eeprom_write_byte()
void eeprom_write_byte (uint8_t *p, uint8_t value)
а в чем разница то ?
когда, в каких обстоятельствах, какому способу надо отдавать предпочтение ?
Tell Me The Truth
Аватара пользователя
ИС-пытатель
Вымогатель припоя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

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

Сообщение ИС-пытатель »

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

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

Сообщение ARV »

FreshMan писал(а):когда, в каких обстоятельствах, какому способу надо отдавать предпочтение ?

если вы внимательно прочитали мою статью, то должны были видеть, что макрос _EEPUT введен для совместимости с IAR (причем довольно древним). таким образом должно быть ясно, что этим макросом не нужно пользоваться, он будет использован автоматически, если вы начнете собирать проект, изначально созданный в IAR. то есть если в ИАРОВСКОМ исходнике будет задействован такой макрос - сборке проекта это не помешает.

в своих проектах, если вы так же не планируете компилировать их в IAR-е, никогда этот макрос использовать не надо.

P.S. в GCC принято, что макросы, функции и переменные (в общем, все объекты), имена которых начинаются с подчеркивания, относятся как бы к внутреннему использованию. а если с двух подчеркиваний - то это как бы еще глубже. в общем, чем больше стартовых подчеркиваний в имени, тем меньше вероятность того, что вам это действительно следует использовать :) скажем так: все, что начинается с подчеркивания - это немного скользкая вещь, обращаться с которой нужно крайне осторожно и с повышенным вниманием, углубленно изучая документацию и тонкости реализации конкретной сборки компилятора.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Реклама
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

ИС-пытатель, дружище, разницу между этими вещеми я знаю :wink: ты мальца не уразумел мое вопрошание :)
ARV, я тут читал что если в проэкте задействована ф-ция записи в eeprom и девайс планируется переодически включать-выключать то имеется весьма БОЛЬШАЯ вероятность того, что при снижении питания ниже определенного уровня мк начнет писать в оную память всякий мусор, а поскольку ресурс этой памяти невелик то и "тапки"и могут случится в самый неподходящий момент.
страхуетесь ли вы как-то от этого ?
Tell Me The Truth
Реклама
Аватара пользователя
ИС-пытатель
Вымогатель припоя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

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

Сообщение ИС-пытатель »

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

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

Сообщение ARV »

FreshMan писал(а):имеется весьма БОЛЬШАЯ вероятность

как вы оцениваете эту вероятность? просто по чьим-то словам или есть какие-то поддающиеся измерению критерии?
давайте просто посчитаем.
ресурс EEPROM, гарантируемый производителем AVR, составляет не менее 100000 циклов стирание-запись. если вы будете включать/вылючать свой девайс 2 раза в сутки, и осуществлять запись в EEPROM столько же раз, то ячейки прослужат гаратированно 136 лет. если вы будете тыркать питание своего девайса по 200 раз в день, то и в этом случае ячейки прослужат 1,3 года (за это время выключатель питания скорее откажет).

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

Мой уютный бложик... заходите!
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

ARV писал(а):вы все еще считаете, что ваш девайс требует особых мер по обеспечению долгого срока службы?

:)) , Боже упаси, я ж не синхрофазотрон собираю :))
просто я считаю, что делать надо всегда хорошо, а плохо оно само собой выйдет :))
предположение было такое, что при вкл-выкл, когда питание опускается ниже определенного порога мк делает подряд несколько десятков или сотень перезаписей
кстати, может соориентируете меня, сколько времени занимает запись в оную память ?
Tell Me The Truth
Аватара пользователя
ИС-пытатель
Вымогатель припоя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

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

Сообщение ИС-пытатель »

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

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

Сообщение ARV »

FreshMan писал(а):при вкл-выкл, когда питание опускается ниже определенного порога мк делает подряд несколько десятков или сотень перезаписей

это с чего бы вдруг?

неприятность может быть в том случае, если после начала цикла записи или стирания ячейки питание вдруг пропало.
в старых МК так же была проблема, когда при медленно нарастающем питании (при старте МК) иногда происходила запись мусора в нулевую (есть инфа, что в случайную) ячейку - но, вроде бы, уже давно Atmel эту проблему победил, да и включение BOD эту проблему всегда решало.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

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

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

Сообщение ARV »

потому что EEPROM - это не ОЗУ.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

Потому что доступ к EEPROM осуществляется через пару регистров - адреса и данных, она не наъходится в общем адресном пространстве и одной командой получить доступ к EEPROM ячейке нельзя, как минимум надо сделать две операции ввода-вывода.
Но ведь ничто вам не мешает "просто объявить" константы адресов EEPROM ячеек.
Аватара пользователя
Gek0n
Встал на лапы
Сообщения: 149
Зарегистрирован: Чт мар 04, 2010 19:53:19
Откуда: Россия, Краснодарский край, Армавир
Контактная информация:

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

Сообщение Gek0n »

Выручайте! Сил, после многочасового поиска ответа в интернете и метода проб и ошибок, осталось только на то, чтобы ругаться и злиться!

Хочу собрать схемку http://cxem.net/mc/mc51.php (маленький SD WAV плеер на ATTINY). Аналог и на Радиокоте есть. Всё готово кроме программы. Мне не нравится их исходник. Хочу покопаться, заодно уменьшить размер путем выкидывания всего не нужного мне.

Чтобы получить измененный код для прошивки надо откомпилировать и собрать новые исходники, а у меня не получается!!!

Значит по порядку: в пакете WINAVR через блокнот программиста создаю новый проект, всё указываю как надо, добавляю файлы. Потом импортирую Makefile, который поставляется с прошивкой. Ничего не собирается, так как Makefile "не нравится" программе. Создаю новый Makefile, прописываю в него всё, что было в старом как надо (без ошибок). Теперь всё компилится но не видит импортируемые файлы (лежат в папке с проектом). Везде написано, что Makefile сам при сборке учитывает зависимости и компилит их, а нам надо указать только TARGET.c и всё.

Далее пробовал AVR Studio 4. Этот не видит не только зависимости, но и стандартные библиотеки (h файлы). Вот и тут я пробовал и старый и новый Makefile. Не помогает!

Пожалуйста избавьте меня от мучений. Если дело в "криво" настроенных и установленных программках, то пожалуйста дайте статью, исчерпывающе описывающую процесс настройки "под ключ" этих программ.

Огромное спасибо, надеюсь на вашу помощь!
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

Да, все на грабли наступали... убери с путей русские буквы и пробелы... 21-й век, для некоторых программ является шоком использование пробелов и отличных от латиницы символов.
Аватара пользователя
Gek0n
Встал на лапы
Сообщения: 149
Зарегистрирован: Чт мар 04, 2010 19:53:19
Откуда: Россия, Краснодарский край, Армавир
Контактная информация:

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

Сообщение Gek0n »

Заново начал всё делать в WIN AVR (раньше он у меня с простыми однофайловыми программами работал, поэтому начал разбираться с него).
Создал папку без русских символов в путях. Внутрь поместил все исходники из архива. Заново сам создал Makefile с помощью утилиты MFile. Прописал туда все свои файлы исходного кода.

И всё равно не компилится. Думаю проблема вот с чем: кто открывал архив, видел что в проекте есть файл asmfunc.S. Там описаны функции задержки и ещё кое-что по мелочи. Я сначала подключал этот файл в Makefile в переменную ASRC = asmfunc.S.
Но ничего не компилилось. Выдавало ошибку "Нет правил для создания main.elf".

Потом я удалил Makefile и создал новый. Начал поочередно прописывать разные опции и компилировать. В один момент заметил что затерлись (не знаю как) .h файлы, но они были открыты в Programmer's notepad, поэтому я их пересохранил. После этого (и указания файла asmfunc.S как исходника на ассемблере) всё скомпилировалось!

Подведу итог:
Спойлер1)Создаем в корне диска C (или любого другого) папку с английским названием (например AVR_Projects). Пробелов на всякий случай тоже лучше избегать.
2)Копируем туда все файлы исходного кода. Открываем их все в Programmer's notepad.
3) Создаем Makefile и сохраняем его в эту же папку с проектом, предварительно указав в качестве TARGET имя исходного файла с функцией main
4) Пытаемся компилить, и если умеем читать, то видим что сначала не хватает файлов, потом надо указать тип контроллера, потом частоту, и т. д. (все найденные ошибки устраняем и снова пробуем компилить. И так до тех пор, пока не получится)
5) Видим после успешной компиляции надпись:
> Process Exit Code: 0
6) Profit!


Спасибо за помощь. Надеюсь мои выводы помогут кому-нибудь!
codenamehawk
Вымогатель припоя
Сообщения: 528
Зарегистрирован: Вт фев 09, 2010 17:52:26

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

Сообщение codenamehawk »

Gek0n писал(а):


Всего то и надо было, извлечь все файлы из mc51_sd_player.zip в одну папку и переименовать один из файлов Makefile_hr Makefile_mo Makefile_st в Makefile .
В Programmers Notepad открываешь main.c и запускаешь компиляцию.
Аватара пользователя
Gek0n
Встал на лапы
Сообщения: 149
Зарегистрирован: Чт мар 04, 2010 19:53:19
Откуда: Россия, Краснодарский край, Армавир
Контактная информация:

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

Сообщение Gek0n »

Замечу, что именно так я и поступал по-началу. Но ничего из этого не вышло! Ошибка компиляции всё равно выскакивала. Каждый раз говорилось что нету правил для преобразования main.c в elf. Потом я сделал как описано выше и получил результат, который меня удовлетворил.
codenamehawk
Вымогатель припоя
Сообщения: 528
Зарегистрирован: Вт фев 09, 2010 17:52:26

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

Сообщение codenamehawk »

Gek0n писал(а):Замечу, что именно так я и поступал по-началу. Но ничего из этого не вышло!


Gek0n писал(а):Значит по порядку: в пакете WINAVR через блокнот программиста создаю новый проект, всё указываю как надо, добавляю файлы. Потом импортирую Makefile, который поставляется с прошивкой.


Так как было на самом деле?
Ответить

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