void GetLogNum(rtc_time_t *time)
{
uint8_t data[256];
uint32_t read_addr = LOGIN_NUM_START_ADDR;
uint16_t i,j;
osMutexWait(spi_flash_mutex_id, osWaitForever);
while(read_addr < LOGIN_NUM_END_ADDR)
{
W25QXX_Read(data,read_addr,sizeof(data));
for(i=0;i<sizeof(data);i+=8) //时间+lognum总共8个字节
{
if(data[i]==0xff)
{
for(j=0;j<8;j++) //时间+lognum总共8个字节
{
if(data[i+j]!=0xff)
{
break;
}
}
if(j==8)
{
time->year = 0xff;
time->month = 0xff;
time->date = 0xff;
time->hour = 0xff;
time->minute = 0xff;
time->second = 0xff;
break;
}
}
else
{
time->year = data[i];
time->month = data[i+1];
time->date = data[i+2];
time->hour = data[i+3];
time->minute = data[i+4];
time->second = data[i+5];
}
}
if(i!=sizeof(data))
{
break;
}
read_addr += sizeof(data);
}
osMutexRelease(spi_flash_mutex_id);
}丰铭12:00
osMutexWait(spi_flash_mutex_id, osWaitForever); 上锁
W25QXX_Read(data,read_addr,sizeof(data));从flash read_addr(开始时LOGIN_NUM_START_ADDR,后面循环递增) 这个地址读取数据,每次大小256字节,
寻找第一个不是0xff开头的数字,找到就解析日期,如果都是0xff说明书结尾,退出大循环
osMutexRelease(spi_flash_mutex_id);释放锁