需求:
需要對上下方向鍵添加按鍵彈起的消息。
在遙控器上下方向按鍵彈起時,發送一個按鍵彈起的消息。實際開發的應用是要求換臺時,一直按着遙控器鍵,只換信息條跳動,不切臺,放開按鍵即按鍵彈起後,切換到當前停止的臺上;
思路:在遙控器的中斷響應裏面進行全局變量的賦值爲1,然後在自己寫的keyup_respond函數裏面進行輪詢檢測這個全局變量的值是否發生變化,最後創建線程調用自己寫的的接口函數keyup_rspond。
void RemoteISR (STPIO_Handle_t Handle, STPIO_BitMask_t ActiveBits)
{
對於上向方向的重複按鍵和單次按鍵分別m_i置1,並且設置標誌變量,如果重複按下時單次不置1.
}
/*****************************************************************************
Function Name : 按鍵彈起消息
*****************************************************************************/
static int state_change_sign = 0;
static int state_count = 0;
void keyup_rspond(void* pvParam)
{
while(1)
{
if(m_i == 1)//
{
state_change_sign = 1;
m_i = 0;
state_count = 0;
}
else if((m_i==0) && (state_change_sign == 1))
{
state_count++;
if(state_count == 8)
{
state_change_sign = 0;
state_count = 0;
m_i = 0;
printf("******send RKEY_UP_STATUS message\n\n");
STTBX_Print(("******send RKEY_UP_STATUS message\n\n"));
Panel_DeliverAppMsg(RKEY_UP_STATUS);
}
}
task_delay (6250*20); // 20ms
}
}
/*****************************************************************************
Function Name : 在遙控器初始化裏面創建線程調用按鍵彈起消息函數
*****************************************************************************/
BOOL_YS DRV_PanleInit ( void )
{
task_t *KeyTask;
KeyTask = task_create ( keyup_rspond,
0L,
4096, /* stack */
9,/*9,*/ /* priority */
"bordTask",
0 );
}
出現的問題:
1、創建任務的時候不能保證上層的任務和我們創建的任務都成功,可能是內存引起的問題,通過在sections.c裏面將開頭的註釋去掉,達到了創建線程的效果。
2、在按鍵彈起的時候只有上向方向鍵響應,
開始的時候通過在中斷鎖之前加上按鍵判斷標誌失敗,總是在按完上下鍵的緊接着的那個鍵還是有按鍵擡起響應,造成這個原因可能是上次響應的鍵值傳到了這個的鍵值裏面使得改變了我們定義的全局變量,
於是通過在重複按鍵和單次按鍵的選擇裏面進行全局變量的賦值,同時還要防止重複鍵在開始按下和擡起響應兩次,我們設置了標誌位,如果響應重複按鍵就不響應一般按鍵。最終問題得到了解決。