首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Xenomai中读取GPIO时钟信号?

如何在Xenomai中读取GPIO时钟信号?
EN

Stack Overflow用户
提问于 2013-04-26 00:04:21
回答 1查看 525关注 0票数 1

我在ARM PC上安装了Xenomai (Xenomai2.5.6- Linux Kernel 2.6.35.9),我需要读取10 kHz的时钟信号。该信号被电连接到我的一个GPIO,它被映射到一个系统文件。如果我在用户空间创建一个任务并打开-读取-关闭文件,同时测量时间,我得到的平均延迟为650µs(即,这是一个完整的打开-读取-关闭周期的时间)。这产生了约1.5 kHz的采样率。

代码语言:javascript
复制
while(1) // Task's infinite loop
{
    t1 = rt_timer_read();
    if((fd = open("test_file",O_RDONLY)) > 0)
    {
        read(fd,&buff,1);
        close(fd);
    }else{
        errors++;
    }
    t2 = rt_timer_read();
    t += t2-t1;

    rt_task_wait_period(NULL);
}

输出:

代码语言:javascript
复制
[RT:]   Start reading files:   05:19:05.804.754
[RT:]   End reading files:     05:19:13.338.078
[RT:]   Average time (10000 open-read-close cycles): 00000671.901 (microseconds)
[RT:]   Errors found: 0
[RT:]   (sig_handler) Signal received! (signo = 2)

我在互联网上读到,强制我的任务在内核空间而不是用户空间运行将使它能够更快地执行,但我不确定这是否足够,也不确定我在这里尝试做的事情是否完全正确。

我来自电子工程背景,在那里我总是被告知不要异步处理同步信号(如时钟信号),以及读取文件(即我的同步信号)。信号)使用可能会根据CPU/系统负载引入抖动的周期性任务,看起来不是一种好方法。有没有更好的方法呢?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2013-12-20 15:16:12

以下是我对可能的解决方案的想法。你是对的,你不应该异步处理同步信号。因此,您应该避免在用户空间中打开fd来从GPIO读取信号电平。

相反,您应该在内核空间中处理它,因为它更合适。进入内核空间后,您可以将GPIO设置为在上升/下降沿触发的irq,并通过Xenomai实时处理它。延迟不会消失,但对于10 KHz的时钟速度应该是可以的。

不幸的是,您没有指定您正在对时钟信号做什么。我猜你是想充当某个设备的从属驱动器?

不管怎样,我希望我能帮上忙。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16219607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档