首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >任务关键嵌入式语言

任务关键嵌入式语言
EN

Software Engineering用户
提问于 2011-11-15 19:24:08
回答 9查看 3.3K关注 0票数 7

也许这个问题听起来有点奇怪,所以我会解释一下背景。

目前我正在Y大学做一个项目,这将是一个完整的卫星机载软件。该系统是在实时操作系统的基础上用C++编程的.然而,目前只有在Matlab/Simulink中实现姿态控制系统、故障检测和空间仿真等子系统,才能有效地实现算法的原型化。经过验证后,它们将被翻译成c++。

完整的车载软件变得非常复杂,只有少数人知道整个系统.此外,许多学生还没有用C++编程,C++的手动内存管理使得编写任务关键软件更加困难。

当然,主系统必须用C++实现,但我问自己是否可以使用嵌入式语言来实现目前在Matlab中编写的子系统。这种嵌入式语言应该具有以下特点:

  • 静态/强类型和编译器检查,以尽量减少运行时错误
  • 内存使用量小,运行时相对较快
  • 姿态控制算法主要是数值计算,所以一个好的数字支持是很好的。
  • 也许是某种函数编程特性,matlab/simulink也鼓励您使用它。

我搜索了一下,但只找到了Lua。它看起来不错,但我不会在关键任务软件中使用它。你有没有遇到过这样的情况,或者你知道什么语言可以满足这些条件?

编辑:澄清一些事情:嵌入式意味着它应该能够将语言嵌入到现有的C++环境中。所以没有像Ada或Haskell这样的编译语言

EN

回答 9

Software Engineering用户

回答已采纳

发布于 2011-11-15 21:08:03

使用C++,不要使用任何嵌入式/分层的东西。

我将用否定的方式回答这个问题,并告诉你使用C++,雇佣适当的资源,不要在上面添加其他的东西。您的大多数条件无论如何都适合C++:强输入、最小运行时等(键入不如Haskell强,但比大多数脚本语言好)

如果不愿意,甚至不需要使用许多类和对象。编写一种更实用的样式,除非您需要更高级的函数和运行。使用C++作为一个更好的C没有特殊的罪过,除非您是偶然地这样做的。如果你有目的地这么做,那就全速前进。

考虑到假定的任务关键性,您可能不想拥有嵌入式语言所带来的额外的复杂性和故障点。

这就是说:请尽可能使用现代的C++,特别是使用适当的智能指针(如果使用堆内存)。C++已经走了很长一段路,尤其是大多数手动内存管理任务现在使用shared_ptr、unique_ptr等更好地自动化了。如果你不得不写删除,你是在做错事。

如果你被困在想要嵌入什么东西,看看Boost 原语

票数 14
EN

Software Engineering用户

发布于 2012-02-07 09:57:35

我不确定什么是“关键任务”,但我有10+多年的安全关键嵌入式系统软件开发经验。

无论你选择哪种语言,你都一定需要一个编码标准。也就是说,关于如何编写程序、允许哪些机制以及哪些机制被禁止的规则。规则应该采用“不使用goto”、“不使用类似函数的宏”等方式。

如果项目中有初级程序员参与,这一点尤其重要。因为他们可能不知道哪些机制被认为是好做法,哪些机制是坏的。而且他们几乎肯定不知道语言所包含的数以百计的不明确和微妙的行为案例,以及其他类似的高级但极其重要的话题。例如,人们很可能只写一本关于C++中所有未定义/未指定/实现定义的行为的很厚的书。

此外,工业安全标准(如DO178B或IEC 61508 )强制使用编程语言的一个定义良好的子集,然后您必须有一个编码标准。

如果您没有编码标准的经验,那么明智的做法是选择一个预先制作的、得到广泛认可的行业事实上的标准: MISRA-C、MISRA-C++、already、Cert C等等。这类行业编码标准的优点是已经有了软件测试工具,也就是支持它们的静态/动态代码分析器。如果没有适当的代码分析器工具,甚至不要考虑这个项目!

(关于技术细节的括号:您将在任何高完整性系统的编码标准中使用粗体字母禁止任何形式的动态内存管理,无论语言如何。一般来说,这样的系统以非确定性的方式运行是没有意义的,而动态内存只有在非确定性的情况下才有意义。)

票数 6
EN

Software Engineering用户

发布于 2011-11-15 19:49:55

我建议Haskell作为思考的食粮,尽管它不符合你所有的标准:

优点:

  • 非常好的类型系统,大量的编译器检查--让Haskell甚至屈尊查看您的程序是非常困难的,更不用说编译它了!)
  • 没有手动内存管理
  • 纯函数式编程语言,丰富的FP特性

缺点:

  • 很少有人认识哈斯克尔,而且可能很难学习。
  • 与主流语言不同--不同的习语、方法
  • 编写内存高效的程序是可能的,但非常困难。

不确定:

  • 什么是嵌入式语言?
  • 数值支持-不确定你需要什么
票数 5
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/119933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档