我在 0x102 地址中有一个整数值,我需要创建#define ABC ...
宏。
ABC 是变量或其他东西(可以访问 0x102 单元格)。
必须可以进行这样的操作:
ABC = 666;
int x = ABC*2 + 4;
int *p = &ABC;
你能帮助我吗 ?
我在 0x102 地址中有一个整数值,我需要创建#define ABC ...
宏。
ABC 是变量或其他东西(可以访问 0x102 单元格)。
必须可以进行这样的操作:
ABC = 666;
int x = ABC*2 + 4;
int *p = &ABC;
你能帮助我吗 ?
假设您的对象是 16 位的(地址 0x102 是 2 字节对齐的):
#define ABC (*(volatile uint16_t *) 0x102)
你可以这样做:
#define ABC *((int*)0x102)
int main() {
ABC = -1;
return 0;
}
它设置了一个int*
,然后一口气将其全部遵从。
在编译时,编译器将 #defined 变量替换为实际值。
所以,如果你#define ABC
1)ABC = 666;
您将无法执行此操作。
2)int x = ABC*2 + 4;
您将能够执行此操作
3)int *p = &ABC;
您将无法执行此操作。
如果您将地址作为常量,则可以编写:
#define ABC (*(int *)0x102)
如果您在该地址中有一个变量(名称如my_variable
):
您想要的是 C++ 所称的引用。在 C 中,它不存在。但是,正如您猜想的那样,您可以使用宏。
如果此变量与 位于同一范围内ABC
,则您只需要:
#define ABC my_variable
如果你有一个指向这个变量的指针(例如作为一个函数参数),你可以这样写:
#define ABC (*that_argument)
您可以通过添加编译时宏来做到这一点。ABC=(*(int*)0x102)
如果您使用的是 IDE,您可以在项目设置的 Preprocessor 字段中添加它。或者,如果您使用 CLI 编译器,例如,gcc
您可以按如下方式编译程序。
gcc prog.c -DABC=(*(int*)0x102)
或者您可以直接在程序中定义它,如下所示
#define ABC (*(int *)0x102)
int main()
{
ABC = 666;
int x = ABC*2 + 4;
int *p = &ABC;
return 0;
}