3
我正在從TI編程一個電路板,我想以某種方式能夠將兩個不同的ISR郵件發送到任務的郵件隊列。這部分工作正常。但是,在接收端,是否有任何智能的方法讓任務掛起其隊列並根據ISR發佈的數據執行不同的操作?RTOS - 等待隊列中的不同數據
基本上,我有一個LCD更新任務,顯示來自我的電機的信息。但是,如果我有一個電機傳感器ISR和一個按鈕按下ISR發送不同的信息進行更新,這可以在一個隊列上完成嗎?
我正在從TI編程一個電路板,我想以某種方式能夠將兩個不同的ISR郵件發送到任務的郵件隊列。這部分工作正常。但是,在接收端,是否有任何智能的方法讓任務掛起其隊列並根據ISR發佈的數據執行不同的操作?RTOS - 等待隊列中的不同數據
基本上,我有一個LCD更新任務,顯示來自我的電機的信息。但是,如果我有一個電機傳感器ISR和一個按鈕按下ISR發送不同的信息進行更新,這可以在一個隊列上完成嗎?
當然。當每個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
太貴了,你可以只是一個位設置(爲0
或1
)來標識ISR。
有多明顯!我應該意識到這一點。我可以看到這是如何工作的;不過,我試圖遠離狀態機。我想在這種情況下,它運作良好。謝謝! – Ci3 2012-04-26 02:58:00
這只是你做了幾次後才明顯。 :-)雖然這不是一臺狀態機;你只是使用其中一個字節作爲標誌。有關狀態機的示例,請參閱http://stackoverflow.com/a/256011/29157。 – 2012-04-26 03:00:27
哦,好的,謝謝你讓我知道! – Ci3 2012-04-26 03:06:53