比如用户自己程序代码可以直接调用 osDelay()来延时,这个 osDelay() 是 freeRTOS 提供的 api
现在用户可以不直接调用 osDelay,而是调用 cmsis-的 api,其实这个 api 就是封装的 osDelay,同样是延时。
cmsis api 的好处就是,只要是 cmsis 支持的 rtos,他的延时 api 函数都是同样的,对用户来说,不管用户程序在什么 RTOS 上一个代码都不用动就可以运行。
底层不同 rtos 那是 cmsis 适配层的问题,
相当于建立起一套标准,cmsis 标准,驱动要支持这个标准,rtos 也支持这个标准,用户只要会用 cmsis 一个标准,就可以使用所有支持 cmsis 的 RTOS
在简单一点,你只要记住 cmsis 的延时函数,比如是 xxdelay,你只会用这一个函数,所有操作系统的延时函数你都会用了。因为底层运行 ucos ,xxdelay 就会封装 ucos 的 delay 函数,底层是 freertos ,xxdelay 就会封装 freertos 的 delay 函数,底层是 RT-thread ,xxdelay 就会封装 RTThread 延时函数。
带来的便利就是程序可以跨底层系统,中间件,驱动,迁移。
其实 cobemx 也是这样的整合工具,只是现有支持的还少,看不出来他的价值,现在只支持 freeRTOS ,比如以后支持 ucos ,RTTherad, 的时候,你从 freeRTOS 切换到 RTThread ,只需要在 cobemx 里面把 freertos 勾去掉,rtthread 勾上,重新生成代码,keil 编译下载,搞定,应用层符合 cmsis 标准的话,就这么简单就切换了操作系统。
实际上可能么有这么完美,可是他的目标就是要这么完美