gpt4 book ai didi

C:读取MCU整个Flash存储器的值

转载 作者:行者123 更新时间:2023-11-30 18:35:46 25 4
gpt4 key购买 nike

我想读取 MCU 的整个程序闪存的存储位置的值,特别是 OpenMote-CC2538 上的 CC2538。然后将读取的值计算为当前所有值的大总和。

此时,我有以下代码来遍历内存并获取值

uint64_t readMemory() {

unsigned char * bytes = (char *) 0x200000;
size_t size = 0x0007FFD4;
size_t i;
uint64_t amount = 0;
for (i = 0; i < size; i++) {
amount += bytes[i];
}

return amount;
}

uint64_t readFlashMemory() {

unsigned int * bytes = (int *) 0x200000;
size_t size = 0x0007FFD4;
size_t i;
uint64_t amount = 0;
for (i = 0; i < size; i+=4) {
amount += FlashGet(bytes);
bytes++;
}

return amount;
}

地址0x200000,大小为0x0007FFD4。第一个函数使用 char 并逐一访问每个地址,而第二个函数使用 flash.c 文件中的现有函数 FlashGet(uint32_t),它是对寄存器 (HWREG) 的直接访问。

FlashGet 需要一个 uint32_t 地址并返回一个 uint32_t 值,因此它的长度为 4,并且该地址应在循环中以 4 移动。第一个函数使用 char 进行寻址,其长度为 1,所以循环中地址也应该移动1。我的这些说法正确吗?如果是这样,我是否正确执行它们?对于第二个函数,由于指针的类型为 uint32_t(类似于 int),因此将指针增加 1 应该将其移动 4。

但是,这些函数返回不同的值。第一个返回:674426297757第二个返回:8213668631160

由于两个函数应该执行相同的操作,因此其中一个或两个函数一定不正确,并且没有读取整个程序闪存。

如何修复这两个功能?当您知道起始地址和大小时,是否有更好或更简单的方法来读取整个内存?

最佳答案

假设您有一个包含内容的 4 字节闪存

00 01 02 03

按字节值相加将得到 0x000000000000006

假设小端字节序,添加 32 位 int 值将为您提供 0x0000000003020100

关于C:读取MCU整个Flash存储器的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45066040/

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