ch582m data flash问题

测试发现,使用

EEPROM_WRITE(StartAddr,Buffer,Length) 

写data flash时,当Buffer地址是用const修饰的数据时,写入有问题。

当去掉const修饰时,可以写入正常。

请贵司查看下是否是bug。



您好,如果要使用const修饰的数组,可以先使用memcpy函数,将codeflash中的const数据,拷贝到ram中的数组变量,再往dataflash中写入数组变量中的数据。

emobile_2023-01-10_10-35-01.pngemobile_2023-01-10_10-35-20.png


这种方式会加大ram的使用量,而使用const的目的就是为了减少ram的占用。

不确定data flash控制器是否有硬件限制,贵司能否改造EEPROM_WRITE,让它支持flash地址读。


您好,没有从一块flash直接拷贝到另一块flash这样的硬件功能,拷贝flash总是要经过ram实现的。
如果是考虑到RAM的占用,可以写一个子函数,在子函数中用memcpy()缓存到临时变量中,临时变量数组在跳出子函数后即自动释放。也可以用malloc()申请一块ram,实现完flash拷贝后再用free()手动释放。申请的ram大小要看实际情况,如果ram实在紧张仍申请ram,可能会存在编译器检查不出的隐患。

如果希望ram占用更少,可以在子函数中用更小的数组变量或者申请更小的ram,使用更多的操作次数,用时间换空间来实现flash拷贝。比如说,我们flash是4字节对其的,每次只拷贝4字节,临时变量也只需要4个字节,但是相比一次256字节的页写,会占用更长事件。


好的,我用临时变量解决吧。谢谢你~


只有登录才能回复,可以选择微信账号登录