一、LOS_XX是什么
LOS_XX是LiteOS_M或LiteOS_A内核提供的接口。例如:LOS_TaskCreate、LOS_TaskCreate、LOS_SemCreate等。因为LiteOS_M和LiteOS_A是针对不同的内核,所以LOS_XX在实现上也是有所不同的。也就是说LOS_XX跟具体的内核类型是有关系的。
这里只说一下的源文件位置,有兴趣可以自行研究。
1.0版本,LiteOS_M
code-1.0\kernel\liteos_m\kernel\base
1.0.1版本,LiteOS_M
code-1.0.1\L01\kernel\liteos_m\kernel\src
1.1版本,LiteOS_M
code-1.1.0\code-1.1.0\kernel\liteos_m\kernel\src
二、什么是osXX
osXX是cmsis标准的接口,例如osThreadNew、osTimerNew、osSemaphoreNew等。
因为这些函数我们在之前的文章中都有详细介绍,这里不做过多介绍,只介绍这些文件的位置,感兴趣的自行研究。
1.0版本
code-1.0\kernel\liteos_m\components\cmsis\2.0
1.0.1版本
code-1.0.1\L01\kernel\liteos_m\kal\cmsis
1.1.0版本
code-1.1.0\code-1.1.0\kernel\liteos_m\kal\cmsis
在cmsis_liteos2.c中,包含了osXX所有函数的实现。
需要注意的是,在1.0版本中,cmsis文件中还没有包含osMemoryXX相关的函数,只做了定义。所以,如果在1.0版本中调用osMemoryXX相关的函数,编译是会报错的。
三、二者的关系
osXX实际上是对LOS_XX的更上一层的封装。上文说过,LOS_XX针对LiteOS_M和Lite_OSA实现是不同的。实际上,如果有更多的内核,LOS_XX可能会有更多不同的命名。那为了方便开发者开发,且在不同的内核上运行,osXX就诞生了。
例如,如果A内核系统有AOS_XX,B内核有BOS_XX,C内核有COS_XX。当应用开发人员调用AOS_XX就只能在A内核上运行,调用BOS_XX只能在B内核上运行。这显然增加了跨内核的复杂度。而如果应用开发人员调用osXX,只要A内核、B内核、C内核都提供了osXX的实现,那么应用开发人员就不需要做任何适配,就可以在A内核、B内核、C内核的系统上跑。
注:1.0版本,只支持cmsis标准。1.0.1版本及更高版本,支持cmsis标准和posix标准
1.0.1版本
code-1.0.1\L01\kernel\liteos_m\kal
其实,从代码中也是可以找到osXX与LOS_XX的关系的。这里以osThreadNew函数为例,先看一下该函数的实体。
可以看到,osThreadNew函数的实体中,实际还是调用了LOS_TaskCreate来实现任务的创建。