2012-04-26 72 views
3

我正在從TI編程一個電路板,我想以某種方式能夠將兩個不同的ISR郵件發送到任務的郵件隊列。這部分工作正常。但是,在接收端,是否有任何智能的方法讓任務掛起其隊列並根據ISR發佈的數據執行不同的操作?RTOS - 等待隊列中的不同數據

基本上,我有一個LCD更新任務,顯示來自我的電機的信息。但是,如果我有一個電機傳感器ISR和一個按鈕按下ISR發送不同的信息進行更新,這可以在一個隊列上完成嗎?

回答

3

當然。當每個ISR向隊列發送消息時,在消息中加入一些標識發送ISR的消息。然後,當接收器讀取隊列時,它可以根據標識符決定採取哪個動作。

ISR1() { 
    char msg[4]; 
    msg[0] = '1';     // Identify the queue 
    get_3_ISR1_data_bytes(msg+1); // Get the data 
    q_send(msg); 
} 

ISR2() { 
    char msg[4]; 
    msg[0] = '2';     // Identify the queue 
    get_3_ISR2_data_bytes(msg+1); // Get the data 
    q_send(msg); 
} 

handler() { 
    char *msg; 
    q_rcv(msg); 
    switch (msg[0]) { 
    case '1': 
    // Do ISR1 stuff 
    break; 
    case '2': 
    // Do ISR2 stuff 
    break; 
    default: 
    // Something unpleasant has happened 
    } 
} 

如果整個char太貴了,你可以只是一個位設置(爲01)來標識ISR。

+0

有多明顯!我應該意識到這一點。我可以看到這是如何工作的;不過,我試圖遠離狀態機。我想在這種情況下,它運作良好。謝謝! – Ci3 2012-04-26 02:58:00

+1

這只是你做了幾次後才明顯。 :-)雖然這不是一臺狀態機;你只是使用其中一個字節作爲標誌。有關狀態機的示例,請參閱http://stackoverflow.com/a/256011/29157。 – 2012-04-26 03:00:27

+0

哦,好的,謝謝你讓我知道! – Ci3 2012-04-26 03:06:53