如何使我的代码独立于“ RTOS”?

时间:2019-04-27 15:21:59

标签: c freertos rtos lwip cmsis

我想编写一个需要一些RTOS API的模块,例如Mbox和Task Creation API!

我试图拥有结构化的代码,并为此而着眼于“ lwip”之类的库。在“ lwip”中,有一个名为Sys-arch.c的文件,据我所知,它是RTOS API的抽象层!但是在我的端口中,它包含cmsis_os.h并使用了这些API。他们为什么这样做而不是直接使用cmsis_os?

我是否应该有一个新的OS层以便具有可移植的代码或CMSIS_OS足够?

3 个答案:

答案 0 :(得分:2)

此答案基于意见。

以我的经验,在您的OS访问周围使用功能/定义总是一个好主意。如果您使用CMSIS_OS或您自己的层没有什么大的不同,那么如果您使用自己的层就可以做更多的工作,尤其是移植和测试对于一个以上的OS来说将非常麻烦。

CMSIS_OS将您绑定到Cortex-M系统,但是由于它们也以通常的方式实现了您将在层中实现的功能,因此稍后从CMSIS_OS移植到您自己的层相当简单。如果直接在代码中直接使用对特定操作系统的直接调用并不是那么简单,但是如果仅依靠标准功能(看看CMSIS_OS,RTOS的共同功能是什么)并且不使用特殊功能,这也是可能的。操作系统的功能。

答案 1 :(得分:1)

  

为什么他们这样做而不是直接使用cmsis_os?

因为:

  • 该想法是从 any RTOS中提取API。如果您的目标未使用CMSIS RTOS,则无论如何都必须编写一个移植层。

  • CMSIS RTOS API是特定于ARM Cortex-M的,而lwip不是。

  

我是否应该有一个新的OS层以便具有可移植的代码或CMSIS_OS足够?

仅当您仅将ARM Cortex-M作为目标时,CMSIS才足够,并且可能需要您使用任何RTOS的CMSIS层。 CMSIS是可移植性抽象,但可能不是 usability 抽象。您可能会选择通过CMSIS实现自己的简单抽象,也可以将其移植到其他目标。

答案 2 :(得分:0)

lwIP的结构很好,因此只要您的RTOS API支持其语义要求,那么您要做的就是使sys_arch.c适应您的OS API,您就完成了。通过使用CMSIS_OS API抽象来制作sys_arch.c,这意味着您可以使用任何符合CMSIS OS API的操作系统,而无需更改sys_arch.c的端口。这是一个间接的额外层,只有您可以决定是否值得。如果您不打算在下面使用其他RTOS,则没有理由不具有特定于单个RTOS的sys_arch.c。

无论如何,lwIP RTOS要求相当适中。大约有十二个功能,但实际上只涉及具有某些特征的邮箱和信号灯。