当前位置: 技术问答>linux和unix
linux中的时序问题(一直被困扰)
来源: 互联网 发布时间:2016-08-10
本文导语: 我们都知道linux中每个进程都是运行到一段时间就被中断了。如果我要驱动一个外围设备,而这个设备要求的时序比较苛刻,如果程序刚运行到关键时序的时刻被内核调度而中断执行了(就算被中断了10ms),那么整个...
我们都知道linux中每个进程都是运行到一段时间就被中断了。如果我要驱动一个外围设备,而这个设备要求的时序比较苛刻,如果程序刚运行到关键时序的时刻被内核调度而中断执行了(就算被中断了10ms),那么整个时序不就出错了吗。这个问题怎么解决呢?
|
我想明白了
关中断不是长久的选择,如果你的硬件要求长期提供1us这样的方波,总不能一直关中断啊
虽然实际硬件经常有这样的需求,但是我们不会遇到这样的难题
因为这在硬件上提供有各种控制器,如UART控制器、USB主机控制器、SDRAM控制器等
所以这类要求长期提供严格时序的器件,都是需要有硬件控制器来配合的
只要初始化填充几个寄存器就可以不管了
只有单片机这种低级cpu,才需要自己控制IO口来模拟这些控制器,靠编程保证时序
这样一个单片机就只能做很少的事情了
偶尔需要的短延时可以关中断,有可能把时钟中断屏蔽掉,导致jiffes丢失,所以关中断时间尽可能短
关中断不是长久的选择,如果你的硬件要求长期提供1us这样的方波,总不能一直关中断啊
虽然实际硬件经常有这样的需求,但是我们不会遇到这样的难题
因为这在硬件上提供有各种控制器,如UART控制器、USB主机控制器、SDRAM控制器等
所以这类要求长期提供严格时序的器件,都是需要有硬件控制器来配合的
只要初始化填充几个寄存器就可以不管了
只有单片机这种低级cpu,才需要自己控制IO口来模拟这些控制器,靠编程保证时序
这样一个单片机就只能做很少的事情了
偶尔需要的短延时可以关中断,有可能把时钟中断屏蔽掉,导致jiffes丢失,所以关中断时间尽可能短
|
这个问题我也不很清楚
不过你所说的10ms的延时也挺长了
如果是us、ns级别的严格时序要求,我想还是得靠外部的硬件来实现,而不是靠cpu
例如利用PIT、RTC来做这种事情,毕竟Linux不是实时系统
不过你所说的10ms的延时也挺长了
如果是us、ns级别的严格时序要求,我想还是得靠外部的硬件来实现,而不是靠cpu
例如利用PIT、RTC来做这种事情,毕竟Linux不是实时系统
|
处理这种问题估计只有关中断了。
spin_lock_irqsave就是这样处理的。因为一般情况下,自旋锁不允许被抢占。
你可以借签他的操作方法。处理过程不要占太多的时间
spin_lock_irqsave就是这样处理的。因为一般情况下,自旋锁不允许被抢占。
你可以借签他的操作方法。处理过程不要占太多的时间
|
1 你的外设驱动及控制都放在kernel里
2 用户区程序设置成实时模式
2 用户区程序设置成实时模式