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