процессора: 8051 на основеКак переписать этот код asm в C?
следующие строки кода будет установлено значение 0xaa
по адресу 0x0aaa
во внешней флэш-памяти.
mov a,#0aah
mov dptr,#X0aaa
movx @dptr,a
Ниже мы
Команда MOV позволяет передавать данные между любым внутренним I-RAM и местом, SFR и между аккумулятором внутренней пространствами I-RAM или местами SFR.
и MOVX и описание команд от CPU спецификации
инструкция MOVX используется для доступа к внутренней X-RAM и электронной FLASH области. Можно использовать только косвенную адресацию. Выбор заключается в том, следует ли использовать однобайтовый адрес, @Ri, где Ri может быть либо R0, либо R1 выбранного банка регистров , либо двухбайтового адреса, @DPTR.
Некоторый код, который я видел в примерах:
xdata UCHAR * data ecFlashaaa = (xdata UCHAR *)(0xaaa);
*ecFlashaaa = 0xaa;
код не компилируется, потому что он не знает, что это xdata
, а также путать на data
. Так почему-то мне нужно объяснить компоновщик, что ecFlashaaa указывает на e-Flash ...
Есть ли у вас правильный компилятор? Вы включили правильные файлы заголовков? – Shahbaz
Да, у меня есть. Сам пример неисправен. В моем проекте включен файл 'XCL', который определяет сегменты. '-D_XDATA_START = 8000 // Первый адрес xdata memory.',' -D_XDATA_Z_START = _XDATA_START \t // Первый адрес на чипе XDATA memory.' и т. Д., Но я не уверен, что там определен e-Flash , Даже если определено, как я могу привязать свою переменную к e-Flash. – Pablo
Я действительно не знаю микро, поэтому я не знаю деталей, но если компилятор не понимает 'xdata' (в то время как ключевое слово существует в таблице данных), моя лучшая догадка - либо неправильный компилятор, либо отсутствующий заголовочный файл. – Shahbaz