Re: [問題] RS232與interrupt
※ 引述《ji3g45j (pig)》之銘言:
: ※ 引述《brianpapa (^__^)》之銘言:
: : 小弟現在需要寫一支rs232的程式,但收送端之間希望能用中段的分是來溝通
: : 也就是說,送的時候能利用interrupt告知收端,收端也不是一直在while裡面等
: : 恩....不知道小弟的這種想法能夠實現嘛
: : 很抱歉,一來這裡就問了這麼奇怪的問題,希望有強者能教教我m(_ _)m
: : 還有阿,我看了很多書都好像是在講linux管理架構
: : 請問有,講在linux上寫程式方面的書,不知道能否給點參考
: : 讓小弟功力能增強一點,再次感激幫忙。
: 這個東西要利用到ring buffer,他是個頭尾相連的buffer
: 接收與傳送都各有一個,接收就是有中斷發生的時候就把資料丟到buffer裡
: 這樣就不用while去等,傳送的時候就是利用中斷把輸出的ring buffer
: 裡的資料一個個丟出去,這樣也不用在那邊等慢慢的rs232。
: 一般人與一般書在寫8051範例都是用迴圈,這是非常沒有效率的作法
ref: http://tldp.org/HOWTO/Serial-Programming-HOWTO/x115.html
請問sinal_handler_IO()是否就是掛在rs232 ISR的call-back function?
我有不少embedded system programming經驗, 最近因為需求所以要接觸
linux programming, 發現linux與RTOS的許多介面頗有差異.
我是希望能夠在ISR中去做簡單的字串parsing, 當parse出完整的data後
(此data並非string, 而是自訂的protocol format), 就丟出一個event,
讓我的process來處理接下來的事情. 參考了前面的link, 想請教是否用
signal_handler_IO()搭配system V的message queue可以達成下面這種
process格式(也是常見的RTOS會出現的task format):
process my_process()
{
process_init(); /* hook signal_handler_IO() to rs232's ISR */
while(msg = receive_from_msg_Q())
{
switch(msg.type)
{
case MSG_1: .....
break;
case MSG_2: .....
break;
}
}
process_uninit();
}
signal_handler_IO()
{
data_found = parse_rs232_input_to_buffer();
if(date_found)
{
send_msg_to_my_process();
}
}
請問以上方式是否就可以達到event-driven? 也就是平常我的process
都不佔用CPU time, 直到signal_handler_IO()丟出msg到我的msg_Q之後,
我的process才被scheduler叫起來做事情?
謝謝指教!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.195.44.54
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):
LinuxDev 近期熱門文章
PTT數位生活區 即時熱門文章
24
70