打印

stm32l1xx库明显bug

[复制链接]
3637|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 knight_21ic 于 2012-2-9 14:10 编辑

/*******************************************************
  * @file    stm32l1xx_rtc.h
  * @author  MCD Application Team
  * @version V1.0.0
  * @date    31-December-2010
  * @brief   This file contains all the functions prototypes for the RTC firmware
  *          library.
  *****************************************************

......

#define RTC_Month_January              ((uint32_t)0x00000001)
#define RTC_Month_February             ((uint32_t)0x00000002)
#define RTC_Month_March                ((uint32_t)0x00000003)
#define RTC_Month_April                ((uint32_t)0x00000004)
#define RTC_Month_May                  ((uint32_t)0x00000005)
#define RTC_Month_June                 ((uint32_t)0x00000006)
#define RTC_Month_July                 ((uint32_t)0x00000007)
#define RTC_Month_August               ((uint32_t)0x00000008)
#define RTC_Month_September            ((uint32_t)0x00000009)
#define RTC_Month_October              ((uint32_t)0x000000010)/*<------此处应该是 0x00000000A*/

#define RTC_Month_November             ((uint32_t)0x000000011)/*<------此处应该是 0x00000000B*/

#define RTC_Month_December             ((uint32_t)0x000000012) /*<------此处应该是 0x00000000C*/
#define IS_RTC_MONTH(MONTH)            (((MONTH) >= 1) && ((MONTH) <= 12))/*<------要么就是此处验证MONTH范围有错误 */

#define IS_RTC_DATE(DATE)              (((DATE) >= 1) && ((DATE) <= 31))
沙发
香水城| | 2012-2-9 14:21 | 只看该作者
没看出来怎么“明显”呀?  宏定义要看怎么用它,只看一个定义怎么看出来有问题呢?

请LZ指教一二。

使用特权

评论回复
板凳
knight_21ic|  楼主 | 2012-2-9 14:40 | 只看该作者
#define RTC_Month_October              ((uint32_t)0x000000010)/*<------此处应该是 0x00000000A*/

#define RTC_Month_November             ((uint32_t)0x000000011)/*<------此处应该是 0x00000000B*/

#define RTC_Month_December             ((uint32_t)0x000000012) /*<------此处应该是 0x00000000C*/
#define IS_RTC_MONTH(MONTH)            (((MONTH) >= 1) && ((MONTH) <= 12))/*<------要么就是此处验证MONTH范围有错误 */

这个还不明显?

试验一下就可以了 分别设置
RTC_DateStructure->RTC_Month = 0x000000012;

RTC_DateStructure->RTC_Month = 0x00000000C;
看看结果就知道了

再说了 (((MONTH) >= 1) && ((MONTH) <= 12)) 这个范围明显不包括 0x10 0x11 0x12 还不明显?


我是写程序的时候 设置RTC时间遇到奇怪的问题 追踪到此 才看到的,

香水城 你试试就知道 了

使用特权

评论回复
地板
香水城| | 2012-2-9 15:15 | 只看该作者
你能确定这个宏定义应该这么用吗?你怎么知道你的用法是正确的?

我没有看过这个库里是怎么用的,所以我不知道它是否正确。请你最好也先看看库里是怎么用的,然后再下结论。

使用特权

评论回复
5
knight_21ic|  楼主 | 2012-2-9 15:27 | 只看该作者
先不说 RTC_Month_December =  0x12 还是 12
这句话“ (((MONTH) >= 1) && ((MONTH) <= 12)) 这个范围明显不包括 0x10 0x11 0x12 还不明显?”
不知道 香水城 你能不能看懂

再说了 我试验过 当调用 RTC_SetDate 库函数 设置 RTC_Month = 0x12 时没有反应就是因为 IS_RTC_MONTH(MONTH) 通不过

当设置  RTC_Month = 12 时 就OK 了

我没有贬低STM32,我一直在用STM32的  
香水城 你不必紧张

我只是遇到bug 通报一下,想找出到底是库编写者笔误,还是定有玄妙! 望得到确认

使用特权

评论回复
6
香水城| | 2012-2-9 15:34 | 只看该作者
我才不会因为你通报一个Bug而紧张,我只是认为你的结论不严谨,认为你把别人都当成傻瓜的这种态度要不得,:L

我请你好好看看库里面是怎么用的这些宏定义,不知道你看了没有。

如果没有看过,你可以看看下面这个截图中,我标出来的部分,如果想看完整,就把原文件打开看看:

STM32L_RTC_SetDate().gif (17.33 KB )

STM32L_RTC_SetDate().gif

使用特权

评论回复
7
香水城| | 2012-2-9 15:41 | 只看该作者
这是BCD表示法   #define RTC_Month_October              ((uint32_t)0x000000010)

这是BIN表示法    #define IS_RTC_MONTH(MONTH)            (((MONTH) >= 1) && ((MONTH) <= 12))

你怎么能够不做变换,就生往里套呢?

使用特权

评论回复
8
cool_coder| | 2012-2-9 15:56 | 只看该作者
香版主果然厉害,什么问题都难不倒。

使用特权

评论回复
9
knight_21ic|  楼主 | 2012-2-9 16:08 | 只看该作者
本帖最后由 knight_21ic 于 2012-2-9 16:09 编辑

7# 香水城

唉 不是我硬套 只能说定义的太那个了

谁使用库前还要仔细看函数里面的,这句程序呢
  if ((RTC_Format == RTC_Format_BIN) && ((RTC_DateStruct->RTC_Month & 0x10) == 0x10))
  {
    RTC_DateStruct->RTC_Month = (RTC_DateStruct->RTC_Month & (uint32_t)~(0x10)) + 0x0A;
  }  

一般都是根据定义的来的 是谁看到 IS_RTC_MONTH(MONTH)  就会知道是检查month的合法性

要不就不要偷懒 加一个 BIN 和 BCD 关键字 比如:
IS_RTC_BIN_MONTH(MONTH) 或 IS_RTC_BCD_MONTH(MONTH)

#define RTC_Month_BIN_December  0x0C
#define RTC_Month_BCD_December  0x12

使用特权

评论回复
10
X-Hawk| | 2012-2-9 21:59 | 只看该作者
BCD写法,咱新唐的Cortex M0也是这么做的。
虽然如此,俺对RTC这个 “潜规则” 也表示不解。某远古时代之印迹?

使用特权

评论回复
11
kevin_ares| | 2012-2-11 23:35 | 只看该作者
第一个人发现写错了,改了头文件又要重新编译很多文件

所以在用的时候就改了一下

后面的人都是抄的,就成潜规则了

使用特权

评论回复
12
yinyangdianzi| | 2012-2-15 15:36 | 只看该作者
第一个人发现写错了,改了头文件又要重新编译很多文件

所以在用的时候就改了一下

后面的人都是抄的,就成潜规则了
kevin_ares 发表于 2012-2-11 23:35

有多少工程师是自己手把手写完的。

使用特权

评论回复
13
qjw1| | 2013-4-27 11:25 | 只看该作者
求STM32l152 RTC实例

使用特权

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

本版积分规则

个人签名:[color=red][url]http://www.cnblogs.com/ele-eye/[/url] [/color]

12

主题

146

帖子

4

粉丝