TA的每日心情 | 奋斗 2018-8-29 20:40 |
|---|
签到天数: 1341 天 连续签到: 1 天 [LV.10]以坛为家III
状元
- 积分
- 9660
        
|
在InitC55ABP() 函数中 关于文件系统的操作有
Go_RootDir();
UpdateFileSys_Dir();
UpdateContext_Count();
context.root_dir_count = context.curr_dir_count;
在 ACTBP_filesys.c 文件中 有 Go_RootDir(); 函数的定义, 在该函数中,用到了 CD` 命令 ,该命令将文件目录改为之前利用 sys_file命令设置的目录(调用函数 uif_writeArray 写入字符串)
使用方法如下
$sys_file=”<DirName>”
$operation=CD
而默认有三个目录:根目录,当前目录,录音目录
const struct StringsDirNav dirnavStrings = {
"\\", //dirnavStrings.ROOT_DIR
".", //dirnavStrings.CURRENT_DIR
"RecDir", //dirnavStrings.RECORD_DIR
};
在 ACTBP_filesys.c文件中,有 void UpdateFileSys_Dir(void) 函数定义,该函数调用 DIR 命令,用于显示指定文件夹中的文件和子文件夹列表,类似于windows控制台命令 DIR
在ACTBP_filesys.c文件中,有 void UpdateContext_Count(void) 函数定义,该函数调用 file_count和dir_count 命令,用于显示指定文件夹中音频文件数目和子文件夹数目(通过调用uif_readScalar函数得到返回值),并利用这些得到的值,更新用于记录上下文的context结构体中的相关记录
该结构体的定义如下
struct ContextABP
{
enum event current_event;
enum event_hold last_event;
enum state current_state;
enum state last_state;
int curr_dir_num;
int curr_file_num;
int curr_dir_count;
int root_dir_count;
int curr_file_count;
unsigned char curr_volume;
unsigned char curr_play_status;
unsigned char curr_record_status;
unsigned shuffle_status:1;
unsigned cycle_status:1;
unsigned USB_cableinsert:1;
unsigned disable_command:1;
};
分析函数
Go_NextDir();
UpdateDisplay_Dir();
在 ACTBP_display.c 文件中UpdateDisplay_Dir() 函数定义,该函数用于实现更新显示文件目录DIR:……,在虚拟的第五行上
在 ACTBP_filesys.c文件中有 Go_NextDir()函数定义,该函数主要调用了NEXTD 命令,注意在使用该命令之前,要保证dir_info寄存器保存了正确的文件夹信息,也就是说之前已经调用了DIR命令
在进入当前文件夹的第一个子文件夹函数 void Go_FirstDir(void)中,调用了 FSTD命令。
本次实验目的是 利用液晶屏幕 显示文件信息 包括当前文件数目 和 子文件夹数目- void MyShowInf()
- {
- Status status = FAILURE;
- char myStr[4][10]={"Dir Num: ", " ", "File Num: ", " "};
- unsigned long cursor[4] = {0x0000, 0x000b, 0x0100, 0x010b};
- unsigned int num[2] = {0};
- char i = 0;
- Go_RootDir();
- UpdateFileSys_Dir();
- UpdateContext_Count();
- // 将得到的数字换算成字符
- num[0]= (unsigned int )context.curr_dir_count;
- num[1] = (unsigned int )context.curr_file_count;
- myStr[1][0] = num[0]/10 + '0';
- myStr[1][1] = num[0]%10 + '0';
- myStr[3][0] = num[1]/10 + '0';
- myStr[3][1] = num[1]%10 + '0';
- for(i=0; i<4; i++)
- {
- // 1 分配字符串 及 ID
- RegAddr = UIF_CMD_STR;
- status = uif_writeArray( RegAddr, (unsigned int) 10, myStr[i]);
- RegAddr = UIF_CMD_OPERATION;
- OperationVal = SID_TMP; // 改为05
- status = uif_writeScalar( RegAddr, OperationVal, (unsigned int) ACK_EXPECT);
- // 2 设置坐标第一行 利用 SETCUR 命令
- RegAddr = UIF_CMD_PARAM;
- status = uif_writeScalar( RegAddr, cursor[i], (unsigned int) ACK_EXPECT);
- RegAddr = UIF_CMD_OPERATION;
- OperationVal = UIF_CMD_SETCUR;
- status = uif_writeScalar( RegAddr, OperationVal, (unsigned int) ACK_EXPECT);
- // 3 虚拟显示出来第一行 利用 PRTSxx 命令
- RegAddr = UIF_CMD_OPERATION;
- OperationVal = PRT_TMP;
- status = uif_writeScalar( RegAddr, OperationVal, (unsigned int) ACK_EXPECT);
- }
- // 实际显示出来
- OperationVal = UIF_CMD_SETVP;
- RegAddr = UIF_CMD_PARAM;
- status = uif_writeScalar( RegAddr, (unsigned long) (0x0000), (unsigned int) ACK_EXPECT);
- RegAddr = UIF_CMD_OPERATION;
- status = uif_writeScalar( RegAddr, OperationVal, (unsigned int) ACK_EXPECT);
- }
复制代码 测试结果图
实际的SD卡中的文件
|
|