Указатель на встроенную метку asm для PIC 16F и Hitech C
Я программирую 16F886 и вот пример встроенного ассемблера:
#asm
psect TxtData,class=CODE,delta=2
global _text1,_text2
_text1: dw 'T','E','X','T','1',0
_text2: dw 'T','E','X','T','2',0
#endasm
Мне нужно указать EEADR и EEADRH на каждую из меток, чтобы прочитать флэш-память. В чистом asm я бы просто использовал операнды Low/High, чтобы получить адрес каждой метки, например movlw low Text1
, В C мне нужно что-то вроде "константного указателя" для каждой из меток, но я не могу заставить его работать. Я использую компилятор Hitech C для PIC 10/12/16.
2 ответа
Спасибо всем за вашу поддержку. Я разместил вопрос на форуме Microchip, и несколько парней опробовали его. Оказалось, что в компиляторе есть какая-то ошибка для 12.10.16. В компиляторе C18 или Hitech C18, когда он установлен на 18F mcu, вышеупомянутые предложенные решения работали безупречно. Единственный обходной путь, который мне удалось найти, - это использовать встроенную сборку, чтобы получить старший байт метки адреса asm и таким образом установить правильные регистры.
asm
EEADRH EQU 0x10F
movlw high _text1
banksel EEADRH
movwf EEADRH
endasm
Строковая метка является указателем - вам не нужно указывать ее адрес с помощью &
, Вы должны сначала написать MS часть адреса
unsigned short address = text;
EEADRH = (address >> 8) & 0xF;
EEADR = address & 0xFF;