C/ c++预定义具有内存值的数组

C/C++ predefine array with memory values

本文关键字:内存 数组 c++ 预定义      更新时间:2023-10-16

我想用特定内存位置的数据对一些数组进行预定义,但由于某种原因它不工作。

// Location of first byte in memory
#define MEMORY   0x7800
// Take a data from memory to array which will be containing the data
const uint8_t *MemArray[3] = { (const uint8_t *)MEMORY, 
                               (const uint8_t *)MEMORY+1, 
                               (const uint8_t *)MEMORY+3 };
// Now, I want to define some another array with values upper, but it not working
const uint8_t TargetArray[7] = { 1,2,3,4, 
                                 (const uint8_t)(*MemArray[0]), 
                                 (const uint8_t)(*MemArray[1]), 
                                 (const uint8_t)(*MemArray[2]) };

有人知道怎么做吗?

编译器在(const uint8_t)(*MemArray[i])

得到警告和错误

警告[Pe191]:类型限定符对强制类型D:..Sourcefile.c

错误[Pe028]:表达式必须有一个常量D:..Sourcefile.c

我使用IAR编译器8051核心

初始化器值必须是编译时常量。因此,它们不能依赖于从内存中读取的值,编译器必须能够生成初始化的数组。

您需要包含实际的代码来设置它。在程序的其余部分之前,请先在main()中执行此操作。

地址是否与非常慢的设备相关联?否则,你可以让const指针指向该位置,然后随意读取值。

像这样:

#define MEMORY 0x7800
const struct __attribute__ ((__packed__)){
    uint8_t foo;
    uint8_t bar;
    uint8_t __reserved;
    uint8_t baz;
} *mem = (const void *)MEMORY;

您可以通过mem->foo等读取位置。

注意:结构体打包的确切语法各不相同,在本例中使用的是GCC的语法。