【RISC-V MCU CH32V103测评】实时标记文件创建时间
[复制链接]
本帖最后由 jennyzhaojie 于 2021-3-19 00:23 编辑
上次提过,在U盘的例程中其新建的文件日期是认为设置的,而非实时时间,因此在识读文件创建日期不能当真。
那是否能为创建的文件添加上实时的时间呢?
方法是启用MCU内部的RTC计时器,当然在使用时你要为RTC配置一个后备电池,否则即使有了RTC的帮助,也奈何不了没电的制约。
为了达到实时标记时间的目的,首要的是在U屏读写的例程中添加RTC计时程序,其运行效果如图1所示。
图1 添加RTC计时功能
其后,是验证原来的U盘读写功能是否会受到影响,经实际验证,其执行效果如图2至图4所示。
这说明U盘的读写功能是不受影响的,且生成文件的时间是实时标记的。
有了这个基础,后续我们还可以将其用到数据的采集与记录方面。
图2 文件创建时刻的跟踪处理
图3 文件的相关属性
图4 文件的写入内容
实现演示效果的程序为:
int main()
{
UINT8 s, c, i,x,y;
UINT16 TotalCount;
UINT32 l;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
Delay_Init();
USART_Printf_Init(115200);
printf("SystemClk:%d\r\n",SystemCoreClock);
Delay_Ms( 200 );
printf("RTC Test\r\n");
RTC_Init();
printf("USBHD HOST Test\r\n");
USBHD_ClockCmd(RCC_USBCLKSource_PLLCLK_1Div5,ENABLE);
pHOST_RX_RAM_Addr = RxBuffer;
pHOST_TX_RAM_Addr = TxBuffer;
USB_HostInit();
CHRV3LibInit();
printf( "Wait Device In\r\n" );
while(1)
{
s = ERR_SUCCESS;
if ( R8_USB_INT_FG & RB_UIF_DETECT )
{
R8_USB_INT_FG = RB_UIF_DETECT ;
s = AnalyzeRootHub( );
if ( s == ERR_USB_CONNECT )
{
printf( "New Device In\r\n" );
FoundNewDev = 1;
}
if( s == ERR_USB_DISCON )
{
printf( "Device Out\r\n" );
}
}
printf("%d-%d-%d %d %d:%d:%d\r\n",calendar.w_year,calendar.w_month,calendar.w_date,calendar.week,calendar.hour,calendar.min,calendar.sec );
Delay_Ms(1000);
if ( FoundNewDev || s == ERR_USB_CONNECT )
{
FoundNewDev = 0;
Delay_Ms( 200 );
s = InitRootDevice( Com_Buffer );
if ( s == ERR_SUCCESS )
{
// U盘操作流程:USB总线复位、U盘连接、获取设备描述符和设置USB地址、可选的获取配置描述符,之后到达此处,由CH103子程序库继续完成后续工作
CHRV3DiskStatus = DISK_USB_ADDR;
for ( i = 0; i != 10; i ++ )
{
printf( "Wait DiskReady\r\n" );
s = CHRV3DiskReady( ); //等待U盘准备好
if ( s == ERR_SUCCESS )
{
break;
}
else
{
printf("%02x\r\n",(UINT16)s);
}
Delay_Ms( 50 );
}
if ( s == ERR_MISS_DIR || s == ERR_MISS_FILE )
{
printf( "Find No File And Create\r\n" );
strcpy( (PCHAR)mCmdParam.Create.mPathName, "/NEWFILE.TXT" );
s = CHRV3FileCreate( );
mStopIfError( s );
printf( "ByteWrite\n" );
i = sprintf( (PCHAR)buf,"Note: \xd\xa这个程序是以字节为单位进行U盘文件读写,简单演示功能。\xd\xa"); /*演示 */
for(c=0; c<10; c++)
{
mCmdParam.ByteWrite.mByteCount = i;
mCmdParam.ByteWrite.mByteBuffer = buf;
s = CHRV3ByteWrite( );
mStopIfError( s );
printf("成功写入 %02X次\r\n",(UINT16)c);
}
printf( "Modify\r\n" );
mCmdParam.Modify.mFileAttr = 0xff;
mCmdParam.Modify.mFileTime = MAKE_FILE_TIME( calendar.hour, calendar.min, calendar.sec );
mCmdParam.Modify.mFileDate = MAKE_FILE_DATE( calendar.w_year, calendar.w_month, calendar.w_date );
mCmdParam.Modify.mFileSize = 0xffffffff;
i = CHRV3FileModify( );
mStopIfError( i );
printf( "Close\r\n" );
mCmdParam.Close.mUpdateLen = 1;
i = CHRV3FileClose( );
mStopIfError( i );
printf("%d-%d-%d %d %d:%d:%d\r\n",calendar.w_year,calendar.w_month,calendar.w_date,calendar.week,calendar.hour,calendar.min,calendar.sec );
}
}
}
}
Delay_Ms( 100 ); // 模拟单片机做其它事
SetUsbSpeed( 1 ); // 默认为全速
}
}
|