小编use*_*576的帖子

如何提高 Linux 中 1ms 定时器的实时性能?

我正在开发一个嵌入式 Linux 项目,使用的 arago 发行版可能是 3.3 版左右。

我配置了一个高分辨率的 Linux 计时器,每毫秒唤醒一次我的进程。这工作正常,但时间有两个问题:

  1. 唤醒时间的抖动
  2. 尽管进程完成的处理是恒定的,但清醒时处理时间的可变性。

我将这些问题归咎于 Linux 的实时性能不足。但我需要研究提高实时性能的方法。

我检查了内核是否配置了 CONFIG_PREEMPT 内核选项,这对实时有好处。

我还将 SCHED_FIFO 调度类应用于我的进程:

struct sched_param schedparm;
memset(&schedparm, 0, sizeof(schedparm));
schedparm.sched_priority = 1; // lowest rt priority
sched_setscheduler(0, SCHED_FIFO, &schedparm);
Run Code Online (Sandbox Code Playgroud)

但这没有区别。

我想一个合乎逻辑的步骤是将 PREEMPT_RT 补丁应用于内核构建,但我还没有确定如何做到这一点。

我还能做些什么来改善抖动/持续时间可变性?

或者任何人都可以建议有关如何应用 PREEMPT_RT 补丁的可访问教程?

linux embedded real-time timer preempt-rt

5
推荐指数
1
解决办法
1871
查看次数

如何修复istringstream编译器错误?

我有一些现有的代码可以在Visual Studio 2010中编译好但是在Visual Studio 2013中出错.代码只是从istringstream中提取一个字符串并检查转换是否成功:

bool okFlag = false;
istringstream s;
string myStr;

<snip>

okFlag = s >> myStr;
Run Code Online (Sandbox Code Playgroud)

错误是:

error C2440: '=' : cannot convert from 'std::basic_istream<char,std::char_traits<char>>' to 'bool'

我想在C++ 11中,转换的返回类型不是bool.这样做的正确方法是什么?是否可以拥有满足VS2010和VS2013的代码?

c++ visual-studio-2010 c++11 visual-studio-2013

1
推荐指数
1
解决办法
980
查看次数