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
假设小端。
我想读取 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
假设小端。