[英]Pointer to inline asm label for PIC 16F and 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语言中,每个标签都需要类似“ const指针”的东西,但是我无法使其正常工作。 我正在为PIC 10/12/16使用Hitech C编译器。
感谢大家的支持。 我在Microchip论坛上发布了这个问题,有几个人对此进行了尝试,结果发现编译器中存在一些错误,错误为10/12/16 mcus。 在C18编译器或Hitech C18中,当将其设置为18F单片机时,以上提出的解决方案可以完美地工作。 我设法找到的唯一解决方法是使用内联汇编来获取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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.