POSIX标准系统接口
简介
POSIX(Portable Operating System Interface of UNIX),可移植操作系统接口,它定义了操作系统应该为应用程序提供的接口,其中X代表UNIX,是对Unix API的传承。POSIX标准意在期望获得源代码级别的软件可移植性。换句话说,为一个POSIX兼容的操作系统编写的程序,应该可以在任何其它的POSIX操作系统(即使是来自另一个厂商)上编译执行。
因此,这一标准带来的好处就是在一个POSIX兼容的操作系统编写的符合其标准的应用程序可以直接在其他POSIX支持的操作系统中无需修改而能够直接编译运行。
进一步理解
完成同一功能,不同内核提供的系统调用(也就是一个函数)是不同的,例如创建进程,linux下是fork函数,windows下是creatprocess函数。好,我现在在linux下写一个程序,用到fork函数,那么这个程序该怎么往windows上移植?我需要把源代码里的fork通通改成creatprocess,然后重新编译!
posix标准的出现就是为了解决这个问题。linux和windows都要实现基本的posix标准,linux把fork函数封装成posix_fork(随便说的),windows把creatprocess函数也封装成posix_fork,都声明在unistd.h里。
这样,程序员编写普通应用时候,只用包含unistd.h,调用posix_fork函数,程序就在源代码级别可移植了。
知识补充
现代的POSIX OS一般是多线程的。讨论POSIX OS时,必然要研究进程和线程。
在现代操作系统中,进程支持多线程。进程是资源管理的最小单元;而线程是程序执行的最小单元。一个进程的组成实体可以分为两大部分:线程集合和资源集合。进程中的线程是动态的对象;代表了进程指令的执行。资源,包括地址空间、打开的文件、用户信息等等,由进程内的线程共享。线程有自己的私有数据:程序计数器,栈空间以及寄存器(可以认为线程自己保存着CPU的状态,而和其他线程共享内存空间)。
想要进一步了解可以进入POSIX标准总体分析一文。
POSIX框架图
CMSIS标准
简介
CMSIS是Cortex Microcontroller Software Interface Standard的缩写,中文为Cortex系列微控制器软件接口标准。此标准是ARM公司,芯片供应商以及软件供应商共同制定的,旨意降低软件开发成本。它规定了处理器内核与外设的接口,统一了内核访问外设寄存器的方法,从而简化了软件的开发,提高了软件的重用。
CMSIS是一组工具、api、框架和工作流程,有助于简化软件重用,减少微控制器开发人员的学习曲线,加速项目构建和调试,从而减少新应用程序上市的时间。
CMSIS最初是一个独立于供应商的硬件抽象层,基于Arm Cortex®-M处理器,后来扩展到支持入门级的Arm Cortex- a处理器。为了简化访问,CMSIS定义了通用的工具接口,并通过向处理器和外设提供简单的软件接口来实现一致的设备支持。
CMSIS是在各种硅和软件供应商的密切合作下定义的,并提供了与外设、实时操作系统和中间件组件的接口的通用方法。它旨在支持来自多个供应商的软件组件的组合。
CMSIS的结构
CMSIS 包含以下组件:
- CMSIS-CORE:提供与 Cortex-M0、Cortex-M3、Cortex-M4、SC000 和 SC300 处理器与外围寄存器之间的接口
- CMSIS-DSP:包含以定点(分数 q7、q15、q31)和单精度浮点(32 位)实现的 60 多种函数的 DSP 库
- CMSIS-RTOS API:用于线程控制、资源和时间管理的实时操作系统的标准化编程接口
- CMSIS-SVD:包含完整微控制器系统(包括外设)的程序员视图的系统视图描述 XML 文件
此标准可进行全面扩展,以确保适用于所有 Cortex-M 处理器系列微控制器。其中包括所有设备:从最小的 8 KB 设备,直至带有精密通信外设(例如以太网或 USB)的设备。(内核外设功能的内存要求小于 1 KB 代码,低于 10 字节 RAM)。
框架图
其中CMSIS-RTOS的理解见下图:
注:CMSIS-RTOS在用户的应用代码和第三方的RTOS Kernel直接架起一道桥梁,一个设计在不同的RTOS之间移植,或者在不同Cortex MCU直接移植的时候,如果两个RTOS都实现了CMSIS-RTOS,那么用户的应用程序代码完全可以不做修改。
进一步理解
CMSIS的创建是为了帮助行业标准化。它使一致的软件层和设备支持跨广泛的开发工具和微控制器。CMSIS不是一个会带来开销的巨大的软件层,也没有定义标准的外围设备。因此,硅行业可以使用这一通用标准来支持Arm Cortex基于处理器的各种设备。
详细说明见官方文档:CMSIS INTRODUCTION
小结
随着5G和智能化的来临,物联网(IoT)的发展也变得更加快速。当前的物联网领域已经形成了庞大的生态系统,市场上的微控制器(MCU)供应商和嵌入式操作系统(一般也是实时操作系统)也多达几十个,开发者面对的嵌入式软件工程越发复杂。为减少开发工作量并降低产品存在缺陷的风险,软件重用变得越来越重要。因此各标准组织和相关利益厂商,都在积极制定和推动软件接口标准。