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

[复制链接]
3686|24
 楼主| 奔牛滚滚 发表于 2016-1-3 10:23 | 显示全部楼层 |阅读模式
本帖最后由 奔牛滚滚 于 2016-1-3 10:26 编辑
  1. BitStatus GPIO_ReadInputPin(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin)

  2. {

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

  4. }

  5. 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",你以为编官方库的人都是吃干饭的啊?
moyanming2013 发表于 2016-1-4 10:38 | 显示全部楼层
比如0x02是非零,非零在BitStatus就是SET,看这个函数的返回值是BitStatus,你就应该用RESET或SET,当然非得看具体是什么数也是可以的,你不就看到了吗。
但具体你有什么疑问?
xmshao 发表于 2016-1-4 10:48 | 显示全部楼层
能有所发现还是不错的。

严重BUG谈不上,你做'0'比较就没问题。
只要自己看懂了,可以自行调整的。
fly928sky 发表于 2016-1-4 11:02 | 显示全部楼层
那是你程序的问题了。。。非0与0的写法判断。。。。。
if(x)或if(!x)判断就行了,不要写成if(x == SET)。。。。
ywlzh 发表于 2016-1-4 11:15 | 显示全部楼层
这种情况下,你要是觉得是bug,那就是bug了。自己看的不爽那就跟他改了,呵呵。你说是不是?
lxyppc 发表于 2016-1-4 11:39 来自手机 | 显示全部楼层
这个函数的设计根本就是不合理的
bitstatus这个类型只有两种状态
而一个port上的pin有2^n个状态
除非只有一个pin,不然怎么搞都是错的
McuPlayer 发表于 2016-1-4 13:51 | 显示全部楼层
我觉得楼主这个问题提的对
你标识了类型是BitStatus ,是个只有0和1的枚举类型,就应该乖乖的用,否则返回个U8或者U16也说得过去
好比,我约定了个规则,我自己又不遵守,那一起干活的小伙伴确实就要恼火
金融小数 发表于 2016-1-4 14:15 | 显示全部楼层
有Bug正常啊,没什么大惊小怪的:lol
xmshao 发表于 2016-1-4 14:55 | 显示全部楼层
嗯 具体到这个地方是有点不严谨。的确有时会在这个地方耗费点时间。
顶上去,让更多人了解。
曾经就这个问题写个一篇微信小**分享出来了。
diweo 发表于 2016-1-4 22:07 | 显示全部楼层
lxyppc 发表于 2016-1-4 11:39
这个函数的设计根本就是不合理的
bitstatus这个类型只有两种状态
而一个port上的pin有2^n个状态

这个函数就是读取某1个pin的状态,不是整个port的状态
eldiy 发表于 2016-1-4 23:40 | 显示全部楼层
同意,看到是BitStatus类型的一般会跟SET和RESET做比较。
john_lee 发表于 2016-1-5 01:06 | 显示全部楼层
官方驱动库有一些低级bug已经不奇怪了,其实官方写库的工程师的软件水平真不能算高,一些基础知识并不扎实。
飞思捷芯 发表于 2016-1-5 17:11 | 显示全部楼层
renqinglei 发表于 2016-1-5 18:23 | 显示全部楼层
滴答滴答滴答滴答
630183258 发表于 2016-1-5 22:49 | 显示全部楼层
这个不应该是严重bug吧,lz严重了。
msblast 发表于 2016-1-6 10:21 | 显示全部楼层
1、从语法分析,函数的返回值是BitStatus,不存在lz说的“还返回了0x02,0x04,0x08,....等等”
2、lz没有提供测试数据和结果,只有猜想
3、基于1和2,lz不是别有用心就是很low
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

粉丝
快速回复 在线客服 返回列表 返回顶部