Надежная запись и чтение идентификатора в/из Arduino

Мне нужен способ как идентификатора (скетч/скомпилированный шестнадцатеричный код), так и последующего определения на основе этого идентификатора проекта, который был загружен в мой микроконтроллер Arduino. На данный момент я изучил несколько вариантов хранения идентификатора и чтения идентификатора с Arduino. Идентификатор может быть пользовательской строкой или более поздним вариантом, состоящим из нескольких строк. Вот три варианта, о которых я думал, со своими плюсами и минусами:


Вариант 1:

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

Чтение: Функция выгрузит идентификатор через последовательное соединение с использованием фиксированной скорости передачи данных, после чего будут инициализированы исходные серийный номер и скорость передачи данных проекта. Микроконтроллер необходимо будет перезагрузить, чтобы пользователь смог прочитать с него идентификатор.

Плюсы: Простота реализации.

Минусы: для считывания идентификатора потребуется ручной или программный перезапуск микроконтроллера.


Вариант 2:

Запись: запись идентификатора в EEPROM

Чтение: чтение идентификатора из EEPROM через последовательное соединение.

Плюсы: Вероятно, не будет мешать исходному коду.

Минусы: он использует EEPROM, ему может потребоваться собственная функция в эскизе для чтения идентификатора из EEPROM, что усложняет вариант 1.


Вариант 3. Редактирование HEX-файла для включения подписи

Запись: добавьте идентификатор в сам шестнадцатеричный файл (шестнадцатеричное редактирование) после его компиляции.

Чтение: выгрузка шестнадцатеричного файла и декодирование строки.

Плюсы: Не нужно настраивать скорость или серийный номер?

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


Пример данных:

project="marlin2.1", конфиг="Пруса", версия="8.80", env1="pin2"

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

, 👍1

Обсуждение

Какая Ардуино...?, @Majenko

Укажите, для чего нужен идентификатор (добавьте дополнительную информацию к вашему вопросу). Чтение eeprom не носит. В варианте 1 Arduino выгружает данные самостоятельно. Это странно. Есть еще как минимум 10 вариантов. Другой вариант — включить файл .h со сгенерированным идентификатором. Компилятор может указать дату и время компиляции в скетче. Самая маленькая плата Arduino все еще может выполнять некоторую расшифровку, поэтому вы можете поместить в Arduino зашифрованный идентификатор. Некоторые платы Arduino имеют микроконтроллер, имеющий собственный идентификатор . Все устройства 1-Wire имеют идентификатор, просто добавьте устройство 1-Wire за 1 доллар. и так далее., @Jot

Я добавил несколько примеров в верхний пост. А что касается eeprom, о котором я говорил, постоянно переписывая eeprom, чтобы он мог его носить, каждый новый скетч будет иметь свой собственный набор данных, который можно будет прочитать с Arduino с помощью компьютера., @BoKKeR

Вариант 1 и 3 примерно идентичны., @Gerben

Вариант 3 избавит от необходимости настраивать последовательное соединение в каждом эскизе. И я не знаю, возможно ли выгрузить шестнадцатеричный файл из каждой модели Arduino. Но помимо этих пунктов да, варианты 1 и 3 практически идентичны. Вариант 3 на практике я пока не пробовал, но думаю, что можно добиться рабочего процесса редактирования/записи/чтения/декодирования., @BoKKeR


1 ответ


-1

Я бы выбрал №2. Если вы обеспокоены тем, что в конечном итоге вы сожжете свою EEPROM (100 000 циклов записи на ATmega328 ds), попробуйте написать макрос, который будет определять, при какой загрузке вы хотите, чтобы новый идентификатор был записан в EEPROM. Черт возьми, вместо того, чтобы писать все это на борту, почему бы вам не поддерживать автономную базу данных поиска и не кодировать все самостоятельно? Для этого все равно потребуется запись в EEPROM, но вы можете закодировать информацию в пару целых чисел.

,