请教高手: 关于C语言和汇编语言之中共用常量的问题
- UID
- 144448
- 性别
- 男
|
请教高手: 关于C语言和汇编语言之中共用常量的问题
在HC08编程时,我在C语言中用一个#define OS_MAX_TASKS 10 定义的常量,我想在汇编语言中也用这个定义,怎么办?
目前我是在汇编语言中又定义了一遍: OS_MAX_TASKS EQU 10, 好麻烦! |
|
|
|
|
|
- UID
- 144448
- 性别
- 男
|
我看了几天Manual自己回答: 先在C语言里定义 const uint8 OS_MAX_TASKS = 15;
再在汇编语言中用 lda OS_MAX_TASKS, 汇编的语句是16位ROM区地址,它实际是用ROM区来传递这个常量的,所以无法用这个语句:lda #OS_MAX_TASKS |
|
|
|
|
|
- UID
- 144448
- 性别
- 男
|
拉了一句汇编声明: XREF OS_MAX_TASKS |
|
|
|
|
|
- UID
- 104380
- 性别
- 男
|
应该可以直接引用的。最好把它定义在头文件中,然后include它。 |
|
|
|
|
|
- UID
- 104631
- 性别
- 男
|
这是个解决方法,用常量的方式
但是,在宏定义中,一般编译器会直接用10替代OS_MAX_TASKS,不占用任何存储空间 |
|
|
|
|
|
- UID
- 104673
- 性别
- 男
|
在C中访问汇编变量
变量声明 (ASM)
XDEF ASMData, ASMConst
DataSec: SECTION
ASMData: DS.W 1
ConstSec: SECTION
ASMConst: DC.W $44A6
变量声明(C语言)
extern int ASMData;
extern const int ASMConst;
C代码中使用变量
unsigned int CData;
CData = ASMData + ASMConst + 3;
--------------------------------------
在汇编中访问C变量
变量声明(C语言)
unsigned int CData;
const unsigned int CConst;
变量声明 (ASM)
XREF CData;
XREF CConst;
在汇编代码中使用变量
LDD CConst
STD CData
|
|
|
|
|
|