SDCC/C51: переопределить символы SDCC
Я хочу скомпилировать программу под SDCC, которую я использовал для компиляции под C51..
// Somewhere in a header file for C51:
sfr TCON = 0xA8; // C51 syntax
// somewhere in a .c-file
#pragma asm
mov TCON, #0
#pragma endasm
Это будет переведено на 75A800
(Шестнадцатеричный)
opcode direct, #immed
mov: 75 A8 00
Как я собираю это в SDCC это
opcode direct, #immed
mov: 75 88 00
мне кажется, что SDCC игнорирует мое определение регистра TCON, которое выглядит так:
// Somewhere in a header file for SDCC
__sfr __at(0xa8) TCON; // SDCC syntax
Вот мой вопрос:
Как я могу сказать SDCC использовать адрес, который я определил в другом заголовочном файле?
Все это, конечно, выглядит так:
#include "the-header-file-that-defines-my-registers.h" // defines TCON
void main(void)
{
// code ..
#pragma asm
// more code ..
mov TCON, #0
#pragma endasm
// more and more code ..
}
1 ответ
Я связался с командой разработчиков SDCC
В субботу 27 июля 2013 года Стефан Фальк написал:
Привет всем, кто получает это!
Извините, что задаю, вероятно, довольно простой вопрос о ASXXXX Cross Assembler, но мне было интересно, можно ли или как изменить стандартные адреса SFR?
Процессор, который я использую, основан на Intel 8051, но у многих его регистров есть новые адреса.
Итак, есть ли способ сообщить SDCC, чтобы ASXXXX игнорировал предопределенный SFR и использовал вместо него мой?
Ответ
Я не думаю, что вы можете без редактирования источника ASXXXX. Тем не менее, SDCC использует только несколько встроенных символов ассемблера (из памяти, я думаю, это просто ACC, B, DPL, DPH, PSW и SP) в своем генераторе кода. Я был бы очень удивлен, если бы кто-нибудь переместил эти основные регистры, связанные с процессором. Все регистры SFR, определенные как уровень C (например, с помощью #include), будут явно определены на уровне сборки, но с префиксом подчеркивания, поэтому можно изменить адреса для этих символов на все, что вам нужно, и игнорировать предопределенные символы. Вам просто нужно убедиться, что любая написанная вами сборка использует символы с префиксом подчеркивания (то есть "mov a,_P2" вместо "mov a, P2").
Erik