OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4307|回复: 8

OS 获取时间,日期不更新

[复制链接]

2

主题

18

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2018-10-14
在线时间
5 小时
发表于 2018-10-14 15:38:32 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 萌萌的小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
        }
}


最佳答案

查看完整内容[请看2#楼]

我的是H7。还是不行的话只能帮顶了!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

286

帖子

0

精华

高级会员

Rank: 4

积分
950
金钱
950
注册时间
2018-4-21
在线时间
264 小时
发表于 2018-10-14 15:38:33 | 显示全部楼层
萌萌的小x盆友 发表于 2018-10-14 18:50
这样好像不太对吧, HTTP Server服务可是没关的哦, 也在获取时间, 而且更新还正常, 也是单独获取

我的是H7。还是不行的话只能帮顶了!
回复

使用道具 举报

2

主题

18

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2018-10-14
在线时间
5 小时
 楼主| 发表于 2018-10-14 15:40:13 | 显示全部楼层
本帖最后由 萌萌的小x盆友 于 2018-10-14 15:49 编辑

求原子大神, 求各路英雄好汉帮忙解决一下    @正点原子

回复

使用道具 举报

2

主题

18

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2018-10-14
在线时间
5 小时
 楼主| 发表于 2018-10-14 15:46:11 | 显示全部楼层
平台: UCOSIII+F767....
时间更新放在: SysTick_Handler() 正常, 放任务就无法连续更新;
回复

使用道具 举报

2

主题

18

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2018-10-14
在线时间
5 小时
 楼主| 发表于 2018-10-14 18:08:35 | 显示全部楼层
本帖最后由 萌萌的小x盆友 于 2018-10-14 18:29 编辑

自已顶, 就没个人出来说一下么, 难道就没谁跑过 RTC时钟么?????? 麻烦哪 位, 随便出来说一下看法, 比如说它可能是被编译器给优化掉了, 又怎么解决, 目前是没开编译器优化, 发个图上来, 大家看一看;
捕获.PNG
回复

使用道具 举报

0

主题

286

帖子

0

精华

高级会员

Rank: 4

积分
950
金钱
950
注册时间
2018-4-21
在线时间
264 小时
发表于 2018-10-14 18:35:34 来自手机 | 显示全部楼层
HAL库好像要时间和日期一起获取,放上下行试试。以前我遇到过时间不更新的,就是因为没获取日期(只用到时间,日期没用到)
回复

使用道具 举报

2

主题

18

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2018-10-14
在线时间
5 小时
 楼主| 发表于 2018-10-14 18:50:26 | 显示全部楼层
LRW 发表于 2018-10-14 18:35
HAL库好像要时间和日期一起获取,放上下行试试。以前我遇到过时间不更新的,就是因为没获取日期(只用到时 ...

这样好像不太对吧, HTTP Server服务可是没关的哦, 也在获取时间, 而且更新还正常, 也是单独获取
回复

使用道具 举报

2

主题

18

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2018-10-14
在线时间
5 小时
 楼主| 发表于 2018-10-14 18:57:10 | 显示全部楼层
再说明一点, 进出临界区位置, 曾经使用过 锁定调度器, 开关中断来带替, 但都未能解决问题
回复

使用道具 举报

2

主题

18

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2018-10-14
在线时间
5 小时
 楼主| 发表于 2018-10-16 10:50:28 | 显示全部楼层
LRW 发表于 2018-10-15 23:10
我的是H7。还是不行的话只能帮顶了!

谢谢了, 这个问题已经解决, 直接弄寄存器就完事, 什么volatile的参数更新, 什么编译器优化...都不起作用; 我想可能是被OS或编译器给抺掉了这个操作; 不过你是维一能帮我解决问题的人, 所以最佳答案送给你
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 23:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表