智林STM32开发板上的FatFS移植过程分析
智林STM32开发板上的FatFS移植过程分析
智林STM32开发板上的FatFS移植过程分析(一)
http://doc.guandang.net/upload/2010/3/12/179aec15-2659-4ff5-b53a-5795c2e5e2ff.rar这是可以支持参数的命令shell。
一、移植目的
1、结合命令界面的改进,实现文件系统与命令界面的结合使用。
2、在命令界面中实现以下文件系统操作命令:flist-列出当前目录下的文件;fmkdir-在当前目录下创建目录;fchgdir-改变当前目录;fread-读取文件内容;fwrite-新建文件并写入。
二、移植条件
1、可以识别参数的串口命令界面。
2、FatFS007e版本。
三、对命令界面所实现功能的描述
1、超级终端设置。
首先打开串口终端,设置波特率115200,8位数据,无奇偶校验,无流控,终端仿真选择ANSIW,asicc码设置为以换行符结尾(以前设置的,原因已经忘了),反正这样设置了能够正常工作。
开发板复位后,终端显示:**********nthq2004编写的简单命令接口!*********
Sh> 然后可以在这里输入命令执行。比如现在支持的命令包括:
"help","cls","ledon","ledoff","time","temp","i2cwr","i2crd","sdrd","sdwr",共10个命令。比如输入help me命令,则会显示命令界面当前支持的所有命令,并显示当前所有输入的命令参数。所以命令执行过程的分析以help me为例,help是命令,me是参数。
2、串口终端命令输入过程
在串口终端输入一个字符时,其工作工程为:
void USART1_IRQHandler(void){ //该函数在文件stm32f10x_it.c中
OS_CPU_SR cpu_sr;
OS_ENTER_CRITICAL();
OSIntNesting++; //中断嵌套计数
OS_EXIT_CRITICAL();
智林STM32开发板上的FatFS移植过程分析
if ( USART_GetITStatus ( USART1, USART_IT_RXNE )!= RESET )
{ Uart_ReceiveChar(); //串口接收字符 }
OSIntExit(); //这里可以触发任务切换软中断
}
串口接收到字符引起终端、然后调用函数Uart_ReceiveChar()获取字符并放入串口消息队列, void Uart_ReceiveChar (void) { //该函数在文件uart.c中
u32 RecChar;
RecChar = (u32)(USART1->DR & 0xFF);
OSQPost ( UartMsgOSQ, ( void* )RecChar ); //将字符指针化放入消息队列,这里接用了周慈航教授书中的方法。}
在task_uartcmd.c文件创建的串口界面任务中,
case UartStateInput: //如果出于输入状态
{ UartCharIn=Uart_GetChar(); //读取输入按键
UartCharIn &= 0x7F;
该函数从消息队列中取得从串口接收到的字符,然后放入到串口命令缓冲数组。
UartCmdBuf[UartCharCount]=UartCharIn; //将字符存入缓冲区当前位置
UartCharCount +=1;
Uart_PutChar( UartCharIn );//将有效字符输出。这是在用户电脑的超级终端上进行回显。}
如果用户在超级终端上按下了回车键:
if(UartCharIn=='\n') //如果按下了Enter键,它是触发软件状态机从输入态
{ //进入命令解释执行态的关键。
UartCmdBuf[UartCharCount]='\0'; //命令缓冲区以0结束
Uart_PutString( "\r\n" ); //显示器上回显换行
UartCmdState=UartStateExe; //如果输入过字符,进入命令解释态
UartCharCount=0;
}
3、串口命令执行过程
进入命令执行态后,首先进行命令缓冲字符串的解析,从中分析出命令和参数:
case UartStateExe: //如果处于命令执行态
智林STM32开发板上的FatFS移植过程分析
{
UartParseCmdBuf(UartCmdBuf,&CmdArg); //命令缓冲字符串的解析
解析后得到一个结构数组,指明参数的个数和一个指向参数指针数组的指针:
该数组的第一个指针指向命令字符串,第二个开始指向参数。
UartCmdStr=CmdArg.Argv[0]; //解析命令缓冲区,得到命令结构信息,我这里还只支持简单命令
//所以处理很简单,直接获得命令字符串,以后可以扩展。 for(UartCmdIndex=0; UartCmdIndex<UartCmdMaxCount; UartCmdIndex++ )
{ //在命令表里搜索对应命令字符串
UartCompResult=strcmp((char*)UartCmdStr,(char*)(UartCmdStrTable[UartCmdIndex]) ); //命令字符串比较的结果
if (UartCompResult==0) //如果在字符串表里找到。返回0.
break; //此时CmdIndex对应的值为命令在命令表里的索引。 if ( UartCmdIndex<UartCmdMaxCount)
{ //找到对应命令,调用相应函数处理
argc=CmdArg.Argc;
for ( j="0"; j<argc; j++ )
{ argv[j]=(void*)CmdArg.Argv[j];
}
UartCmdTable[UartCmdIndex].UartCmdFunc(argc,argv);//利用
}
实际上输入命令help me,此时调用的函数就是:
UartCmdTable[0].UartCmdFunc=UartCmdHelp;
该函数的源代码在文件uartcmd.c文件中:
void UartCmdHelp(u8 argc,void **argv){
u8 i;
Uart_PutString("You entered the parameter: ");
for ( i="1"; i<argc; i++ )
{
Uart_PutString( argv[i] ); /这是将后面的参数一一列出来。
Uart_PutString( " " );
}
Uart_PutString( "\r\n" ); /这是将命令界面支持的命令列举出来。 }
智林STM32开发板上的FatFS移植过程分析
Uart_PutString("cls ");
Uart_PutString("ledon ");
Uart_PutString("ledoff ");
Uart_PutString("time ");
Uart_PutString("temp ");
Uart_PutString("i2cwr ");
Uart_PutString("i2crd \r\n");
Uart_PutString("sdrd ");
Uart_PutString("sdwr \r\n");
}
智林STM32开发板上的FatFS移植过程分析(二)
四、建立文件系统命令执行框架
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组。
相关推荐:
- [法律文档]苏教版七年级语文下册第五单元教学设计
- [法律文档]向市委巡视组进点汇报材料
- [法律文档]绵阳市2018年高三物理上学期第二次月考
- [法律文档]浅析如何解决当代中国“新三座大山”的
- [法律文档]延安北过境线大桥工程防洪评价报告 -
- [法律文档]激活生成元素让数学课堂充满生机
- [法律文档]2014年春学期九年级5月教学质量检测语
- [法律文档]放射科标准及各项计1
- [法律文档]2012年广州化学中考试题和答案(原版)
- [法律文档]地球物理勘查规范
- [法律文档]《12系列建筑标准设计图集》目录
- [法律文档]2018年宁波市专技人员继续教育公需课-
- [法律文档]工会委员会工作职责
- [法律文档]2014新版外研社九年级英语上册课文(完
- [法律文档]《阅微草堂笔记》部分篇目赏析
- [法律文档]尔雅军事理论2018课后答案(南开版)
- [法律文档]储竣-13827 黑娃山沟大开挖穿越说明书
- [法律文档]《产品设计》教学大纲及课程简介
- [法律文档]电动吊篮专项施工方案 - 图文
- [法律文档]实木地板和复合地板的比较
- 探析如何提高电力系统中PLC的可靠性
- 用Excel函数快速实现体能测试成绩统计
- 教师招聘考试重点分析:班主任工作常识
- 高三历史选修一《历史上重大改革回眸》
- 2013年中山市部分职位(工种)人力资源视
- 2015年中国水溶性蛋白市场年度调研报告
- 原地踏步走与立定教学设计
- 何家弘法律英语课件_第十二课
- 海信冰箱经销商大会——齐俊强副总经理
- 犯罪心理学讲座
- 初中英语作文病句和错句修改范例
- 虚拟化群集部署计划及操作流程
- 焊接板式塔顶冷凝器设计
- 浅析语文教学中
- 结构力学——6位移法
- 天正建筑CAD制图技巧
- 中华人民共和国财政部令第57号——注册
- 赢在企业文化展厅设计的起跑线上
- 2013版物理一轮精品复习学案:实验6
- 直隶总督署简介




