作者changyc (小马)
看板LinuxDev
标题Re: [问题] RS232与interrupt
时间Sun Dec 16 21:00:48 2007
※ 引述《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