C:读取MCU整个闪存的值

C: Read values of entire flash memory of MCU

我想读取 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 地址和 return 一个 uint32_t 值,因此它的长度为 4,地址应在循环中移动 4。第一个函数使用 char 进行寻址,长度为 1,因此地址在循环中也应移动 1。我在这些陈述中是否正确?如果是这样,我是否正确执行了它们?对于第二个函数,用 1 递增指针应该用 4 移动它,因为它是 uint32_t 类型(类似于 int)。

但是,函数return有不同的值。 第一个returns:674426297757 第二个returns:8213668631160

由于两个函数应该做同样的事情,所以一个或两个函数一定是不正确的,并且没有读取整个程序闪存。

如何修复这两个函数?当你有起始地址和大小时,有没有更好或更简单的方法来读取整个内存?

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

00 01 02 03

按字节值相加会得到 0x000000000000006

添加 32 位 int 值将得到 0x0000000003020100 假设小端。