【发布时间】:2015-01-20 23:00:50
【问题描述】:
我正在编程 16F886,这是一个内联 asm 的示例:
#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 中,我只会使用低/高操作数来获取每个标签的地址,例如movlw low Text1。
在 C 中,我需要为每个标签提供类似“const 指针”的东西,但我无法让它工作。
我正在为 PIC 10/12/16 使用 Hitech C 编译器。
【问题讨论】:
-
我的第一个猜测是
extern const char *text1;。你试过什么?您收到了哪些错误消息? -
@user3386109 所说的是正确的方法。此外,您可能想要使用
db指令,而不是dw指令。前者会将每个字符视为一个字节(如您所愿),后者会将它们视为 16 位字,这对于 C 是不正确的。您还可以在db指令之后使用单引号中的纯字符串,例如_text1: db 'TEXT1' -
当我写
EEADR=&text1时,我得到“67.14 指针到整数的非法转换”。生成的代码似乎通过了正确的低字节。 -
我认为您需要发布C代码的相关部分,看看我们可以看到您要做什么。
-
你试过
EEADR= Text1吗?
标签: c assembly inline-assembly pic