-3

我为微控制器编写代码,程序看起来像这样,这不是真正的程序,它只是提出问题的一个例子。

我想表明,如果我指向内存中的一个位置并在头文件中定义指针,我无法调用源文件中定义的数组。

测试.h:

#define arr * (BYTE *)(0X10000);

int function(int i);

测试.c:

#include "test.h"

int function(int i){
   arr[5] = 1; 
}

问题是: undefined identifier "arr"

怎么可能认不出来?

4

3 回答 3

1

让我假设它0x10000是微控制器内部寄存器的确切起始地址,并且您希望在那里写入一些字节。然后我将#define我的别名如下:

#define MY_REGISTER (BYTE*)((void*)0x10000)

在这种情况下,您可以使用MY_REGISTER宏作为初始化程序:

BYTE* myRegister = MY_REGISTER;
myRegister[5] = 1;

注意:未指定MCU和编译器,我无法测试我的答案。

于 2017-05-11T11:21:20.430 回答
0

好的,这是你的第一个问题,你不能改变一个常数。无论坏#definearr分配如何,您都试图更改您在上面定义为常量的 arr。

#define arr * (BYTE *)(0X10000) //; - you don't need a semicolon after define

接下来,您尝试为 分配一个新值arr,这是不可以的:

arr[5] = 1; //cannot change a constant

您可以分配另一个数组,但您可能不希望这样:

 int arr[5];
     arr[5] = 1;

但是你可以这样做:

#undef arr
#define arr 1
于 2017-05-11T14:47:04.917 回答
0

指令必须在同一行#

代替

#
define arr * (BYTE *)(0X10000);

#
include "test.h"

利用

#define arr * (BYTE *)(0X10000);

#include "test.h"

(它将解决您的问题

未定义的标识符“arr”

但会出现其他问题。)

于 2017-05-11T11:34:06.930 回答