測試發(fā)現(xiàn),使用
EEPROM_WRITE(StartAddr,Buffer,Length)?
寫data flash時(shí),當(dāng)Buffer地址是用const修飾的數(shù)據(jù)時(shí),寫入有問題。
當(dāng)去掉const修飾時(shí),可以寫入正常。
請貴司查看下是否是bug。
測試發(fā)現(xiàn),使用
EEPROM_WRITE(StartAddr,Buffer,Length)?
寫data flash時(shí),當(dāng)Buffer地址是用const修飾的數(shù)據(jù)時(shí),寫入有問題。
當(dāng)去掉const修飾時(shí),可以寫入正常。
請貴司查看下是否是bug。
您好,如果要使用const修飾的數(shù)組,可以先使用memcpy函數(shù),將codeflash中的const數(shù)據(jù),拷貝到ram中的數(shù)組變量,再往dataflash中寫入數(shù)組變量中的數(shù)據(jù)。
這種方式會加大ram的使用量,而使用const的目的就是為了減少ram的占用。
不確定data flash控制器是否有硬件限制,貴司能否改造EEPROM_WRITE,讓它支持flash地址讀。
您好,沒有從一塊flash直接拷貝到另一塊flash這樣的硬件功能,拷貝flash總是要經(jīng)過ram實(shí)現(xiàn)的。
如果是考慮到RAM的占用,可以寫一個(gè)子函數(shù),在子函數(shù)中用memcpy()緩存到臨時(shí)變量中,臨時(shí)變量數(shù)組在跳出子函數(shù)后即自動(dòng)釋放。也可以用malloc()申請一塊ram,實(shí)現(xiàn)完flash拷貝后再用free()手動(dòng)釋放。申請的ram大小要看實(shí)際情況,如果ram實(shí)在緊張仍申請ram,可能會存在編譯器檢查不出的隱患。
如果希望ram占用更少,可以在子函數(shù)中用更小的數(shù)組變量或者申請更小的ram,使用更多的操作次數(shù),用時(shí)間換空間來實(shí)現(xiàn)flash拷貝。比如說,我們flash是4字節(jié)對其的,每次只拷貝4字節(jié),臨時(shí)變量也只需要4個(gè)字節(jié),但是相比一次256字節(jié)的頁寫,會占用更長事件。
好的,我用臨時(shí)變量解決吧。謝謝你~