關于CH32V208WBU6芯片,F(xiàn)LASH直接讀取導致MCU重啟問題

您好,如題,我新建一個工程去dump某段Flash的數(shù)據
image.png

地址以兩個字節(jié)的方式遞增,兩個字節(jié)的方式讀取沒有任何問題 ,但是以4字節(jié)讀取就會導致MCU重啟,地址以4字節(jié)遞增4字節(jié)讀取也沒有問題,請問這是什么原因?
image.png? ? ? ? ? ? ? image.png

image.png


您好,這邊測試暫時沒遇到你的問題,若方便可將你的工程發(fā)我郵箱(lzs@wch.cn),這邊具體看一下

image.png


您好,您代碼里應該讀的是addr地址里的值而不是rdaddr吧?
image.png


我的模板是空的,只是加了這些代碼


#define OEM_INF_SIZE? ? ? ? ? ? ? ((uint32_t)0x1000ul)

#define OEM_INF_ADDR? ? ? ? ? ? ? (0x8027000ul)


?Delay_Ms(1000);

? ? ? ? printf("16 Read\r\n");

? ? ? ?for (uint32_t i = 0; i < OEM_INF_SIZE; i += 2)

? ? ? ?{

? ? ? ? ? ?printf("addr:%x? ? data:%x\r\n",(uint32_t*)(OEM_INF_ADDR + i),*((uint16_t*)(OEM_INF_ADDR + i)));

? ? ? ?}



? ? ? ?printf("32 Read\r\n");


? ? ? ?for (uint32_t i = 0; i < OEM_INF_SIZE; i += 2)

? ? ? ?{

? ? ? ? ? ?printf("addr:%x? ? data:%x\r\n",(uint32_t*)(OEM_INF_ADDR + i),*((uint32_t*)(OEM_INF_ADDR + i)));

? ? ? ?}



您好,感謝指出,讀的那地方確實錯了,改過來之后復現(xiàn)你的問題,不停重啟是因為進HardFault了,在HardFault中斷中有系統(tǒng)復位,所以不停重啟,這邊打印看了一下具體原因,如下圖,是由于加載地址不對齊導致進的HardFault,建議32位讀的時候地址每次加4,這樣就不會有問題了。

image.png


感謝您的解答,但是我還是不太理解,你的意思是如果我想以4字節(jié)讀取,就必須以4字節(jié)遞增地址,2字節(jié)讀取就必須以2字節(jié)遞增嗎?
image.png

我在ST一些系列的芯片中,以任意地址遞增,都可以以任意字節(jié)訪問數(shù)據的,我的代碼就是從ST移植過來發(fā)現(xiàn)這個問題的,請問是V208的內核不支持這種操作嗎?還是說是其他問題?


您好,這個應該跟ARM支持非對齊訪問、RISC-V不支持非對齊訪問有關,不過你可以按照下圖方法試一下解決該問題,我測試應該是沒問題的,如下圖:image.png



感謝解答?。?!這樣確實可以了。


只有登錄才能回復,可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频