gpt4 book ai didi

c - RAM 变量中 ROM 变量的指针?

转载 作者:行者123 更新时间:2023-12-04 11:24:59 25 4
gpt4 key购买 nike

我正在使用 Microchip C18 编译器做一个项目。我有一个称为 block 的结构,它指向其他 block (东北西南)。这些积木会让我成为一张 map 。然后我有一个指针,我用它来评估一切。

只使用 RAM 看起来像:

struct block{
struct block *north;
struct block *east;
struct block *south;
struct block *west;
};


struct block map[5] =
{ // just a simple line.
{ NULL, &map[1], NULL, NULL },
{ NULL, &map[2], NULL, &map[0]},
{ NULL, &map[3], NULL, &map[2]},
{ NULL, &map[4], NULL, &map[3]},
{ NULL, NULL, NULL, &map[4]}
};


struct block* position = &map[0];

这让我可以做一些事情:

void goWest()
{
if(position -> west != NULL) position = position -> west;
}

问题是我的项目中的 RAM 用完了,需要使用 ROM到目前为止我所拥有的是:

struct block{
rom struct block *north;
rom struct block *east;
rom struct block *south;
rom struct block *west;
};
rom struct block map[5] =
{ // just a simple line.
{ NULL, &map[1], NULL, NULL },
{ NULL, &map[2], NULL, &map[0]},
{ NULL, &map[3], NULL, &map[2]},
{ NULL, &map[4], NULL, &map[3]},
{ NULL, NULL, NULL, &map[4]}
};

我已经进行了一些调试并且可以判断上面的部分是有效的,但是试图使位置指针让我很伤心。所以我想我的问题是:

如何将 ROM 变量地址保存在可以编辑其值的指针中?

当我尝试时:

struct block *position = &map[0];

我收到“警告 [2066] 分配中的类型限定符不匹配”

我意识到 ROM 变量和 RAM 变量是两个不同的东西,但我不知道该怎么做。

最佳答案

rom 宏的定义是什么?我猜它扩展为 const (可能是特定于编译器的 __attribute__ 或类似的东西),因为编译器提示“类型限定符不匹配”,它指的是constvolatile 不匹配。

这意味着您正在尝试将指向常量数据的指针隐式转换为指向非常量数据的指针。此代码应生成与您的编译器相同的警告:

const int x = 0;
int *y = &x; // &x is "pointer to const" but y is "pointer to non-const"

要修复它,您需要声明您的 position 指针是指向常量数据的指针(这取决于 rom 宏的定义,应该这样做使用 romconst 限定符):

// Declare a non-constant pointer to constant data
const struct block *position = &map[0];

在每个指针级别,您可以有一个 const 限定符或缺少限定符,对于基本非指针对象也是如此。因此,单级指针可以有 4 种不同的变体:

int *x;  // Non-constant pointer to non-constant data
int *const x; // Constant pointer to non-constant data
const int *x; // Non-constant pointer to constant data
int const *x; // Same as above
const int *const x; // Constant pointer to constant data
int const *const x; // Same as above

请注意 int constconst int 是等效的,但 const 的位置 确实 很重要。

关于c - RAM 变量中 ROM 变量的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13484050/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com