簡體   English   中英

用於嵌入式系統的 C 事件驅動 (GUI) 編程

[英]Event driven (GUI) programming in C for embedded system

我正在嵌入式系統中制作事件驅動的 GUI。 我剛剛完成了小部件圖形和觸摸屏功能的實現。

我的問題是如何/提示如何在 C 和嵌入式系統中實現這一點。

這就是我在非常通用的“偽”代碼中的想法:

mainloop()
{
    <All initializations etc.>

    eventloop();
}

eventloop()
{
    eventhandler();
    sleep_low_power_uc_mode();
}

touchscreen_interrupt_service_routine()
{
    int * x, *y;
    eventtype event = TOUCHSCREEN_CLICK;
    get_XY_coordinate(x, y);
    post_event(*x, *y, event);
}

eventhandler()
{
    int * x, *y;
    eventtype * event;
    static int current_state;
    get_event(x, y, event);
    if(event != NO_EVENT)
    {
        handle_events(*x, *y, *event, current_state);
    }
}

handle_events(int x, int y, eventtype event, int * current_state)
{
    int buttonID, i=0;
    buttonID = check_if_button_pressed(x, y, current_state);
    while(buttons[i].enabled != FALSE)
    {
        if(buttonID == buttons[i].ID)
        {
            call_buttons_respective_handler();
        }
    }
}

在這里,我假設我有一個觸摸屏,它將通過硬件中斷喚醒我的微控制器控制設備。 eventloop() 是一個永無止境的事件循環,它將處理任何事件,然后進入睡眠狀態,直到下一個觸摸屏中斷。 觸摸屏中斷服務例程將從觸摸屏獲取 X 和 Y 坐標,並使用 post_event() 函數發布事件。 event_handler() 函數是 eventloop() 函數中的一個函數,它將獲取事件(如果有)並調用 handle_events() 函數。 handle_events() 函數檢查某個按鈕(例如)是否被按下了給定的事件、X 和 Y 坐標,如果按鈕被按下,則返回一個非零的 buttonID。 然后下一步是遍歷按鈕數組並檢查相同的 buttonID 並調用該按鈕處理程序。

我試圖描述的在事件驅動的編程方式中是否有意義? 任何想法都非常受歡迎(並且請耐心等待,因為我是新手)。

答案實際上取決於您正在開發的平台。 Microchip 控制器的嵌入式 RTOS 將有一組約束,而 ARM 解決方案的 RTOS 將完全不同。 您應該闡明您正在設計什么硬件,或者至少是什么微控制器。

您可以根據定時器在中斷上編程大部分事件,然后您可以在 2 或 5 毫秒后調用每個中斷,這意味着可以同時監視所有事件(偽 RTOS)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM