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

来源:互联网 发布:哪个理财软件最好 编辑:程序博客网 时间:2024/06/06 17:09

之前分析了新增按键在使用中断检测方式时所需要进行的代码修改,这里再小小地做一点补充和改动即可。最主要的问题是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 0
原创粉丝点击