Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 在用户空间中运行i2c例程还是在内核空间中运行同一个驱动程序?_Linux_Linux Kernel_Linux Device Driver_Embedded Linux_I2c - Fatal编程技术网

Linux 在用户空间中运行i2c例程还是在内核空间中运行同一个驱动程序?

Linux 在用户空间中运行i2c例程还是在内核空间中运行同一个驱动程序?,linux,linux-kernel,linux-device-driver,embedded-linux,i2c,Linux,Linux Kernel,Linux Device Driver,Embedded Linux,I2c,我正在开发一个运行嵌入式Linux的基于ARM的系统。我正在用我编写的用户空间程序以100Hz(每10ms读取12次)的频率通过i2c(使用SMBUS例程)从两个惯性传感器读取数据 我可以看到运行“top”并排除代码中的某些部分,我的计算负载的主要部分是由i2c函数造成的(大约90%的CPU总负载是由我的软件提供的30%) 如果我使用一些驱动程序(内核空间)来读取这些数据,你认为计算负载会保持不变,只是会以不同的名称考虑,还是会因为某种系统优化而实际减少?你确定你没有忙着等待,还是做了一些效率低

我正在开发一个运行嵌入式Linux的基于ARM的系统。我正在用我编写的用户空间程序以100Hz(每10ms读取12次)的频率通过i2c(使用SMBUS例程)从两个惯性传感器读取数据

我可以看到运行“top”并排除代码中的某些部分,我的计算负载的主要部分是由i2c函数造成的(大约90%的CPU总负载是由我的软件提供的30%)


如果我使用一些驱动程序(内核空间)来读取这些数据,你认为计算负载会保持不变,只是会以不同的名称考虑,还是会因为某种系统优化而实际减少?

你确定你没有忙着等待,还是做了一些效率低下的事情?我使用的是usleep()为了维持时间安排(我需要在100Hz下对采集的数据运行算法)。但是,如果我真的排除了计算部分(我原以为是最重的部分),我看不到任何CPU负载减少。相反,当我排除i2c例程并生成随机数来运行代码时,我看到了它。它解决了吗?如果是,请更新帖子。如果没有,您能否更新问题以提供用户空间应用程序正在使用的i2c功能的详细信息?我正在使用SMBUS功能通过i2c进行通信,正如我在问题中所述。您知道您正在使用的i2c总线控制器吗?如果您使用GPIO位切换控制器,访问需要大量CPU时间是正常的,因为如果我没记错的话,切换引脚之间的等待是繁忙的等待。