如何将结构指向特定地址

问题描述 投票:0回答:2

我试图将结构指向特定的内存位置,任何人都可以告诉我如何在c编程中完成它。我已经定义了一个宏,它保存了内存位置的起始地址。

#define START_ADDR 0xF6000 //starting address

typedef struct {
     uint32_t checksum;
     uint16_t index[len];
} block;

我使用以下语句更改了块的内存分配:

block *value = (block*) START__ADDR;

我也验证了内存分配的变化,没有问题。我正在研究FLASH内存,我已经验证了写操作可以在我提到的特定内存位置上完成。现在我正在尝试使用更新校验和的值

value->checksum=0xa5a5a5a5;

但校验和的值是0x00000000并且没有更新到0xa5a5a5a5。任何人都可以告诉我如何更改校验和的值。

提前致谢。

关心Vybhav

c struct structure typedef
2个回答
1
投票

考虑到你确实知道你在那里设置或登陆(并且你有权这样做),有两种主要方式:

a)取消指向地址的指针:

#define ADDR 0xXXXXXX
unsigned int volatile * const var = (unsigned int *) ADDR;

你的具体情况:

typedef struct {
    uint32_t checksum;
    uint16_t index[len];
} block_t;

unsigned block_t volatile * const block = (block_t *) ADDR;
block->checksum = 0;

b)通过链接器:

file.c:

block_t __attribute__((section(".theSection"))) block;
block.checksum = 0;

linker.ld:

SECTIONS
{
    .theSegment 0xXXXXXX : {KEEP(*(.theSection))}
}

请注意,我已将block类型重命名为block_t


0
投票

您需要将地址转换为指向struct block对象的指针。您还需要一个struct block对象的实例来分配转换指针。

看这个例子:

struct block * volatile block_pointer = (struct block*)START_ADDR;
© www.soinside.com 2019 - 2024. All rights reserved.