项目场景:
智能手表电池电量数值异常跳变问题,影响UI数据展示。
问题描述
例如UI中显示的当前电量值47%,在不确定的时间上数值突然跳到100。
原因分析:
看现象发现:在异常出现的时候,状态栏的值会跟着变为100%,充电菜单图标上的值也会变成100%,所以怀疑是底层传上来的值出现了异常值,而不是UI处理时出错,需要监测整个充电过程中的电量数据变化进行分析。
解决方案:
需要在电池电量读取的接口函数中添加保存当前值到文件的一个log函数,对于突然变化很大的值单独做记录,用于后面分析。
void yt_value_log_save(uint32_t value)
{
lv_fs_file_t pFp;
UINT32 size;
hal_rtc_t time;
memset(&time, 0, sizeof(hal_rtc_t));
Hal_Rtc_Gettime(&time);/*获取当前时间*/
char buff[256] = {0};
sprintf(buff,"%d-%d-%d:%d:%d,value=%lu\n",time.tm_mon,time.tm_mday,time.tm_hour ,time.tm_min,time.tm_sec, value);/*格式化要输出的值*/
if (lv_fs_open(&pFp, "C:/value_log.nv", LV_FS_MODE_WR | LV_FS_MODE_APPEND) != LV_FS_RES_OK) {
return ;
}
lv_fs_size(&pFp, &size);
lv_fs_seek(&pFp, size);
lv_fs_write(&pFp, buff, strlen(buff), NULL);/*数据写到文件*/
lv_fs_close(&pFp);
}