- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想用我的 RaspberryPi 3 驱动步进电机。我需要每秒生成大约 10000 个脉冲,这意味着我需要以大约 100us 的间隔生成脉冲。我知道 Raspberry 可以生成 PWM,但事实并非如此,因为我需要精确控制脉冲数以及加速/减速,所以我更喜欢显式循环。
虽然忙循环提供了相当精确的计时,但它显然会消耗 100% 的 CPU 时间。同时 nanosleep() 在时间精度和 CPU 负载之间提供了很好的平衡——我可以用大约 10% 的 CPU 负载来驱动电机。
但是。我写了一小段代码来测量 nanosleep() 延迟
unsigned long iterations = 5000;
for(int d=10; d<500; d+=5)
{
unsigned long accumDelayTime = 0;
unsigned long accumExpDelayTime = 0;
for(unsigned long i=0; i<iterations; i++)
{
accumExpDelayTime += d;
unsigned long start = micros();
struct timespec ts;
ts.tv_sec = 0;
ts.tv_nsec = 1000*d;
clock_nanosleep(CLOCK_REALTIME, 0, &ts, NULL);
unsigned long end = micros();
accumDelayTime += end - start;
}
printf("%d\t%d\t%d\n", accumExpDelayTime / iterations, accumDelayTime / iterations, (accumDelayTime - accumExpDelayTime) / iterations);
}
我完全理解通用 linux(尤其是 Raspbian)不是 RTOS,还有其他进程与我的程序共享相同的 CPU 资源 - 我对此非常满意。如果有其他 CPU 消耗进程,我的应用程序是否会变慢一点我没问题。
但结果非常令人惊讶。列为:请求延迟、实际延迟、请求延迟与实际延迟之间的差异
10 80 70
15 85 70
20 89 69
25 95 70
30 99 69
35 105 70
40 110 70
45 114 69
50 123 70
55 124 69
60 129 69
65 134 69
70 130 60 <---- here I run CPU-heavy process
75 135 60
80 140 60
85 145 60
90 150 60
95 158 62
100 161 61
105 166 61
110 172 62
115 177 62
120 181 61
125 186 61
130 191 61
135 205 70 <---- here it finished
140 210 70
145 215 70
150 220 70
155 225 70
160 230 70
165 235 70
我尝试了 nanosleep()、clock_nanosleep() 和 usleep() - 结果几乎相同。
我对这些结果几乎没有疑问:1) 为什么我的期望 sleep 时间与实际 sleep 时间不同?2) 这种差异非常稳定,不依赖于请求的延迟。有人对此有解释吗?3) 如果 CPU 负载增加,为什么这种差异会变小(我预计恰恰相反)?
最佳答案
您的进程正在从用户空间运行。为了既能 sleep 又能得到时间,你需要切换到内核空间。这会产生开销。此外,任何 sleep 功能都只能保证在 sleep 定时器到期后的某个时间唤醒。
最重要的是,为了尝试获得所需的精度,您可能需要将代码编写为设备驱动程序。这使您可以直接访问所需的高分辨率计时器。
关于c - 为什么 nanosleep() 会增加一个恒定的延迟,我该如何避免呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54620641/
要求: 我们在数据库中有值 Chennai Baroda Bangalore New Delhi São Paulo, Lisboa San Jose 等... 所以我想将这些字符串转换成一个唯一的短
我需要通过 TCP 加密和发送数据(每条消息从几百字节到几百兆字节)以 block 从 Java 到 C++ 程序,并且需要发送的大小提前发送数据,以便收件人知道何时停止读取当前消息并处理它,然后等待
我不太知道如何问这个问题,因此我将其作为示例: 想象在一个应用程序中您有一个Country对象。此对象有两个属性:Name和'Bordering Countries'集合。稍后可能会添加更多属性,但这
我们正在尝试使用 IoT 中心、流分析和表存储来处理仪表板上的事件驱动图标(开/关/事件)。我无法让实际过程在 6 秒内完成。流分析的水印恒定为 5 秒。该网站声称即时处理。 https://azur
我正在尝试获取一个 JTabbedPane,其中所有选项卡(实际选项卡,而不是组件)具有相同的宽度(最宽标签所需的最小宽度或恒定宽度)。 我试图覆盖 BasicTabbedPaneUI.getTabB
你好安卓开发者, 我正在使用 OpenGLES 1.0 在 Eclipse 中为 Android 开发一个简单的游戏。我正在使用 Samsung Galaxy S2 Android(2.3) 作为开发
我正在尝试使用 ColorMatrix 为整个图像设置一个恒定的色调值。我的目标是使整个图像看起来颜色相同,而不会失去任何区域的亮度。我找到了一种使用 ColorMatrix 来移动图像的色调值的方法
我最近将我的 Postgres 数据库从 Windows 迁移到 CentOS 6.7。在 Windows 上,数据库从不使用太多 CPU,但在 Linux 上,我看到它使用恒定的 ~30% CPU(
你好,我正在用 SDL2 开发一款很棒的游戏,我添加了一个 FPS 调节器以使其在每台机器上都能流畅运行,但后来我创建了一个示例程序来输出 fps(不是调节,只是输出以查看电流的功率机器运行 ) 我在
我在 IntelliJ IDEA 13.0 中开发了一个应用程序,但是当我在我的设备上运行该应用程序时,它会不断等待调试器(如果我在 Debug模式下运行,调试器连接时没问题)但是如果远离计算机,我无
我想在 stat_密度2 图中绘制多个组,其中 alpha 值与每组中的观察计数相关。然而,由 stat_密度2d 形成的水平似乎已标准化为每组中的观察数量。例如, temp <- rbind(mov
我是一名优秀的程序员,十分优秀!