Компоновщик не является подходящим местом по двум причинам:
- исполняемый файл может быть загружен с одним и тем же идентификатором на нескольких устройствах, что делает ваш подход недействительным.
- Вам необходимо связать исполняемый файл для каждого устройства, которое вы программируете, что приводит к потере ресурсов процессора.
Лучшее место для исправления исполняемого файла во время загрузки с помощьюсерийный номер.
Выберите образец данных в качестве токена, чтобы инициализировать вашу переменную с помощью идентификатора устройства (шаблон, который трудно найти в другом месте в двоичном файле вашей программы) и инициализировать переменную серийного номера для этого шаблона данных (лучше, если вы делаете это статической инициализациейпеременная массива или что-то подобное)
Создайте программу, которая будет выполняться при каждой загрузке на устройство, которое ищет шаблон в исполняемом файле, перед загрузкой двоичной программы в устройство и записывает правильное значение для программированияв устройство (имейте в виду, что вы исправляете двоичный файл, поэтому вы не можете думать о строках с переменной длиной и т. п., которые могут уничтожить всю работу, выполненную компоновщиком)
После исправления исполняемого двоичного файла вы можете загрузитьэто к устройству.
Другое решение - зарезервировать фиксированную область в вашем скрипте компоновщика для всей такой информации.Затем поместите туда все переменные информации об устройстве.Затем получите точные позиции в rom для отдельных переменных и включите правильные данные в загруженное изображение.В этом случае компоновщик - ваш друг, резервирующий некоторый фиксированный сегмент в rom вашего устройства, выделенный для хранения индивидуальных данных устройства (вы можете указать там mac-адреса, серийные номера, конфигурацию по умолчанию и т. Д.)