如果我使用汇编语言为嵌入式系统编码。我可以使用实时操作系统和组合语言吗?通常,当涉及复杂软件时,会使用RTOS。是否有任何技术或理论限制?
当然是肯定的。 如何做到这一点可能取决于所选的架构和特定的RTOS。
大多数 RTOS 内核都以静态链接库的形式提供,您可以将应用程序代码链接到这些库以形成整体加载映像。 QNX 等少数是完整的操作系统,可在运行时动态加载和执行应用程序。 在后一种情况下,从汇编程序进行操作系统调用应在操作系统文档中处理。 在静态链接的RTOS库的情况下,汇编器接口通常符合目标架构的ABI和调用约定,这将记录在架构中,也可能记录在RTOS本身。
大多数RTOS产品都设计有C API接口,然后应用了从汇编程序调用C代码的目标文档。 您可以在汇编程序或 RTOS 文档中找到此信息。
综上所述,使用汇编程序的论据通常是保持对代码大小和性能的严格控制,但是通过使用大型(ish(第三方库,您在某种程度上失去了这种控制,并且可以简单地使用C或C++。
事实是,在大多数情况下,您需要对特定指令集有高度的了解,才能在性能和代码大小上击败优化的C编译器,即使您拥有这些知识,从生产力的角度来看,手动优化大型汇编程序也很少值得付出努力。 在大型汇编代码库中,出于生产力的原因,使用大量样板和宏生成的代码是很常见的 - 这对于特定用途来说通常是次优的,而编译器优化器可以在翻译过程中考虑代码的每个部分的实现。 请参阅科林·沃尔斯(Colin Walls(关于 embedded.com 的文章(也请阅读评论 - 包括我的评论 - 为了平衡,只是为了不同意见的嵌入式极客的乐趣(。
这实际上取决于操作系统。大多数已知的操作系统都允许使用汇编语言编程,但其中一些使它非常不舒服(例如Mac OS X,它对API调用的堆栈对齐提出了非常奇怪的要求(。
我可以想象一些操作系统将使汇编编程绝对不可能,但这样的操作系统可能会在某些功能上限制自己。
因此,规则是 - 如果操作系统允许运行编译的二进制文件,那么它允许汇编语言编程。
创建此类程序是多么容易完全是另一回事。良好的 API 文档是必不可少的。