又是被优先级问题折腾了三天
来源:互联网 发布:闪迪数据恢复软件mac 编辑:程序博客网 时间:2024/05/04 13:40
因为换用了一颗第三方前面板芯片,需要把第三方提供的驱动合到我们的系统里。上周整合好驱动,前面板的四个8段显示正常,按键有问题。
前面板排插5根pin分别是:data,clock,3.3V电压,接地,IR。
驱动是这样读取键值的(SomePanel_Read()):先写一个命令字,然后读一个byte,判断读回byte的第6位,如果是1,认为是有按键按下,送出键值;如果是0,认为不是有效键值,返回0。
task的while(1)循环里,调用SomePanel_Read()读取键值,如果是0,稍微sleep一会,再调用SomePanel_Read()读键值;如果不是0,处理处理,填好按键key结构,放到缓存队尾,再继续读。
很简单的流程,出问题了。
前面板排插和JTAG复用,无法单步调试,只能用串口打印调试。在while(1)里读回键值后如果不是0,打印输出该键值。
开电后,没有按键按下,却一直送出键值。
送出的键值第6位并不是1。是一个无效键值。
按下某个按键后,能读出一个有效键值,然后又不停地送出另一个无效键值。每一个按键按下后都会送出一个不一样的无效键值。这些无效键值被放到的缓存中,于是乱套。
咨询第三方工程师,先建议我们调整SomePanel_RdByte()中拉高拉底data pin和clock pin中间的delay。增加和减少延时都没有效果。
再咨询,又建议我们把3.3V电压改为5V。也是没有效果。
量波形也没有帮助,data pin上一直有波形,没错,循环里一直很在读。只不过第6位是0的无效键值应该不会被送出啊。但它们确实送出来了。我们都觉得很奇怪。
被这个问题困扰了两天,无解。
终于,今天,在又一次又一次阅读相关的驱动代码后,找到问题所在,修改SomePanel_Read()函数后,正常。
又是依赖运算符优先级出了错。
不知道为什么正式发布的驱动程序里居然会有这样的问题。
其他方案里用这颗芯片也会出问题,现象可能会是丢键值,按很多下按键都没有反应,不按了突然又噌噌噌连续响应。
写程序时还是不要太相信自己对优先级的记忆,靠括号很靠谱。
- 又是被优先级问题折腾了三天
- 又是三天,socket下载图片的问题总算搞定了
- 又被IIC驱动折腾了一回
- 又被IIC驱动折腾了一回
- 又开始折腾了
- 又开始折腾了iOS9.3 Jailbreak
- 那些折腾了自己很久,一下子却又能解决的问题
- 又是星期六了
- 又是一年了
- 又是一年了
- 又是期末了
- 又是一年了。
- 又是一年了
- 被折腾了半天的问题,顿悟了
- 折腾了半天,又回到 Ubuntu 的环境了
- 折腾了好久,原来是这样............Blast
- 被一个权限问题折腾了近1小时
- Win下不折腾 SBCL Slime了,转投CLISP-----实在是问题无法解决
- I want a girlfriend
- 常用正则表达式【原创】【不断更新中】
- ASP.NET中用户控件与HttpHandler,HttpModule
- 上研前操作系统学习总结
- 什么是幸福与快乐
- 又是被优先级问题折腾了三天
- 常见 RTOS
- 安全体系
- 从此刻苦专研
- 课程设计——迷宫问题
- TextView中的小方格
- Unicode转ASCII常用方法
- (转)scanf用法
- linux下网络流量监控工具二