我目前正在攻读嵌入式实时工程专业.但是找到好的培训材料有点困难.特别是因为您无法像桌面应用程序开发那样体验嵌入式开发.
是否有任何可用于基础培训的书籍或工具包?对RTOS进行研究的任何建议?
使用RTOS时有什么建议吗?
我正在为数字媒体编程构建一种编程语言,它应该支持使用无共享消息传递和软实时的并发(即尽量计算音频/视频而不丢失样本或帧并且具有恒定的吞吐量) .
事实证明,这两个特征难以组合,主要是因为一个特定的约束:实时代码不应动态分配内存.
我的语言应该可以很容易地实现这样的事情:
我希望用户设置的新值通过队列发送到合成器引擎.如果我只想发送浮点数和其他原子值,那么问题就不会很有趣了.实际上,我希望任何类型的数据都能够从一个线程流向另一个线程,甚至是复杂的对象或数据结构,这对于线程和优先级的任何配置都应该是可能的.如果没有实时动态内存分配,这就变得非常困难,而不会对程序员施加任何似乎任意的限制.
Erlang经常被宣传为适合实时系统.我的理解是,Erlang从不会禁止内存分配.如果我做了同样的事情,那将会导致许多问题消失,代价是在执行这些分配的代码中引入非确定性时序.
那么是什么让Erlang如此合适呢?它是否实现了特殊的技巧来规避内存分配引起的问题,还是完全忽略了这个问题?它需要另一种实时方法吗?
让我们假设我们在Erlang中编写一个合成器,它必须每50毫秒产生64个样本,否则声音中会出现裂缝和爆裂声.让我们假设当我在字符串上移动一些滑块时,一个小对象(假设它是一个列表或包含参数名称和新值的元组)必须从GUI进程发送到音频进程,其中a副本已创建.这将需要动态内存分配.Erlang如何帮助我确保此分配不会延迟我的音频计算?
我想实时地对音频信号进行FFT,这意味着当人在麦克风讲话时.我将获取数据(我使用portaudio执行此操作,如果使用wavein会更容易,我会乐意使用它 - 如果您可以告诉我如何).接下来我正在使用FFTW库 - 我知道如何执行1D,2D(实数和复数)FFT,但我不太清楚如何做到这一点,因为我必须进行3D FFT以获得频率,幅度(这将决定颜色渐变)和时间.或者它只是一个2D FFT,我得到幅度和频率?
我开始学习一些关于大数据的东西,主要关注预测分析,为此我想要实现一个案例研究:
我有一个服务器健康信息的数据集,每5秒轮询一次.我想显示检索到的数据,但更重要的是:我想运行先前构建的机器学习模型并显示结果(关于服务器崩溃的警报).
机器学习模型将由机器学习专家构建,因此完全超出范围.我的工作是将机器学习模型集成到运行模型的平台中,并在一个漂亮的仪表板中显示结果.
我的问题是这个系统的"全局"架构:我看到所有的部分已经存在(cloudera + mahout)但是我缺少一个简单的集成解决方案来满足我的所有需求而且我不相信艺术状态是做一些自定义软件......
那么,任何人都可以对这样的生产系统有所了解(用预测分析显示数据)吗?这个参考架构?教程/文档?
笔记:
我调查了一些相关的技术:cloudera/hadoop,pentaho,mahout和weka.我知道Pentaho能够存储大数据并对该数据进行特殊的Weka分析.使用cloudera和Impala,数据专家也可以运行即席查询并分析数据,但这不是我的目标.我希望我的系统运行ML模型,并在检索到的数据旁边的漂亮仪表板中显示结果.我正在寻找一个已经允许这种用法而不是自定义构建的平台.
我专注于Pentaho,因为它似乎有一个很好的机器学习集成,但我读到的每个教程更多的是关于"ad-hoc"ML分析而不是实时.任何关于该主题的教程都将受到欢迎.
我不介意开源或商业解决方案(试用)
根据具体情况,这可能不是大数据:更多的"传统"解决方案也受到欢迎.
这里的实时也是一个广义的术语:如果ML模型具有良好的性能,每5秒运行一次就足够了.
ML模型是静态的(不是实时更新或改变其行为)
我不是在为我的例子寻找一个定制的应用程序,因为我的重点是全局:具有预测分析通用平台的大数据.
我有一个连接到mysql数据库的node.js服务器,并使用socket.io打开一个新的套接字.此服务器的作用基本上是在数据库表中有该用户的新消息时通知连接到它的任何客户端(用户).以下代码仅在客户端明确发出'check_messages'请求时才有效.如何更改它以便客户端是在该用户的mysql表中插入新消息而不是客户端必须显式发出'check_messages'请求时通知的客户端?
var app = require('http').createServer().listen(8124);
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'localhost',
user : 'some username',
password : 'some password',
database : 'some database'
});
connection.connect();
console.log('Server running at http://127.0.0.1:8124/');
var io = require('socket.io').listen(app);
var prev_id = 0;
io.sockets.on('connection', function (socket) {
socket.emit('greeting', 'Hello');
socket.on('check_messages',function(data){
var uid = data['uid'];
var q = "SELECT * FROM messages WHERE user_id=" + uid + " ORDER BY id DESC LIMIT 1";
connection.query(q, function(err, rows, fields) {
if (err) throw …Run Code Online (Sandbox Code Playgroud) 这个问题专门针对嵌入式硬实时系统上的C++架构.这意味着数据结构的大部分以及确切的程序流都是在编译时给出的,性能很重要,并且可以内联大量代码.解决方案最好只使用C++ 03,但也欢迎使用C++ 11输入.
我正在寻找建筑问题的既定设计模式和解决方案,其中相同的代码库应该被重复用于几个密切相关的产品,而某些部分(例如硬件抽象)必然是不同的.
我可能会最终得到一个封装在类中的模块的层次结构,这些模块可能看起来像这样,假设有4层:
Product A Product B
Toplevel_A Toplevel_B (different for A and B, but with common parts)
Middle_generic Middle_generic (same for A and B)
Sub_generic Sub_generic (same for A and B)
Hardware_A Hardware_B (different for A and B)
Run Code Online (Sandbox Code Playgroud)
这里,一些类继承自公共基类(例如,Toplevel_A来自Toplevel_base),而其他类则根本不需要专门化(例如Middle_generic).
目前我可以想到以下方法:
(A):如果这是一个常规的桌面应用程序,我将使用虚拟继承并在运行时创建实例,例如使用抽象工厂.
缺点:然而,*_B类永远不会在产品A中使用,因此在运行时取消引用所有虚函数调用和未链接到地址的成员将导致相当大的开销.
(B)使用模板专门化作为继承机制(例如CRTP)
template<class Derived>
class Toplevel { /* generic stuff ... */ };
class Toplevel_A : public Toplevel<Toplevel_A> { /* specific stuff ... …Run Code Online (Sandbox Code Playgroud)我的问题是不同的方式来连接mongodb与grafana
我无法决定是将我的应用程序归类为"实时"还是"接近实时",或者甚至是其他东西.
软件在从源生成数据时立即接收数据,然后根据某些规则在满足某些条件时发出警报.它需要每隔30秒检查最后30秒数据的方法,以查看是否已满足规则的标准.
那是实时的吗?实时与近实时定义的阈值是多少?
编辑
我认为这是在网络上为业务定义实时的重复.
请确定以上主题是否不足以回答您的问题.
我对此非常好奇.如果使用值为0和1的AtomicIntegerArray,则可以完成AtomicBoolean数组的相同操作.例:
final AtomicIntegerArray array1 = new AtomicIntegerArray(10);
array1.compareAndSet(3, 0, 1); // 0 = false and 1 = true
// exactly the same thing of:
final AtomicBoolean[] array2 = new AtomicBoolean[10];
for(int i = 0; i < array2.length; i++)
array2[i] = new AtomicBoolean(false);
array2[3].compareAndSet(false, true);
Run Code Online (Sandbox Code Playgroud)
您认为哪一个更快更好?
PRE-SCRIPTUM:
我搜索过StackOverflow并且没有Q/A解释调整WebRTC的所有可能性,以使其更适合最终产品.
问题:
WebRTC有一个非常好的用户体验,它正在削减优势.它应该是完美的网状电话(3-8人),但它还没有.网格调用的最大问题(所有参与者彼此交换流)是资源消耗,尤其是CPU.
以下是我想分享的一些统计数据:
2.3 GHz Intel Core i5(2核),OSX 10.10.2(14C109),4GB RAM,Chrome 40.0.2214.111(64位)
+------------------------------------+----------+----------+
| Condition | CPU | Delta |
+------------------------------------+----------+----------+
| Chrome (idle after getUserMedia) | 11% | 11% |
| Chrome-Chrome | 55% | 44% |
| Chrome-Chrome-Chrome | 74% | 19% |
| Chrome-Chrome-Chrome-Chrome | 102% | 28% |
+------------------------------------+----------+----------+
Run Code Online (Sandbox Code Playgroud)
题:
我想创建一个WebRTC调整表,它可以改善资源消耗并提高整体体验.除了下表中的那些设置之外,我还可以使用其他任何设置吗?
+------------------------------------+--------------+----------------------+
| Tweak | CPU Effect | Affects |
+------------------------------------+--------------+----------------------+
| Lower FPS | Low to high | Video quality lower |
| Lower …Run Code Online (Sandbox Code Playgroud) real-time ×10
concurrency ×2
embedded ×2
ajax ×1
architecture ×1
c ×1
c++ ×1
cpu ×1
erlang ×1
fft ×1
glossary ×1
grafana ×1
inheritance ×1
java ×1
mahout ×1
mongodb ×1
mysql ×1
node.js ×1
pentaho ×1
performance ×1
socket.io ×1
time-series ×1
video ×1
webrtc ×1
weka ×1