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