|
楼主 |
发表于 2023-8-11 11:21:32
|
显示全部楼层
多谢硬汉回复。
改用SCB_InvalidateICache_by_Addr内容也还是不刷新,代码贴出来
这个是freertos的cli命令:dump 0x080e0000 32
功能:按照uint32_t的格式打印从0x080e0000开始的32个word
BaseType_t Dump(char *pcWriteBuffer, size_t xWriteBufferLen,
const char *pcCommandString)
{
BaseType_t len1, len2;
char *str1 = FreeRTOS_CLIGetParameter(pcCommandString, 1, &len1);
char *str2 = FreeRTOS_CLIGetParameter(pcCommandString, 2, &len2);
if (str1 == NULL || len1 == 0 || str2 == NULL || len2 == 0)
{
CmdWrBuf("Parameters error\n");
}
else
{
unsigned long addr = strtoul(str1, NULL, 0);
unsigned long len = strtoul(str2, NULL, 0);
if (len == 0 || len > 1024)
{
printf("Parameters error\n");
}
else
{
addr &= 0xFFFFFFFC; // 32-bit aligned
SCB_InvalidateICache_by_Addr((uint32_t *)addr, len);
PrintUint32((const uint32_t *)addr, len);
}
}
return pdFALSE;
}
打印函数:
void PrintUint32(const uint32_t *_buf, int len)
{
char bar[16 * 9 + 5 + 1];
memset(bar, '-', sizeof(bar) - 1);
bar[sizeof(bar) - 1] = 0;
puts(bar);
int lines = (len + 15) / 16;
int index = 0;
for (int s = 0; s < lines; s++)
{
printf("\r\n%03X_|", s*4);
int slen = len - index;
if (slen >= 16)
{
slen = 16;
}
for (int k = 0; k < slen; k++)
{
printf("%08X|", _buf[index]);
index++;
}
}
}
执行:
step 1:运行dump显示当前的内容,有三条记录,每条记录8个word
000_|55AA33CC|0001C200|00009600|00004B00|00004B00|1CC58885|FFFFFFFF|FFFFFFFF|55AA33CC|0001C200|00009600|00004B00|00004B00|1CC58885|FFFFFFFF|FFFFFFFF|
004_|55AA33CC|0001C200|00009600|00004B00|00004B00|1CC58885|FFFFFFFF|FFFFFFFF|FFFFFFFF|FFFFFFFF|FFFFFFFF|FFFFFFFF|FFFFFFFF|FFFFFFFF|FFFFFFFF|FFFFFFFF|
step2:擦除
step 3:运行dump显示当前的内容,还是有三条记录,每条记录8个word
000_|55AA33CC|0001C200|00009600|00004B00|00004B00|1CC58885|FFFFFFFF|FFFFFFFF|55AA33CC|0001C200|00009600|00004B00|00004B00|1CC58885|FFFFFFFF|FFFFFFFF|
004_|55AA33CC|0001C200|00009600|00004B00|00004B00|1CC58885|FFFFFFFF|FFFFFFFF|FFFFFFFF|FFFFFFFF|FFFFFFFF|FFFFFFFF|FFFFFFFF|FFFFFFFF|FFFFFFFF|FFFFFFFF|
step 4:复位
step 5:运行dump显示当前的内容,只有一条,每条记录8个word,因为复位后,发现flash是全FF,就把缺省设置写进去。这说明flash在step2确实被擦除了
000_|55AA33CC|0001C200|00009600|00004B00|00004B00|1CC58885|FFFFFFFF|FFFFFFFF|FFFFFFFF|FFFFFFFF|FFFFFFFF|FFFFFFFF|FFFFFFFF|FFFFFFFF|FFFFFFFF|FFFFFFFF|
004_|FFFFFFFF|FFFFFFFF|FFFFFFFF|FFFFFFFF|FFFFFFFF|FFFFFFFF|FFFFFFFF|FFFFFFFF|FFFFFFFF|FFFFFFFF|FFFFFFFF|FFFFFFFF|FFFFFFFF|FFFFFFFF|FFFFFFFF|FFFFFFFF|
问题在step 3,擦除之后再次打印,仍然是之前的内容,没有实际从擦除后的flash读取。 |
|