Разместить данные в EEPROM, чтобы Сэкономить FLASH
- Войдите на сайт для отправки комментариев
Пт, 23/08/2019 - 17:56
Добрый день, Уважаемые.
Подскажите, пожалуйста,
Как объявить предзаполненный массив, так, чтобы он сразу попал в EEPROM ?
и чтобы он не занимал память ни в памяти программ ни в ОЗУ.
и много вы на этом сэкономите? ЕЕПРОМ ведь маленький совсем
А обьявить - как угодно. Можно заполнить ЕЕПРОМ заранее одним скетчем, а потом записать другой. Либо вообще прописать ЕЕПРОМ через программатор с компа.
Ну насколько я понял Ваш вопрос, никак, EEPROM не имеет самостоятельного адресного пространства и не картируется в общее поле адресов.
Ну насколько я понял Ваш вопрос, никак, EEPROM не имеет самостоятельного адресного пространства и не картируется в общее поле адресов.
Похоже возможно, если очень постараться.
Вот. Откопал тему на этом форуме. http://arduino.ru/forum/programmirovanie/dostup-k-eeprom
EEMEM
http://robocraft.ru/blog/3043.html
http://arduino.ru/forum/programmirovanie/rabota-s-eeprom-pochemu-v-arduino-mekhanizm-khuzhe-chem-v-avr
Если включить файл avr/eeprom.h и потом использовать макрос EEMEM типа:
расечатать?
1
int
bits[] EEMEM = { 0, 5, 8, 10 };
Реально создаётся файл xxxxxxxxx.ino.eep !
Осталось понять, как и какие конфиги надо настроить, чтобы он ещё и сразу прошивался.
Есть описания как прошить bin, но ведь .eep это не bin, а очень похоже на .hex
если не ошибаюсь одна ячейка в EEPROM может хранить только 8 bit, нужно это учитывать.
Вопрос вдогонку.
Подскажите пожалуйста,
как теперь заставить компилятор размещать мои массивы в EEPROM-е в жестко указанных адресах ?
А то компилятор при каждой компиляции размещает их так как ему взбрендит, а мне лень каждый раз перешивать EEPROM
Вам же подсказали- через структуру. В структуре задаются жестко адреса
Вам же подсказали- через структуру. В структуре задаются жестко адреса
Поподробнее пожалуйста. Где жесткий адрес ?
Для проверки можешь даже менять размернось переменных в структуре.
Берешь компилируешь много раз этот скетч и убеждаешься что адреса стоят на месте
если ничего не менять - то да. Если хоть что-то изменить - то нет никакой гарантии, что адрес члена структуры не изменится
Другой вопрос, что ТС не говорит, для чего это нужно. На самом деле, думаю, он эту "нужность" выдумал
Берешь компилируешь много раз этот скетч и убеждаешься что адреса стоят на месте
Для проверки можешь даже менять размернось переменных в структуре.
Пожалуйста поправьте мои ошибки
я не знаю где обязательно указывать размеры массивов где нет и где сколько фигурных скобок
b612, ну вы нахал. Сбросили сюда туалетное ведро с бумажками после использования и просите что бы Вам сделали из них художественный альбом.
Ну дальше разбирайтесь сами без ваших использованых тулетных бумаг
Берешь компилируешь много раз этот скетч и убеждаешься что адреса стоят на месте
если ничего не менять - то да. Если хоть что-то изменить - то нет никакой гарантии, что адрес члена структуры не изменится
Другой вопрос, что ТС не говорит, для чего это нужно. На самом деле, думаю, он эту "нужность" выдумал
Каждый раз шить и то и другое не удобно
Кроме того надо заливать в еепром данные не программатором а посредством тупой подпрограммы в контроллере и такой же тупой программы на компе, которым надо передавать жесткие адреса.
совместимость версий и всякое такое.
Кроме того надо заливать в еепром данные не программатором а посредством тупой подпрограммы в контроллере и такой же тупой программы на компе, которым надо передавать жесткие адреса.
наша дискуссия пошла по кругу. Хотите жесткие адреса - используйте ЕЕПРОМ, а не ЕМЕМ
А подключение этих библиотек сколько отъедает от флеша ?
наша дискуссия пошла по кругу. Хотите жесткие адреса - используйте ЕЕПРОМ, а не ЕМЕМ
Другого способа кроме EMEM для этого я не знаю, может быть вы подскажете ?
2. нужно чтобы адреса не менялись от компиляции к компиляции, поскольку ЕЕПРОМ прошивается отдельно и не каждый раз
и само собой для последующей работы с этими данными мне нужно знать в какие адреса они попали при компиляции.
Кроме того надо заливать в еепром данные не программатором а посредством тупой подпрограммы в контроллере и такой же тупой программы на компе, которым надо передавать жесткие адреса.
Давным давно я ковырял дудруиновский bootloader, так вот, есть там отдельные процедуры для записи флешь и для записи еепром. Сейчас точно не скажу, но, помоему, бутлоадер даже подпись (CPU_ID) с проца может читать. Таким образом можно предположить, что еепром можно записать отдельно от скетча.
1. мне нужно разместить данные в ЕЕПРОМЕ и при этом не использовать память программ
2. нужно чтобы адреса не менялись от компиляции к компиляции, поскольку ЕЕПРОМ прошивается отдельно и не каждый раз
Опять-же, скажу, если бы это нужно было бы мне... без навязывания каких-либо стандартов, я сделал бы так:
1 - взял бы отдельную микросхему еепрома на i2c или spi , неважно, и не парился по поводу её объёма памяти.
2 - создал (читай выдумал) бы свою собственную структуру хранения данных таким образом, что длины записей структур были бы одинаковые. Таким образом можно очень просто вычислить начало структуры по её номеру = длина структуры*номер. Ну а дальше спокойно бы парсил данные в структуре.
... помоему это банально просто... )))
1. мне нужно разместить данные в ЕЕПРОМЕ и при этом не использовать память программ
Другого способа кроме EMEM для этого я не знаю, может быть вы подскажете ?
способ с EMEM вам НЕ ПОДХОДИТ, сколько можно повторять? Он не поддерживает жесткие адреса
Слушайте, вы на этом вопросе топчетесь уже два месяца. Вы все время говорите о каком-то совместном коде, который пишут несколько разработчиков. Это как бы намекает, что участвуют грамотные программисты. а не новички, вчера увидевшие "hello world" Если вы программист - давно можно было написать свой аналог EMEM с жестко заданными адресами - делов то на один вечер, вместо сотрясания воздуха на форуме
Если же вы чайник, неспособный написать простенький класс - а судя по коду выше это так и есть - бросьте эту дурацкую затею с ЕЕПРОМ и размещайте данные во ФЛЕШ. И учитесь писать оптимальные программы - тогда вам будет хватать памяти и без этой клоунады
Таким образом можно предположить, что еепром можно записать отдельно от скетча.
Зачем предполагать, если это в man avrdude написано? Даже с примером для копипасты.
без этой клоунады
Не проще накидать тот маленький класс ?
Оптимизировать уже нечего. конечно давно пора взять другой камушек, но проект изначально рассчитан на ардуинщиков - чайников таких как я
к стати можете посмотреть
https://radiokot.ru/forum/viewtopic.php?p=3711262#p3711262
наскока я понял, в EEPROM ты хочешь запхать 10 будильников?
наскока я понял, в EEPROM ты хочешь запхать 10 будильников?
а у тя в праэкте модуль DS3231 есть? Именно модуль, сининький, китайске?
к стати можете посмотреть
https://radiokot.ru/forum/viewtopic.php?p=3711262#p3711262
посмотрел, исходного кода не увидел. Если есть - дайте ссылку. Или тут, в давних традициях Радокота - выкладывают только бинарные прошивки. чтобы не было стыдно за кривизну кода?
Кстата, теперь понял, зачем нужно писать настройки в ЕЕПРОМ - с закрытым кодом у автора нет другой возможности позволить юзерам использовать свои настройки.
а у тя в праэкте модуль DS3231 есть? Именно модуль, сининький, китайске?
я ставлю чёрненький от "малины"
но без проблем и какой-то синий ставил раньше
возможности позволить юзерам использовать свои настройки.
пробежался по проекту автора на радиокоте. интересный проект - большие часы на w2812.
https://radiokot.ru/forum/viewtopic.php?f=2&t=153087
Интересный для меня тем, что у нас на форуме есть абсолютно аналогичный, но с открытым кодом
http://arduino.ru/forum/programmirovanie/bolshie-nastennye-chasy-na-arduino
но я ни в коем случае не намекаю, что b612 взял код отсюда, даже уверен, что это не так. Он там на радиокоте с гордостью говорит. что в его коде аж 3000 строк, а мы тут с теми же функциями в коде обошлись всего чуть более тремя сотнями.
И он тут пишет, что в проекте "оптимизировать нечего" :)))))
на фоне этого совершенно неудивительно, что ТС понадобился ЕЕПРОМ...
пи...бол
брань прощаю. Исходник будет?
если нет -сдается мне что просить помощи у сообщества для своего закрытого проекта бесплатно - неэтично
разместите заказ в платном разделе - примерно за пятерку могу посмотреть ваш исходник и дать советы по оптимизации.
а у тя в праэкте модуль DS3231 есть? Именно модуль, сининький, китайске?
я ставлю чёрненький от "малины"
но без проблем и какой-то синий ставил раньше
В синеньких еще мелкосхема EEPROM I2C стоит на 4 Кб. Можно туда всё запхать и барыжить готовым.
Деда, слишком банально. Защиты никакой нет, читай, изучай, копируй.
А вот с криптой, размазанной по всей микрухе - отт этт достойно!!!
Деда, слишком банально. Защиты никакой нет, читай, изучай, копируй.
да дело не в защите. Судя по коду автора - защищать там нечего. Вопрос в другом - если не выкладывать код, автору не придется оправдываться за его кривизну. Сейчас, если кто-то другой собрал проект автора и у того не работает - автор всегда может сказать, что , мол, сам виноват - неправильно собрал, "У меня все работает" А с открытым исходником рано или поздно найдется знающий человек. который ткнет автора в его косяки.
разместите заказ в платном разделе - примерно за пятерку могу посмотреть ваш исходник и дать советы по оптимизации.
Про функционал вопрос хоть и спорный, но мериться консолями нет никакого желания.
На данный момент в проекте около 6000 строк и тому проекту с этого форума до моего ещё пол годика, а то и годик расти.
Какой кривизны мой код и как вы к нему относитесь, мне до лампочки, поскольку от вас пользы меньше чем если бы вас просто не было.
Код не выкладываю по причине того, что начинающим его не осилить, профи и сами могут, а просто для всякой нечисти выкладывать нет смысла.
В синеньких еще мелкосхема EEPROM I2C стоит на 4 Кб. Можно туда всё запхать и барыжить готовым.
Так то весь задуманный мной функционал реализован, памяти едва хватило.
Даже вантачный таймер вписался.
Сейчас изучаю ESP-ху, может быть на неё перелезу.
На данный момент в проекте около 6000 строк и тому проекту с этого форума до моего ещё пол годика, а то и годик расти.
Этт чоЖ за часы то такие, шестьтышшстрок???
Ну сами часы сотка максимум, + температура сотка, + влажность сотка, + будильники, хоть 100 будильников - тоЖе сотка строк. Всё можно компактненько в функции запихнуть и манипулировать ими. Скока я там насчитал... ну пусть пиццот строк... но никак нешестьтысяч!!! Однако!!!
500+ редактор настроек и палитры
500 разных дефайнов
500 настраиваемое переключение режимов
500 анимация
500+ синтез звука , считая вместе с нотами даже больше
500+ общение с компом
500 измерения разных температур, влажности, освещенности, давления
500 будильники и редактор будильников
+ варианты компиляций под разные схемы и разное количество светиков на сегмент
Этт чоЖ за часы то такие, шестьтышшстрок???
Ну сами часы сотка максимум, + температура сотка, + влажность сотка, + будильники, хоть 100 будильников - тоЖе сотка строк. Всё можно компактненько в функции запихнуть и манипулировать ими. Скока я там насчитал... ну пусть пиццот строк... но никак нешестьтысяч!!! Однако!!!
о том и речь - я чуть выше приводил ссылку на здешний проект - там часы, термометр, влажность, давление, плавное изменение яркости (а не как у ТС - день-ночь), световые эффекты - и все это 330 строк
Сложно даже представить, что там у ТС за гавнокод, если у него это занимает 6000 строк. И что самое смешное - он ведь о числе строк пишет с гордостью, видимо даже не приходит в голову. что стыдно должно быть
перечисление 78 настроек должно занимать 78 строк :)
500+ редактор настроек и палитры
500 разных дефайнов -
500 настраиваемое переключение режимов
500 анимация
500+ синтез звука , считая вместе с нотами даже больше
500+ общение с компом
500 измерения разных температур, влажности, освещенности, давления
500 будильники и редактор будильников
+ варианты компиляций под разные схемы и разное количество светиков на сегмент
все это ярко свидетельствует о бестолковости кода и неумении программировать.
Я вам очень советую - посмотрите тот проект, что я указывал выше. Там как раз код с температурами, давлениеми и работающий на любом количесве светиков. Если вы его поймете - сможете уменьшить свой код раза в три, как минимум.
ТС - видос запили, уж прям заинтриговал ты своими суперчасами.
ТС - видос запили, уж прям заинтриговал ты своими суперчасами.
они вообщем дают общее представление
https://youtu.be/m-ZY15XYFMU
с тех пор добавились только некоторые фишки типа коррекция хода, бой, будильники и расширилось стало удобнее меню настроек
ТС - видос запили, уж прям заинтриговал ты своими суперчасами.
там чуть выше в теме есть ссылка на его проект на радиокоте. И видосы там тоже есть. Единственное, чем принципиально отличается этот проект от местного в 300 строк - наличем музыки.
Ну и еще автор приложил героические усилия, чтобы заставить пользователей настраивать свои часы через Сериал - этот онанизм был вынужденным, и причина - нежелание давать исходник. Распространял бы он проект в исходнике - все эти редакторы будильников и палитр можно было бы разместить прямо в коде и сэкономить туеву кучу строк
Собственно, и здешний его вопрос про ЕЕПРОМ связан с тем же - нежеланием давать юзерам доступа к коду.
Вообще, ардуино - это платформа с открытым исходным кодом. Честно говоря. мне противно смотреть на подобных авторов. Это одна из причин. почему я не люблю форумы типа радиокота и казуса - там почти во всех проектах авторы нервно жмут исходный код - и я абсолютно уверен, что главная причина - стыд за свой исходник.
500 строк 78 настроек это только их перечисление и хранение
500+ редактор настроек и палитры
500 разных дефайнов
500 настраиваемое переключение режимов
500+ общение с компом
Вот, собрал все части кода, связанные с настройкой. Примерно 2500+ строк только на чтение с компа и работу с 78 настройками? примерно по 30 строк на каждую настройку?
Такое возможно только в случае самого сурового копи-паста. Обьясняю - вот написали вы чтение строки из Сериал и установку одной настройки в программе. 30-50 строк для этого - норма. А дальше, каждая новая настройка должна увеличивать код на пару строк, не больше. У вас же, судя по размеру - вы просто 78 раз скопировали код первой настройки и поменяли в нем только строку.
короче, Деда. достал меня этот разведчик с засекреченным кодом - предлагаю показать ему указатель и закрыть ветку.
Нет. Не вижу оснований.
Индусский код тоже имеет право на жизнь. Вдруг еще научица чему.
Вапще, я в этой ветке причин для срача не вижу. Пусь нарот сам выбирает, что повторять, здешний код или с котофорума.
500 строк 78 настроек это только их перечисление и хранение
500+ редактор настроек и палитры
500 разных дефайнов
500 настраиваемое переключение режимов
500 анимация
500+ синтез звука , считая вместе с нотами даже больше
500+ общение с компом
500 измерения разных температур, влажности, освещенности, давления
500 будильники и редактор будильников
+ варианты компиляций под разные схемы и разное количество светиков на сегмент
Наверно писал большой коллектив индусов https://www.youtube.com/watch?v=NDMaH3XqtRc
Пусь нарот сам выбирает, что повторять, здешний код или с котофорума.
не вопрос, конечно пусть народ выбирает - тупо повторять кривую поделку, не имея возможности исправить ее косяки и ничему при этом не научившись - или получить полный доступ к коду и дописать все. что хочется, самому.
Но я такого "творчества" не понимаю. Какой смысл повторять готовое, это практически тоже самое, что купить в магазине.