我在F1的单片机上移植RL-FlashFS,测试以下内容。
------------------------------------------------
请选择串口操作命令,电脑键盘打印数字即可:
首次使用,如果操作NOR,务必调用串口命令1,进行NOR Flash的低级格式化和文件系统格式化
0 - 读取FlashID
1 - 显示卡容量和剩余容量
2 - 显示卡根目录下的文件
3 - 创建三个text文本并使用不同函数写入内容
4 - 使用三个不同函数读取文本
5 - 删除文件夹和文件
6 - 测试文件读写速度
7 - 写数据到CSV文件中
8 - 从CSV文件中读数据
9 - 读串行Flash, 地址:0x0,长度:4096字节
A - 写串行Flash, 地址:0x0,长度:4096字节
------
命令0,1,2,9,A都成功,但是3号命令失败。
[C] 纯文本查看 复制代码 /*
*********************************************************************************************************
* 函 数 名: CreateNewFile
* 功能说明: 创建三个text文本,分别使用fwrite,fprintf和fputs写数据。
* 形 参: _path,U盘,SD卡和NAND
* 返 回 值: 无
*********************************************************************************************************
*/
static void CreateNewFile(char *_path)
{
const uint8_t WriteText[] = {"武汉安富莱电子有限公司\r\n2015-09-06\r\nwww.armfly.com\r\nWWW.ARMFLY.COM"};
const uint8_t WriteText1[] = {"武汉安富莱电子有限公司\r"};
FILE *fout;
uint32_t bw;
uint32_t i = 2;
uint8_t result;
char namepath[30];
result = finit(_path);
if(result != NULL)
{
/* 如果挂载失败,务必不要再调用FlashFS的其它API函数,防止进入硬件异常 */
printf("初始化文件系统失败 (%s)\r\n", ReVal_Table[result]);
return;
}
else
{
printf("初始化文件系统成功 (%s)\r\n", ReVal_Table[result]);
}
/* 加载 */
result = fmount(_path);
if(result != NULL)
{
/* 如果挂载失败,务必不要再调用FlashFS的其它API函数,防止进入硬件异常 */
printf("挂载文件系统失败 (%s)\r\n", ReVal_Table[result]);
goto access_fail;
}
else
{
printf("挂载文件系统成功 (%s)\r\n", ReVal_Table[result]);
}
printf("------------------------------------------------------------------\r\n");
/**********************************************************************************************************/
/* 打开文件test1.txt,如果没有txt文件会自动创建*/
sprintf(namepath, "%s\\test1.txt", _path);
fout = fopen (namepath, "w");
if (fout != NULL)
{
printf("打开文件\\test1.txt成功,如果没有子文件夹和txt文件会自动创建\r\n");
/* 写数据 */
bw = fwrite (WriteText, sizeof(uint8_t), sizeof(WriteText)/sizeof(uint8_t), fout);
if(bw == sizeof(WriteText)/sizeof(uint8_t))
{
printf("写入内容成功\r\n");
}
else
{
printf("写入内容失败\r\n");
}
/* 关闭文件 */
fclose(fout);
}
else
{
printf("打开文件%s失败\r\n", namepath);
}
/**********************************************************************************************************/
/* 打开文件test2.txt,如果没有txt文件会自动创建*/
sprintf(namepath, "%s\\test2.txt", _path);
fout = fopen (namepath, "w");
if (fout != NULL)
{
printf("打开文件\\test2.txt成功,如果没有子文件夹和txt文件会自动创建\r\n");
/* 写数据 */
bw = fprintf (fout, "%d %d %f\r\n", i, i*5, i*5.55f);
/* 使用函数ferror检测是否发生过错误 */
if (ferror(fout) != NULL)
{
printf("写入内容失败\r\n");
}
else
{
printf("写入内容成功\r\n");
}
/* 关闭文件 */
fclose(fout);
}
else
{
printf("打开文件%s失败\r\n", namepath);
}
/**********************************************************************************************************/
/* 打开文件test3.txt,如果没有txt文件会自动创建*/
sprintf(namepath, "%s\\test3.txt", _path);
fout = fopen (namepath, "w");
if (fout != NULL)
{
printf("打开文件\\test3.txt成功,如果没有子文件夹和txt文件会自动创建\r\n");
/* 写数据 */
fputs((const char *)WriteText1, fout);
/* 使用函数ferror检测是否发生过错误 */
if (ferror(fout) != NULL)
{
printf("写入内容失败\r\n");
}
else
{
printf("写入内容成功\r\n");
}
/* 关闭文件 */
fclose(fout);
}
else
{
printf("打开文件%s失败\r\n", namepath);
}
access_fail:
/* 卸载 */
result = funmount(_path);
if(result != NULL)
{
printf("卸载文件系统失败\r\n");
}
else
{
printf("卸载文件系统成功\r\n");
}
result = funinit(_path);
if(result != NULL)
{
printf("复位文件系统失败 (%s)\r\n", ReVal_Table[result]);
}
else
{
printf("复位文件系统成功 (%s)\r\n", ReVal_Table[result]);
}
printf("------------------------------------------------------------------\r\n");
}
执行返回的数据如下
【3 - CreateNewFile】
初始化文件系统成功 (fsOK:成功)
挂载文件系统成功 (fsOK:成功)
------------------------------------------------------------------
打开文件F0:\test1.txt失败
打开文件F0:\test2.txt失败
打开文件F0:\test3.txt失败
卸载文件系统成功
复位文件系统成功 (fsOK:成功)
------------------------------------------------------------------
这个该从哪个方向去查找问题呢?
|