STM32上使用POSIX接口
STM32上使用POSIX接口
絮絮叨叨:如果不是博客粉丝,我都快要遗忘公众号这回事了,感谢所有认真阅读的读者的支持!
FreeRTOS 和 POSIX 接口简介
POSIX 接口的全称是:可移植性操作系统接口(Portable Operating System Interface, POSIX)。它是由电器和电子工程师协会(IEEE)开发的开放操作系统接口标准,并且得到 IOS 和 ANSI 的认可。
其主要目的是提升应用程序在各种 UNIX 系统环境之间的可移植性。使用 POSIX 接口开发的程序,可以在支持的平台方便进行移植。
FreeRTOS 是一款广泛使用于微控制器的开源实时操作系统,其具有极简的内核,几个文件中包含了:任务管理、时间管理、信号量、消息队列、内存管理、软件定时器,实现了实时操作系统的核心功能。
FreeRTOS 的 POSIX 接口层
在开发使用第三方库时,会遇到许多库都是运行在 linux 平台下,基于 posix 接口开发的。而在 FreeRTOS 内核的 API 是不兼容 POSIX 接口的。
但是在官方提供的 Library 中,包含了标准 POSIX 的线程兼容库,其满足 POSIX IEEE Std 1003.1-2017 标准。
支持的头文件列表如下:.
必须强调的是: 尽管在 FreeRTOS 的 POSIX 支持库中提供了 <fcntl.h> 的头文件,但是其中只包含了文件操作选项的宏定义,并未提供文件访问操作的一系列 API (open, read, write, ioctl等)。
在 STM32 上使用 POSIX
在官方提供的 POSIX 库的代码中并没有移植到 STM32, 而是提供了一个 VS Simulation,所以在 stm32 中使用该功能还是需要进行移植。
不过移植过程相对比较简单,只需要将 POSIX 库的源文件和头文件添加到工程中,并开启configUSE_POSIX_ERRNO 和 configUSE_APPLICATION_TASK_TAG 两个配置宏。
在移植时需要注意 FreeRTOS 的版本是否兼容,STM32CubeMX 默认的 FreeRTOS 库由于版本过低,无法直接使用。
我在移植时,使用 Cube 默认生成的 FreeRTOS 工程文件,然后使用 Simulation 中的文件替换原有文件进行的。
在阅读原文链接中,为移植好的 stm32 demo 工程和官方提供的 VS Simulation 工程。