Надеялся исчезнет инициализация.
Нет, инициализация иначе устроена в Си. В main нет добавочного кода по сравнению с тем, что написано. Но main не является истинной точкой входа, она вызывается из модуля (объектного файла) инициализации, который обычно называется
crt или
crt0 (то есть C Run-Time), в котором уже содержится истинная точка входа (обычно называется
_start или вроде того). И обычно компилятор предоставляет опцию командной строки либо прагму чтобы не линковать эту инициализацию (одновременно эта опция убирает особый статус функции
main, в том числе необходимость её определения — ведь её никто не вызывает больше) или линковать свой кастомный модуль стартовой инициализации вместо стандартного.
-- 30.12.2023, 17:01 --Кстати попробуйте всё-таки использовать volatile переменную для записи конфигурационного слова. Для вашей архитектуры вместо _xdata должно быть видимо _code:
Код:
volatile __code uint16_t __at(0x2007) XXX = 0x1a;
-- 30.12.2023, 17:11 --Если для вашей архитектуры опции отключения линковки crt нет (на что похоже), то возможно надо убрать функцию main, чтобы скомпилировалось в объектный файл, а линковать потом ручным вызовом
sdld с нужными параметрами.