在处理常量时,我遇到了一些混合C和汇编的问题。我正在使用XCode 6.1。
例如,我有这个汇编文件:
.section __DATA,__data,regular
.globl _memLoc
.globl _myData
_myData = 0x01234567 // <--- my constant
.align 2
_memLoc:
.long _myData
这里我生成一个4字节的值,存储在标记为_memloc的内存位置。我可以从C中引用这个内存位置就好了:
extern uint32_t memLoc;
uint32_t *ptr = &memLoc;
检查* ptr会产生预期结果。现在我也想从C引用_myData,但我得到一个EXC_BAD_ACCESS。我试过这个没有运气:
extern uint32_t myData;
uint32_t value = myData;
_memLoc和_myData之间的实际区别是什么?两个符号都在汇编时创建并变为全局,但对_myData的引用会导致程序失败。
我在这里尝试做的只是定义一次常量,并使其可以从C和Assembly中访问。这有可能吗?
答案 0 :(得分:0)
事实证明,答案比我想象的要简单。汇编程序确实识别预处理程序指令,所以我所要做的就是将常量放在常规.h文件中并将其导入.s文件中:
#include "Myconstants.h"
...
_memLoc:
.long MYCONSTANT
这question让我走上正轨。