打印
[综合信息]

发现《hc32l13x_ddl_Rev1.9.2 Lite》驱动库RTC历程有一个BUG

[复制链接]
2911|37
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主


   RTC的历程虽然简单,但是也发现了一个小bug. 打算做一个万年历的,发现注释和写进去的数值不对。



因为时间读出来是bcd的,读出来需要转换,写了一个接口分享给大家:
/*把bcd码转换成十进制 exp: 0x56 -> 56*/
static uint8_t bcd_to_dec(uint8_t bcd_num)                       
{
        return ((((bcd_num & 0xf0)>>4)*10) + (bcd_num&0x0f));
}


/**
*************************************************************************
** \brief : 年月日周为10进制,不需要转换
**
**
** \param 1 : stcReadTime, 保存时间结构体
**
** \retval :  en_result_t                              
**************************************************************************/
en_result_t Rtc_ReadDateTime_dec(stc_rtc_time_t *pstcTimeDate)
{               
        Rtc_ReadDateTime(pstcTimeDate);       
        pstcTimeDate->u8Hour = bcd_to_dec(pstcTimeDate->u8Hour);
        pstcTimeDate->u8Minute = bcd_to_dec(pstcTimeDate->u8Minute);
        pstcTimeDate->u8Second = bcd_to_dec(pstcTimeDate->u8Second);
        return Ok;       
}


看了手册,说是可以自动计算每月的天数,闰年等。闰年这个接口怎么实现?这方面打算自己写几个接口。

使用特权

评论回复
评论
smartpower 2021-3-12 16:04 回复TA
1.手册有瑕疵 2.楼主很想搞大新闻 3.作为工程师,做点小实验即可知手册瑕疵 4.作为工程师,直接用库来工作不会出任何问题 5.作为一个想搞事的工程师,这样瑕疵用起来太爽了 
martinhu 2021-3-12 10:02 回复TA
是楼主没看懂手册和例子,用户手册说的很明确了,RTC用的是BCD码存储,比如0x19代表的就是19年,下一年就是0x20,代表20年,建议楼主再读读手册和例子。 
沙发
caizhiwei|  楼主 | 2021-3-11 17:43 | 只看该作者
更正后运行结果:
[17:42:02.844]收←◆Date = 2021-5-6
Time = 23:59:59

[17:42:03.188]收←◆Date = 2021-5-6
Time = 23:59:59

[17:42:03.533]收←◆Date = 2021-5-6
Time = 23:59:59

[17:42:03.878]收←◆Date = 2021-5-7
Time = 0:0:0

[17:42:04.216]收←◆Date = 2021-5-7

使用特权

评论回复
板凳
caizhiwei|  楼主 | 2021-3-11 17:59 | 只看该作者
突然发现楼主的截图中还有另外一个bug,大家要不要一起来找茬?哈哈

使用特权

评论回复
地板
luhailiang| | 2021-3-11 18:04 | 只看该作者
我记得这种注释与代码不一致的地方挺多的,特别是时钟的设置那里

使用特权

评论回复
5
luhailiang| | 2021-3-11 18:15 | 只看该作者
caizhiwei 发表于 2021-3-11 17:59
突然发现楼主的截图中还有另外一个bug,大家要不要一起来找茬?哈哈

RtcInitStruct.rtcAmpm = RtcPm;                       //12小时制
明明是24小时。。。

使用特权

评论回复
6
真爱吴迪迪| | 2021-3-11 18:36 | 只看该作者
为什么你这么厉害,可以发现这个bug,我却没有发现呢?

使用特权

评论回复
7
caizhiwei|  楼主 | 2021-3-11 19:32 | 只看该作者
luhailiang 发表于 2021-3-11 18:15
RtcInitStruct.rtcAmpm = RtcPm;                       //12小时制
明明是24小时。。。

亮哥,果然是牛啊

使用特权

评论回复
8
xyz549040622| | 2021-3-11 22:33 | 只看该作者
楼主看的很详细呀,支持一下。

使用特权

评论回复
9
caizhiwei|  楼主 | 2021-3-12 08:41 | 只看该作者
xyz549040622 发表于 2021-3-11 22:33
楼主看的很详细呀,支持一下。

官方的库,烂得一塌糊涂,和ST相比差了一大截

使用特权

评论回复
10
martinhu| | 2021-3-12 10:11 | 只看该作者
本帖最后由 martinhu 于 2021-3-12 10:24 编辑

是楼主没看懂手册和例子,
用户手册说的很明确了,RTC用的是BCD码存储,比如0x19代表的就是19年,下一年就是0x20,代表20年,

建议楼主再读读手册和例子!!!

读取的时候也要按照BCD的方式去理解。不要翻译成十进制……



使用特权

评论回复
11
caizhiwei|  楼主 | 2021-3-12 10:53 | 只看该作者
martinhu 发表于 2021-3-12 10:11
是楼主没看懂手册和例子,
用户手册说的很明确了,RTC用的是BCD码存储,比如0x19代表的就是19 ...

真是对你无语了,你是销售没有验证就没有发言权,时间至几个字写的清清楚楚,你没看到吗?
手册我反反复复看了很多遍的

使用特权

评论回复
评论
martinhu 2021-3-12 11:01 回复TA
首先,我不是销售,请先搞清楚 其次,手册肯定没我看的多 
12
caizhiwei|  楼主 | 2021-3-12 10:54 | 只看该作者
martinhu 发表于 2021-3-12 10:11
是楼主没看懂手册和例子,
用户手册说的很明确了,RTC用的是BCD码存储,比如0x19代表的就是19 ...

建议你先把进制搞清楚,时分秒是bcd,年月日不是bcd,请看手册哦

使用特权

评论回复
评论
caizhiwei 2021-3-12 11:03 回复TA
@martinhu :胡扯,你自己看手册去 
martinhu 2021-3-12 11:01 回复TA
不管是时分秒,还是年月日,都是BCD的 
13
martinhu| | 2021-3-12 11:09 | 只看该作者
caizhiwei 发表于 2021-3-12 10:54
建议你先把进制搞清楚,时分秒是bcd,年月日不是bcd,请看手册哦


请楼主认真读读这句,还说自己看过很多遍手册
请问谁在胡扯?????

使用特权

评论回复
14
caizhiwei|  楼主 | 2021-3-12 11:19 | 只看该作者

十进制:

请网友看我框出来的有啥不同吗?搞技术的都懂,只有楼上的代理销售不懂,可悲啊,还私下多次让我删帖!!
私下让我删帖的都是小人。

使用特权

评论回复
15
caizhiwei|  楼主 | 2021-3-12 11:22 | 只看该作者
华大能否做大做强,需要正视自己的错误;态度很重要;
话说,本帖子中,还有另一个bug,(12小时制);虽然是个小bug,但是你们华大承认不承认?是你们的态度问题。
已结贴

使用特权

评论回复
评论
martinhu 2021-3-12 13:06 回复TA
这个确实是一个注释问题。 但是上面讨论的,不能说自己看不懂的,或者有疑问的,都是bug,搞技术的一般都不会这样。 除非是想博眼球的。 
16
martinhu| | 2021-3-12 13:04 | 只看该作者
caizhiwei 发表于 2021-3-12 11:19
十进制:

请网友看我框出来的有啥不同吗?搞技术的都懂,只有楼上的代理销售不懂,可悲啊,还私下多次让 ...

这里的0:99,还是个位最多是9,十位最多是9,但是个位占bit0~3,十位占bit4~7,还是BCD码。
不信你用十进制往整个寄存器写个10看看,读出来是10年还是00年??
顺便说一下,我真不是销售,也不是代理,这论坛好多人都认识我。

使用特权

评论回复
17
caizhiwei|  楼主 | 2021-3-12 13:18 | 只看该作者
martinhu 发表于 2021-3-12 13:04
这里的0:99,还是个位最多是9,十位最多是9,但是个位占bit0~3,十位占bit4~7,还是BCD码。
不信你用十 ...

我也懒得和你争了,浪费时间,你也别私信我删帖了。
对与错,真与假,它总在那里。

使用特权

评论回复
评论
martinhu 2021-3-12 15:19 回复TA
@martinhu :2019-12-31 23点59分,然后运行等待一分钟,看看是你理解读出来对的,还是我的理解对的!!!!!!!!!!! 
martinhu 2021-3-12 15:17 回复TA
你设置一个2019年12月31日59分,然后等一分钟看看结果,就知道谁说的对了,实践出真理!!! 只是不想你在这里误导其他华大的用户!!!!!!!!! 
martinhu 2021-3-12 15:15 回复TA
我什么时候私信你删帖了????? 
18
caizhiwei|  楼主 | 2021-3-12 14:49 | 只看该作者
更新了,哈哈:
用了time.h中的结构体,很好用

使用特权

评论回复
19
caizhiwei|  楼主 | 2021-3-12 14:51 | 只看该作者
66的,接下来要去研究RTC补偿了

使用特权

评论回复
20
YF22| | 2021-3-12 15:07 | 只看该作者
楼主可以先提升一下自己的技术能力,看不懂得可以积极提问,而不是觉得自己看不懂的就是错误的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

100

主题

857

帖子

14

粉丝