发新帖我要提问
12
返回列表
打印
[STM8]

ST的官方外设驱动库有个严重的bug

[复制链接]
楼主: 奔牛滚滚
手机看帖
扫描二维码
随时随地手机跟帖
21
比如0x02是非零,非零在BitStatus就是SET,看这个函数的返回值是BitStatus,你就应该用RESET或SET,当然非得看具体是什么数也是可以的,你不就看到了吗。
对,就是这样,就是0和非0,非0并非就是1,那个布尔类型才那样,这里是可以判断具体位置的,所以是非0,没有错的。

使用特权

评论回复
22
Ryze| | 2016-1-6 21:40 | 只看该作者
if判断0或非0就行了

使用特权

评论回复
23
msblast| | 2016-1-6 21:49 | 只看该作者
本帖最后由 msblast 于 2016-1-6 21:51 编辑
lxyppc 发表于 2016-1-6 15:10
第2点不认同
因为你也没有提供证据

你说的有道理,我反思了一下午。

然后,晚上动手验证lz所说,属实,但是并非严重的bug。

采用7#的方法,就可以避开了。或者,由于固件库是开源的,发现bug,修复它,如下:
return ((BitStatus)(!!(GPIOx->IDR & (uint8_t)GPIO_Pin)));

非技术范畴,我也想说一下。lz咋呼过头了,我的反应也很激烈,致歉。

使用特权

评论回复
24
奔牛滚滚|  楼主 | 2016-1-6 21:58 | 只看该作者
msblast 发表于 2016-1-6 21:49
你说的有道理,我反思了一下午。

然后,晚上动手验证lz所说,属实,但是并非严重的bug。

不严重?
你搞一锤子买卖?产品出去不维护,不升级?员工不换人?
这类函数,数目很多,大量在用,不仅仅是一两个函数,这种bug,搞不好下次用官方库又会出问题.换人也会出问题....
.

使用特权

评论回复
25
msblast| | 2016-1-6 22:12 | 只看该作者
奔牛滚滚 发表于 2016-1-6 21:58
不严重?
你搞一锤子买卖?产品出去不维护,不升级?员工不换人?
这类函数,数目很多,大量在用,不仅仅是一两个 ...

21#的论述很到位了,根本就不是bug。只是不符合你的使用习惯而已,或者说你没有适应这样的写法。
在习惯的认知里,非零就是1,实际上编译器也是这么处理的,但是并不表示非零就必须是1。

BitStatus的两个值枚举值设计成0和非0,这没有异议吧?那么使用应该使用0和非0才更符合它的设计。

使用特权

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

本版积分规则