Zstack之HAL层增加新的按键key的分析笔记3

之前分析了新增按键在使用中断检测方式时所需要进行的代码修改,这里再小小地做一点补充和改动即可。最主要的问题是TI官方开发板上的摇杆按键的读取容易导致BUG。

而程序代码根据变量Hal_KeyIntEnable来执行不同的具体代码。这样就导致了BUG了。

要做的修改其实也不多,主要在于对HalKeyPoll()这个函数的代码修改,具体如图1所示:


图1

在这其中,可以看出,我屏蔽掉了所有关于摇杆按键键值检测部分的代码,而不管是否使能硬件检测方式检测按键,调用HalKeyPoll()函数都会执行相同的代码了。这就是要修改的代码。

另外就是需要屏蔽一个全局变量:halKeySavedKeys,该变量用于存储之前一次检测到的摇杆键值。需要屏蔽的地方有以下几处:

1、Hal_key.c中该变量的定义:/*static uint8 halKeySavedKeys;     used to store previous key state in polling mode

2、Hal_key.c中的HalKeyInit()函数中关于该变量的初始化:halKeySavedKeys = 0;

3、HalKeyPoll()函数中屏蔽掉关于摇杆键值检测那部分即可。

然后根据分析笔记2最后所讲,在InitBoard()函数中通过对OnboardKeyIntEnable变量进行赋值即可实现使能硬件检测或者软件轮询方式检测按键了。如图2所示:


图2

这样Zstack就是通过软件定时查询的方式来检测按键信息了。

对于HAL层的修改,主要在于三个方面:1、宏定义,存在于hal_模块名称.h和Hal_board_cfg.h这两个头文件中;2、HAL层模块初始化部分代码需要根据初始化流程做相应的修改;3、HAL层模块的检测使用部分的代码也需要根据流程做相应的修改。如果熟悉了OSAL工作的模式,对于其流程也应该是很清晰很好修改的了。

对于按键的检测,两种方式在执行到Hal_ProcessEvent()之前的检测机制是不一样的,但都是使用osal_start_timerEx()函数设置一段时间后进入Hal_ProcessEvent()处理的。按键的中断检测方式是在中断中调用定时器函数,而软件轮询方式,则是不停调用定时器函数osal_start_timerEx()定时间隔扫描按键的。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值