linux uart中断程序,linux 串口中断实现
我在linux系统下写的串口程序,需要实时的读取串口来的数据,但串口来的数据又是不定时的,想用中断的方式响应,看了一些资料,总觉的还所有些不妥。
首先,select函数,他需要一直在while中检测读文件描述符是否有变化,但串口来了数据会改变文件描述符吗?(即使我的串口一直处在open状态中)另外,即使能检测到文件描述符有了变化,那程序也都一直在while中,CPU将不能再做其他的事情。
其次,signal函数,串口来了数据,系统会自动广播SIGIO信号吗?即使能捕捉的这个信号,程序进入中断服务子程序中执行,那下一个串口数据又如何响应,难道在中断子程序的结尾再调用 signal函数吗?那CPU又将陷入这个等待串口数据的程序中,而不能做其他的事情了,而且SIGIO信号怎么能保证就是串口来的呢?
最后,tasklet,这个中断机制如何实现,他应该是在串口硬中断服务程序中定义中断的下班部分的入口,但这个硬中断服务程序又在什么地方?需要修改内核吗?
上只是我个人的理解,如有不正确的,请过来人指教。我现在希望串口数据能像以前用单片机一样,真正实现中断响应,只有当串口来数据时,CPU或者内核才会去执行串口读相关动作,串口没有数据时,CPU或者内核是完全不会理会串口的,不知哪位高人可以指点一下,如何来实现?
|
兄弟,0 分贴没人关注的...
|
可以起一个线程,用select函数,其实这个函数很好用,你看看书,unix系统编程、unix网络编程上都有详细介绍。
|
首先,select函数,他需要一直在while中检测读文件描述符是否有变化,但串口来了数据会改变文件描述符吗?(即使我的串口一直处在open状态中)另外,即使能检测到文件描述符有了变化,那程序也都一直在while中,CPU将不能再做其他的事情。
select 的函数不需要每个cpu的时间片都去查询文件描述符是否发生过变化,
while(1)
{
sleep(200);
select();//这样就不会造成cpu的一直占用了。
}
|
http://www.faqs.org/docs/Linux-HOWTO/Serial-Programming-HOWTO.html
|
linux 下的标准串口,在核心的驱动程序中是通过中断方式处理的。
你如果做的是应用层的程序,那么可以采用 select 方式监测“读文件描述符”。
select 也并非你说的那样一直 while 等待方式,它是在中断中接收到对端发来
的数据后唤醒并通知应用程序:串口接收到数据 ...
如果你要像单片机方式,那么就需要实现一个自己的串口驱动运行在核心 ...
linux uart中断程序,linux 串口中断实现相关推荐
- 51单片机外部中断实验 设置中断优先级寄存器,当有外部中断0请求中断时,中断程序执行发光二极管程序,在此过程中,外部中断1也有中断请求,外部中断0的中断程序将被中断去执行外部中断1的中断程序(数码管
设置中断优先级寄存器,当有外部中断0请求中断时,中断程序执行发光二极管程序,在此过程中,外部中断1也有中断请求,外部中断0的中断程序将被中断去执行外部中断1的中断程序(数码管加1显示程序). #inc ...
- linux块设备驱动中断程序,linux设备驱动归纳总结(六):1.中断的实现
linux设备驱动归纳总结(六):1.中断的实现 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...
- linux连接到程序,Linux下C程序的链接过程
今天看到一个很有意思的小程序,它让我对Linux下C程序的编译链接有了一个全新的认识! 这个程序的就是写一个简单的输出"hello World!": 要求:1.不使用C运行库,写一 ...
- 蓝桥杯单片机比赛学习:7、中断系统之串口中断的基本原理
这一节我们讲一下蓝桥杯单片机比赛中断中的最后一个模块--串口.中断的其他模块在我的个人主页(4条消息) Do My Best的博客_CSDN博客-蓝桥杯单片机比赛学习领域博主有兴趣的可以去学习. 通信 ...
- 中断程序_ABB机器人中断程序详解(安川FANUC)
ABB机器人中断程序详解 1.新建一个中断程序 test001,类型中断 TRAP hanmianshadiaoliao StopMove; SetDO DO04, 0; !Stop; StartMo ...
- linux 查找某个程序,Linux查找特定程序whereis实例详解
Linux 查找特定程序 whereis whereis 命令主要用于查找程序文件,并提供这个文件的二进制可执行文件.源代码文件和使用手册存放位置. 1.查找命令程序 例如,查找 touch 命令 [ ...
- linux亮度调节程序,linux调节屏幕亮度
新建三个文本文件并给予执行权限: up.sh if [ ! -w /sys/class/backlight/intel_backlight/brightness ];then echo "p ...
- Linux uart寄存器读写,Linux下读写UART串口的代码
Linux下读写UART串口的代码,从IBM Developer network上拿来的东西,操作比較的复杂,就直接跳过了,好在代码能用,记录一下- 两个实用的函数- /** *@brief 设置串口 ...
- 嵌入式linux如何下载程序,Linux平台的下载程序-嵌入式系统-与非网
有许多网络文件下载工具可以在Windows平台下很好地工作,如NetAnts."网际快车".TelePro等,还有像WebZip那样功能强大的离线浏览器.这些工具使我们可以在Win ...
最新文章
- Juce源代码分析(一)Juce的优势
- 间接通过new 来申请一个二维的堆内存数组
- 【Python】监控视频中运动目标检测的代码实现及效果展示
- wxWidgets:wxDataViewEvent类用法
- Linux 调优方案, 修改最大连接数(ulimit命令)
- 你以为AlphaGo只是下围棋厉害?不,它还能用来优化金融交易策略参数
- 外联接、自联接与联合
- 静态工厂方法代替构造器实例_静态工厂方法与传统构造方法
- mysql [ERR] 1273 - Unknown collation: ‘utf8mb4_0900_ai_ci‘
- JavaScript冒泡排序算法(1)
- span 居中_H5元素的水平垂直居中布局总结
- odbc删除oracle驱动,恢复ODBC驱动程序(ODBC driver)
- [C#] 代码混淆和加壳
- 我的世界java雪村种子_我的世界:5个珍藏级开局种子,第4个大家都在找,最后1个最富有...
- 爬虫项目:大麦网分析
- 红蜻蜓抓图软件测试简历,红蜻蜓抓图精灵
- 2015阿里巴巴北京年会——马云“北伐”讲话
- MacBook+eGPU编译安装pytorch、tensorflow(OSX10.13.3,python3.6,cuda9.1,cudnn7)(未完成)
- 1278:【例9.22】复制书稿(book)
- ER_WRONG_VALUE_COUNT_ON_ROW: Column count doesn‘t match value count at row 1