混合C和Assembly xcode-常量



在处理常量时,我在混合C和Assembly时遇到了一些问题。我使用的是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中访问。这可能吗?

结果发现答案比我想象的要简单。汇编程序可以识别预处理器指令,所以我所要做的就是把常量放在一个常规的.h文件中,然后导入到.s文件中:

#include "Myconstants.h"
...
_memLoc:
    .long MYCONSTANT

这个问题使我走上了正轨。

最新更新