rtems 中的编程与 Linux 有何不同?

How is programming in rtems different than Linux?

我是 rtem 编程的新手,想知道 rtem 和 linux 这两者在编程方面有何不同。我知道 rtems 是一个实时操作系统,但如果你要制作一个 hello world 应用程序,程序会不会一样?

请注意,您的问题很笼统。有很多细节差异。

最大的问题之一是二进制文件的格式:大多数 RTEMS 二进制文件静态链接在一起。您只有一个包含系统和应用程序的大二进制文件。支持一些动态加载,但大多数用户不使用这种情况。

如前所述,我的n.m。在评论中 RTEMS 有很多 POSIX API(至少是嵌入式子集)。所以你可以像在 Linux.

上一样使用很多相同的 API

一个很大的区别是 RTEMS 有一个全局地址 space(在大多数目标上)。所以你没有任务之间的分离。这使得指针错误更难调试。

还有一个区别:大多数嵌入式系统都是针对长 运行 应用程序的。在这样的应用程序中(无论您是在 Linux 还是在 RTEMS 或任何其他系统上),您应该小心清理您的东西(关闭文件,释放内存,...)。在 Linux(或其他桌面 class 系统)中,您有进程,内核会在您的进程退出后清理所有资源。尽管您可以在 RTEMS 中创建线程,但在线程退出后没有人进行清理。

线程的 POSIX 属性默认值未在标准中指定,并且在 RTEMS 和 Linux 之间可能有所不同。