在Chan'中写入的字节数是否有任何限制;什么是FAT文件系统模块?
我使用的是ARM Cortex-M7(ATMEL处理器)whit,在编写非倍增字节量为扇区大小默认值(512字节)的文件时遇到问题 在循环之后,我使用f_write()函数以不同长度的字节(不是多个扇区大小的默认值)写入文件,一些字符出现错误 以下是写作的主要部分:在Chan'中写入的字节数是否有任何限制;什么是FAT文件系统模块?,c,filesystems,embedded,sd-card,cortex-m,C,Filesystems,Embedded,Sd Card,Cortex M,我使用的是ARM Cortex-M7(ATMEL处理器)whit,在编写非倍增字节量为扇区大小默认值(512字节)的文件时遇到问题 在循环之后,我使用f_write()函数以不同长度的字节(不是多个扇区大小的默认值)写入文件,一些字符出现错误 以下是写作的主要部分: f_open(&FileObject, filename_aux, FA_CREATE_ALWAYS | FA_WRITE); do {
f_open(&FileObject, filename_aux, FA_CREATE_ALWAYS | FA_WRITE);
do
{
len = getAviableData(buf);
f_write(&FileObject, , buf, len, (UINT*)&ByteWritten);
total += len;
}while(total < MAX_LEN)
f_close(&FileObject);
f_open(&FileObject,filename_aux,FA_CREATE_ALWAYS | FA_WRITE);
做
{
len=getAviableData(buf);
f_write(和FileObject、buf、len、(UINT*)和bytewrite);
总+=len;
}而(总数<最大值)
f_关闭(&FileObject);
当我将它写入另一个没有文件系统的内存时,我没有任何问题
谢谢。这里有一个解决方案:
f_open(&FileObject, filename_aux, FA_CREATE_ALWAYS | FA_WRITE);
do
{
/* Cache Maintenance */
SCB_CleanDCache_by_Addr((uint32_t *)buf, BUF_MAX_SIZE);
len = getAviableData(buf);
f_write(&FileObject, buf, len, (UINT*)&ByteWritten);
/* Data Memory Barrier */
__DMB();
total += ByteWritten;
}while(total < MAX_LEN)
f_close(&FileObject);
f_open(&FileObject,filename_aux,FA_CREATE_ALWAYS | FA_WRITE);
做
{
/*缓存维护*/
按地址((uint32 t*)基本尺寸、基本尺寸和最大尺寸)列出的SCB清洁缓存;
len=getAviableData(buf);
f_write(和FileObject、buf、len、(UINT*)和bytewrite);
/*数据存储屏障*/
__DMB();
总计+=字节写入;
}而(总数<最大值)
f_关闭(&FileObject);
注意,我添加了DCache维护和数据内存屏障
文件现在已正确写入,没有错误
谢谢。你做错了什么。FATfs适用于“常规”文件大小IME。应为“total+=len;”不能是'total+=字节写入;'?FafFs没有定义特定于目标的I/O驱动程序——我想说的是,根本不清楚这不是问题所在。什么版本?谁提供了I/O层(或者你自己写的)?您使用的是SPI还是SDIO?Cortex-M标签没有帮助;,这是一个外围I/O问题,而不是ARM核心问题-实际目标是什么?这也没有帮助,因为thsi不是“真实”代码-
f_write()
调用在语法上不正确(额外的逗号),因此显然不是您正在运行的代码。@Clifford IME,如果FATfs下面的“512”IO驱动程序不能正常工作,您甚至无法安装驱动器。