打印
[STM8]

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

[复制链接]
2974|24
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
奔牛滚滚|  楼主 | 2016-1-3 10:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 奔牛滚滚 于 2016-1-3 10:26 编辑
BitStatus GPIO_ReadInputPin(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin)

{

    return ((BitStatus)(GPIOx->IDR & (uint8_t)GPIO_Pin));

}

typedef enum {RESET = 0, SET = !RESET} FlagStatus, ITStatus, BitStatus

使用GPIO_ReadInputPin函数,理应返回0或者是1,但是实际用起来,还返回了0x02,0x04,0x08,....等等
一旦判断比较的是SET,结果一定是错的.
沙发
gmm2015| | 2016-1-3 15:39 | 只看该作者
这个没问题的

使用特权

评论回复
板凳
jar1866| | 2016-1-3 20:46 | 只看该作者
这个结果 跟!=0比较,无任何问题

使用特权

评论回复
地板
diweo| | 2016-1-4 08:10 | 只看该作者
官方库有BUG是完全有可能的。
不过,就这么一行语句,就有“严重BUG",你以为编官方库的人都是吃干饭的啊?

使用特权

评论回复
5
moyanming2013| | 2016-1-4 10:38 | 只看该作者
比如0x02是非零,非零在BitStatus就是SET,看这个函数的返回值是BitStatus,你就应该用RESET或SET,当然非得看具体是什么数也是可以的,你不就看到了吗。
但具体你有什么疑问?

使用特权

评论回复
6
xmshao| | 2016-1-4 10:48 | 只看该作者
能有所发现还是不错的。

严重BUG谈不上,你做'0'比较就没问题。
只要自己看懂了,可以自行调整的。

使用特权

评论回复
7
fly928sky| | 2016-1-4 11:02 | 只看该作者
那是你程序的问题了。。。非0与0的写法判断。。。。。
if(x)或if(!x)判断就行了,不要写成if(x == SET)。。。。

使用特权

评论回复
8
ywlzh| | 2016-1-4 11:15 | 只看该作者
这种情况下,你要是觉得是bug,那就是bug了。自己看的不爽那就跟他改了,呵呵。你说是不是?

使用特权

评论回复
9
lxyppc| | 2016-1-4 11:39 | 只看该作者
这个函数的设计根本就是不合理的
bitstatus这个类型只有两种状态
而一个port上的pin有2^n个状态
除非只有一个pin,不然怎么搞都是错的

使用特权

评论回复
10
McuPlayer| | 2016-1-4 13:51 | 只看该作者
我觉得楼主这个问题提的对
你标识了类型是BitStatus ,是个只有0和1的枚举类型,就应该乖乖的用,否则返回个U8或者U16也说得过去
好比,我约定了个规则,我自己又不遵守,那一起干活的小伙伴确实就要恼火

使用特权

评论回复
11
金融小数| | 2016-1-4 14:15 | 只看该作者
有Bug正常啊,没什么大惊小怪的:lol

使用特权

评论回复
12
xmshao| | 2016-1-4 14:55 | 只看该作者
嗯 具体到这个地方是有点不严谨。的确有时会在这个地方耗费点时间。
顶上去,让更多人了解。
曾经就这个问题写个一篇微信小**分享出来了。

使用特权

评论回复
13
diweo| | 2016-1-4 22:07 | 只看该作者
lxyppc 发表于 2016-1-4 11:39
这个函数的设计根本就是不合理的
bitstatus这个类型只有两种状态
而一个port上的pin有2^n个状态

这个函数就是读取某1个pin的状态,不是整个port的状态

使用特权

评论回复
14
eldiy| | 2016-1-4 23:40 | 只看该作者
同意,看到是BitStatus类型的一般会跟SET和RESET做比较。

使用特权

评论回复
15
john_lee| | 2016-1-5 01:06 | 只看该作者
官方驱动库有一些低级bug已经不奇怪了,其实官方写库的工程师的软件水平真不能算高,一些基础知识并不扎实。

使用特权

评论回复
16
飞思捷芯| | 2016-1-5 17:11 | 只看该作者
这么6

使用特权

评论回复
17
renqinglei| | 2016-1-5 18:23 | 只看该作者
滴答滴答滴答滴答

使用特权

评论回复
18
630183258| | 2016-1-5 22:49 | 只看该作者
这个不应该是严重bug吧,lz严重了。

使用特权

评论回复
19
msblast| | 2016-1-6 10:21 | 只看该作者
1、从语法分析,函数的返回值是BitStatus,不存在lz说的“还返回了0x02,0x04,0x08,....等等”
2、lz没有提供测试数据和结果,只有猜想
3、基于1和2,lz不是别有用心就是很low

使用特权

评论回复
20
lxyppc| | 2016-1-6 15:10 | 只看该作者
msblast 发表于 2016-1-6 10:21
1、从语法分析,函数的返回值是BitStatus,不存在lz说的“还返回了0x02,0x04,0x08,....等等”
2、lz没有提 ...

第2点不认同
因为你也没有提供证据

第1点其实你也是根据第2点猜测而来的
所以也不认同

最后第3点,超出技术讨论范畴,不做评价

使用特权

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

本版积分规则

384

主题

1461

帖子

6

粉丝