<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
四、建立文件系统命令执行框架
1、添加新的命令
初期目标是5个命令,为了使编写过程简化和快捷,先实现一个命令fread,文件系统移植成功后,再添加剩下的命令。
u8* UartCmdStrTable[UartCmdMaxCount]={ //串口命令字符串
"help","cls","ledon","ledoff",
"time","temp","i2cwr","i2crd",
"sdrd","sdwr","fread" //先添加命令字符串
};
#define UartCmdMaxCount 11 //现在支持11个内部命令
UartCmdTable[10].UartCmdFunc=UartCmdFRead; //初始化命令数据结构,这是一个新的命令实现函数,在新的文件fileop.c中实现。该文件加入userlib组。
Fileop.c中编写新的函数:
void UartCmdFRead(u8 argc,void **argv){
Uart_PutString("You put the command: fread. \r\n");}
然后在uartcmd.h中添加该函数的声明。然后Rebuild整个工程,下载程序,进行验证。在串口输入命令:fread,显示You put the command: fread.说明命令添加成功。但是忘了在帮助命令中添加该命令的说明,补充一下。
2、重新设计fread命令的功能和程序结构构思
首先,该命令打开一个文件,读入一个扇区到缓冲区,然后在串口终端上显示;输入任意键,持续该过程。直到输入ESC键,命令执行完成,回到shell界面。
这个程序内容的编写就设计到文件系统的操作了,结合以前对fatfs的分析,首先确定文件操作的流程:首先要调用函数FRESULT f_mount (BYTE, FATFS*),进行文件系统的注册,提供逻辑盘的数字序号(要小于逻辑盘个数),提供一个用户的文件系统对象指针,然后让系统内部的文件对象指针数组中对应于该文件系统序号的指针指向用户提供的文件系统对象,共其他函数使用。在使用这个函数之前,先定义一个用户的文件系统对象。
然后调用函数FRESULT f_open (FIL*, const XCHAR*, BYTE),打开文件,需要提供参数文件结构对象指针和文件字符串指针。用户先定义一个文件结构对象,然后将地址传入该函数,用户利用字符串对应文件的信息填充该文件结构对象。
然后就可以调用函数FRESULT f_read (FIL*, void*, UINT, UINT*);将用户指定文件的内容读入到缓冲区。
程序框架如:
void UartCmdFRead(int argc,void **argv)
{ FIL FileInf;
u8 FileBuf[512];
u16 i;
u32 ByteToRead,ByteRead;
u8 res;
res="f"_open(&FileInf,FilePath,FA_READ|FA_OPENAWAYLS);
if ( res!=FR_OK) { Uart_PutStr( "File Open Error!");return res;}
do {
res="f"_read(&FileInf,FileBuf,ByteToRead,&ByteRead); //要进去看一看,读后有没有自动调整指针。
if ( res!=FR_OK) { Uart_PutStr( "File Read Error!");return;}
for(i=0;i<512;i++){Uart_PutChar(FileBuf;}
}while ( Uart_GetChar()!=0x1c );
}
文章评论(0条评论)
登录后参与讨论