Надежная запись и чтение идентификатора в/из Arduino
Мне нужен способ как идентификатора (скетч/скомпилированный шестнадцатеричный код), так и последующего определения на основе этого идентификатора проекта, который был загружен в мой микроконтроллер Arduino. На данный момент я изучил несколько вариантов хранения идентификатора и чтения идентификатора с Arduino. Идентификатор может быть пользовательской строкой или более поздним вариантом, состоящим из нескольких строк. Вот три варианта, о которых я думал, со своими плюсами и минусами:
Вариант 1:
Написание. Пользовательская функция, которая будет добавляться в каждый скетч перед компиляцией и содержать информацию об идентификаторе и настройке последовательного соединения.
Чтение: Функция выгрузит идентификатор через последовательное соединение с использованием фиксированной скорости передачи данных, после чего будут инициализированы исходные серийный номер и скорость передачи данных проекта. Микроконтроллер необходимо будет перезагрузить, чтобы пользователь смог прочитать с него идентификатор.
Плюсы: Простота реализации.
Минусы: для считывания идентификатора потребуется ручной или программный перезапуск микроконтроллера.
Вариант 2:
Запись: запись идентификатора в EEPROM
Чтение: чтение идентификатора из EEPROM через последовательное соединение.
Плюсы: Вероятно, не будет мешать исходному коду.
Минусы: он использует EEPROM, ему может потребоваться собственная функция в эскизе для чтения идентификатора из EEPROM, что усложняет вариант 1.
Вариант 3. Редактирование HEX-файла для включения подписи
Запись: добавьте идентификатор в сам шестнадцатеричный файл (шестнадцатеричное редактирование) после его компиляции.
Чтение: выгрузка шестнадцатеричного файла и декодирование строки.
Плюсы: Не нужно настраивать скорость или серийный номер?
Минусы: Вероятно, медленно, может в конечном итоге создать неверный шестнадцатеричный файл, его сложно правильно реализовать с большими идентификаторами и структурами.
Пример данных:
project="marlin2.1",
конфиг="Пруса",
версия="8.80",
env1="pin2"
Как уже было сказано, основная идея заключается в хранении идентификатора, но позже мне бы хотелось расширить ее и хранить больше информации в виде структуры. Это решение должно охватывать как можно больше моделей Arduino. Я ищу лучший способ, который я мог пропустить для достижения этой задачи или какие-либо рекомендации.
@BoKKeR, 👍1
Обсуждение1 ответ
Я бы выбрал №2. Если вы обеспокоены тем, что в конечном итоге вы сожжете свою EEPROM (100 000 циклов записи на ATmega328 ds), попробуйте написать макрос, который будет определять, при какой загрузке вы хотите, чтобы новый идентификатор был записан в EEPROM. Черт возьми, вместо того, чтобы писать все это на борту, почему бы вам не поддерживать автономную базу данных поиска и не кодировать все самостоятельно? Для этого все равно потребуется запись в EEPROM, но вы можете закодировать информацию в пару целых чисел.
- Не получается читать из / писать в EEPROM
- EEPROM.get возвращает неверные данные
- о том, как разделить один внешний последовательный EEprom с помощью двух микроконтроллеров?
- Serial.println не будет форматировать DEC
- о том, как записать данные во весь EEprom?
- Программатор EEPROM работает с последовательным монитором, но не с pySerial
- использование EEPROM Arduino
- Чтение из EEPROM и объединение
Какая Ардуино...?, @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