- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 linux kernel-2.6.35.3 并使用所有 3 个 uart 端口进行通信的 imx283 平台上工作。
我想从 UART-1 收集数据,但需要有一个准确的间隔。
数据是从传感器收集的。
我需要向传感器发送命令以获取数据。
间隔可以从 10 毫秒到 2 秒不等。
我需要内核模块的一些帮助,我可以使用内核定时器并从 uart 收集数据吗。
内核计时器的准确性很高,所以我是否可以使用它们。
谢谢,
最佳答案
使用 rs232 的标准驱动程序,从发出 write(2)
系统调用到内核驱动程序开始向串行线路输出字节(记住驱动程序是已经在内核模式下运行)。为此编写驱动程序或内核模块很容易出错,必须由您维护,并且您需要精通内核编程才能做好它并且不会在途中崩溃(您必须应对标准驱动程序尝试使用该端口,因为它是由驱动程序自动完成的,您的驱动程序必须保留该端口供自己使用,以免干扰它)。只有在您完全填满缓冲区的情况下,您的进程才必须等待缓冲区变空,但是根据定义,这不会发生,因为您无法补偿(您正在填充输出行比字符消失快,这将使您的进程在缓冲区已满时阻塞),并且在这种情况下完全成为实时计时器。在输入时,您有一个类似的过程。您将有一个输入字符触发一些中断将其从设备带到缓冲区,这通常(如果您在 termio 上将 VMIN
配置为 1)意味着您的进程将立即被唤醒,在每个字符读取(每个字符一进来)我建议你使用 VMIN
设置为 1 和 VTIME
设置为 0(阅读标准 termios(3 )
手册页以获取串行驱动程序的完整说明)以在收到每个字符后立即唤醒您的进程。您的进程将被唤醒和调度,具体取决于系统负载和 cpu 速度,但通常这意味着及时使用正常的最新 cpu。您可以在调用 read(2)
后立即为读取添加时间戳,或者尝试在单独的 ioctl(2)
调用中从内核获取读取时间戳检查何时收到字符(我知道这在 linux 中是可能的,至少对于套接字而言,不需要为此编写模块)(但不是从远程端传输时,想想这个)但我认为要获得毫秒时间,在用户模式下完成所有事情就足够了,而不会使进入内核模式的事情复杂化。 RS232 线路不是为实时设计的,因此您尝试的事情可以在毫秒分辨率下完成,而无需在内核端编程。
此外,在用户模式下完成所有操作允许您的程序从一个系统移动到另一个系统,而无需在尝试您的软件之前进行复杂的内核模块安装,甚至更多......了解如何使用 tty 驱动程序可以让您在非 Linux 系统(例如 BSD、Solaris 或 MAC)中运行您的代码
关于linux - 内核模块使用周期性内核定时器(jiffies 或 hrtimer)从 UART 收集数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45252389/
我正在尝试设置一个 hrtimer 以绝对间隔生成周期函数回调。 将计时器初始化为 hrtimer_init(&p->rt_track.rt_period_timer, CLOCK_MONOTONIC
我在表演 hrtimer_init(hr_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); 过了一会儿(30,也许 60 秒),我执行: hrtimer_start
timeval v = ktime_to_timeval(hrtimer_get_remaining(timer)); 我没有在计时器到期时得到一个负值(我预计 ~ 负 100 毫秒),我得到的是加
是否可以在 Linux 主机上以微秒精度执行任务?即,我想在特定的时间执行任务。我知道,Linux 不是实时系统,但我正在寻找 Linux 上的最佳解决方案。 到目前为止,我已经创建了一个内核模块,设
我正在开发一个新的 Linux 调度程序,我需要 hrtimers。我阅读了如何实现它们,在: http://lwn.net/Articles/167897/ 我做了一个小程序,在使用之前测试这些定时
我的目标是使用 hrtimer 结构在 Linux 内核中创建一个重复任务。我希望它每 500 毫秒重复一次。 但是,我对 hrtimer 在 Linux 内核中的工作方式有点困惑(请参阅 linux
在嵌入式 linux 内核模块中,我正在尝试实现每秒发生的测量操作,并且我正在使用 hrtimer 来提供计时。下面的函数是设置定时器时注册的回调。值得关注的是为 hrtimer 的下一个回调触发器添
在网上和 Stackoverflow 上搜索了大量时间后,我意识到在 Linux 内核中使用 hrtimer 的具体示例并不多。我发现的任何例子都是模糊的,没有解释他们程序的功能,也没有解释 hrti
我希望能够使用 linux 内核模块“捕获”一个 hrtimer 中断,并在稍后的时间重播该中断。关于如何着手做这件事有什么想法吗? 用例:调用 sleep(1) 的程序。我的模块将在 1 秒后触发时
我找到了这个关于 hrtimer 的教程: http://www.ibm.com/developerworks/linux/library/l-timers-list/ 我相信它使用的方式将在 har
在一个处理器上,在同一个线程中,首先调用 raw_spin_lock(),然后它启动一个 hrtimer 并再次返回到 raw_spin_lock(),它将在那里自旋。在hrtimer中断处理函数中,
回答:VM 时间同步是一门艺术,我会计算我的祝福并使用对我有用的东西。 这就是为什么:~qoute~我花了几年时间在主机和 guest VM 之间同步时间,有和没有 NTP 等等——这基本上是一种黑色
我正在使用 linux kernel-2.6.35.3 并使用所有 3 个 uart 端口进行通信的 imx283 平台上工作。 我想从 UART-1 收集数据,但需要有一个准确的间隔。 数据是从传感
“hrtimer - interrupt take x ns”是什么意思? 我在 Linux (RH) 上的 dmesg 中看到了这个 最佳答案 它只是表示 CPU 用了 x 纳秒来完成处理所有软过期
我是一名优秀的程序员,十分优秀!