Указатель на встроенную метку 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;
Другие вопросы по тегам