本帖最后由 萌萌的小x盆友 于 2018-10-14 15:42 编辑
OS 获取时间,日期不更新.使用 HAL_RTC_GetTime(); 获取时间, 在HTTP 中正常;
但在 任务中更新缓慢, 执行多次, 响应一次. 已在获取前置一打印, 检测是否到位, 打印次数正常, 10S产生17-18次, 但时间更新却只有5-7S一次;
实在无解, 未使用Keil优化;
/*****************************************************************/
/*** Time_任务函数 ***/
void Time_TASK(void *p_arg)
{
OS_ERR err;
static u32 i[2] = {0,0}; //i[0]_秒维护(0.5S); i[1]_日期维护(60S);
p_arg = p_arg;
CPU_SR_ALLOC();
while(1)
{
OS_CRITICAL_ENTER(); //进入临界区
/*** Hardware_BSP 时间日期 维护段 ***/
if(i[0]<OSTimeGet(&err)-(OSCfg_TickRate_Hz*0.5)) //0.5S
{
i[0] = OSTimeGet(&err);
printf("T");
HAL_RTC_GetTime(&_hRTC, &__Board_Hardware.time, RTC_FORMAT_BIN); //RTC 时间(自动更新_0.5S)
}
if(i[1]<OSTimeGet(&err)-(OSCfg_TickRate_Hz*5)) //5S
{
i[1] = OSTimeGet(&err);
HAL_RTC_GetDate(&_hRTC, &__Board_Hardware.date, RTC_FORMAT_BIN); //RTC 日期(自动更新_5S)
}
OS_CRITICAL_EXIT(); //退出临界区
OSTimeDlyHMSM(0,0,0, 100, OS_OPT_TIME_PERIODIC, &err); //周期 100ms
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
谢谢了, 这个问题已经解决, 直接弄寄存器就完事, 什么volatile的参数更新, 什么编译器优化...都不起作用; 我想可能是被OS或编译器给抺掉了这个操作; 不过你是维一能帮我解决问题的人, 所以最佳答案送给你
一周热门 更多>