我计划在RTOS平台上实现一个小规模的数据采集系统.(无论是在QNX上还是在RT系统上。)
据我所知,这些工作是使用C/ C++执行的,以最大限度地利用系统。然而,我很想知道,并想了解一些有经验的人的意见,然后我盲目地投入到编码行动中去,用Python编写所有东西是否可行和明智(从底层仪器接口到闪亮的图形用户界面)。如果不是,将设计的关键时间部分与"C“混合,或者用C编写所有东西,甚至不放一行Python代码。
或者至少使用Python包装C代码以提供对系统的更容易的访问。
你建议我改哪条路?我很高兴你指出一些类似的设计案例和进一步的阅读。
谢谢
NOTE1:强调QNX的原因是因为我们已经有了一个基于QNX4.25的数据采集系统(M300),用于我们的大气测量实验。这是一个专有的系统,我们不能访问它的内部。进一步研究QNX可能对我们有利,因为6.4有一个免费的学术许可选项,附带Python2.5和最近的GCC版本。我从未测试过RT-Linux系统,也不知道它在稳定性和效率方面与QNX有多大的可比性,但我知道所有Python生境和非Python工具(比如Google Earth)的所有成员都可以在大部分时间内在工作上开发新系统。
发布于 2009-09-10 02:17:38
我不能代表所有的数据采集装置,但是他们中的大多数人都在等待数据的到来--至少是我曾经做过的那些。
然后,当数据进入时,您需要立即记录事件或响应它,然后它返回到等待的游戏。这通常是数据采集系统中最关键的时间部分。由于这个原因,我通常会说,在数据采集的I/O部分中坚持使用C,但是没有任何特别令人信服的理由不在非时间关键部分使用Python。
如果您的需求相当松散--可能只需要毫秒精度--这将为用Python完成所有工作增加一些负担。就开发时间而言,如果您已经对Python感到满意,那么如果您只在出现瓶颈时才使用Python和重构,那么您可能会更快地拥有一个成品。用Python完成大部分工作也将使彻底测试代码变得更加容易,而且作为一般经验规则,代码行数将减少,从而减少了bug的空间。
如果您需要指定多任务(而不是多线程),无堆栈Python也可能是有益的。这就像多线程一样,但是线程(或者用无堆栈的术语来说是tasklet)不是OS级线程,而是Python/应用程序级的线程,因此在线程之间切换的开销大大降低了。您可以将Stackless配置为多任务协作或先发制人。最大的缺点是阻塞IO通常会阻塞整个任务集。无论如何,考虑到QNX已经是一个实时系统,很难推测无堆栈是否值得使用。
我的投票将是采取尽可能多的Python-可能的路线-我认为它是低成本和高效益。如果您确实需要用C重写,那么您已经可以开始编写工作代码了。
发布于 2013-02-21 20:52:00
我已经构建了几个全Python软实时(RT)系统,主要周期从1ms到1秒不等。在此过程中,我学到了一些基本的策略和策略:
使用Python进行RT开发还有许多其他好处。例如,即使您相当肯定您的目标语言不可能是Python,在Python中开发和调试一个原型也会带来巨大的好处,然后使用它作为最终系统的模板和测试工具。多年来,我一直在使用Python创建系统“硬部分”的快速原型,并创建快速的‘n’脏测试GUI。这就是我的第一个RT Python系统是如何出现的:即使在测试GUI运行的情况下,原型(+Psyco)也足够快!
-BobC
编辑:忘了提到跨平台的好处:我的代码几乎到处运行,a)没有重新编译(或编译器依赖,或需要交叉编译器),b)几乎没有平台相关的代码(主要用于文件处理和串行I/O等错误代码)。我可以在Win7-x86上进行开发,并在Linux上部署(或者其他任何POSIX操作系统,这些操作系统现在都有Python )。PyPy目前主要是x86,但ARM端口正在以令人难以置信的速度发展。
发布于 2009-09-10 02:28:08
通常,反对在实时上下文中使用高级语言的原因是不确定的--当您运行一个例程时,可能需要100 is;下一次运行相同的例程时,它可能决定扩展一个哈希表,调用malloc,然后malloc请求内核提供更多的内存,从立即返回、毫秒后返回到几秒钟后返回,再到错误,从代码中没有一个是立即明显的(或可控的)。理论上,如果你用C(甚至更低的)写,你可以证明你的关键路径将“总是”(除非流星撞击)在X时间运行。
https://stackoverflow.com/questions/1402933
复制相似问题