NOTE: The project and documentation presented on this page is a work in progress so provided as a separate zip file download. It will be released in the main FreeRTOS download following full review and completion of this documentation.

FreeRTOS+POSIX
Portable Operating System Interface (POSIX threading wrapper) for FreeRTOS


On this page:

  1. Introduction
  2. Pre-configured example project
  3. Supported features
  4. FreeRTOS+POSIX source code organisation
  5. Dependencies
  6. Developer references and API documentation
  7. Porting
  8. Code Size

 

Introduction

The Portable Operating System Interface (POSIX) is a family of standards specified by the IEEE Computer Society for maintaining compatibility between operating systems. FreeRTOS+POSIX implements a subset of the POSIX threading API.

With FreeRTOS+POSIX, an existing POSIX threading compliant application can be ported to run on the FreeRTOS kernel, and therefor leverage all the Amazon FreeRTOS functionality. Additionally, a library designed for use with POSIX threading compatible operating systems can be ported to FreeRTOS kernel based applications.

FreeRTOS Architecture Description
Location of FreeRTOS+POSIX when used with Amazon FreeRTOS libraries

 

Example Pre-configure Project

Please see the FreeRTOS+POSIX Pre-configured Example documentation page.

 

Currently Supported Features

FreeRTOS+POSIX partially implements IEEE Std 1003.1-2017 Edition The Open Group Technical Standard Base Specifications, Issue 7. FreeRTOS+POSIX includes implementations for the following POSIX threading header files – please refer to the FreeRTOS+POSIX API documentation for specifics on the features supported within each header file:

  • errno.h
  • fcntl.h
  • mqueue.h
  • pthread.h
  • sched.h
  • semaphore.h
  • signal.h
  • sys/types.h
  • time.h
  • unistd.h
  • utils.h

 

FreeRTOS+POSIX Source Code Organisation

Porting related headers and implementation source code


/lib/FreeRTOS-Plus-POSIX
        |-- include
        |   |
        |   +- FreeRTOS_POSIX.h
        |   +- FreeRTOS_POSIX_internal.h
        |   +- FreeRTOS_POSIX_types.h
        |   +- portable
        |        |
        |        +- [target]
        |        |    |
        |        |    +- [development board]
        |        |            |
        |        |            +- FreeRTOS_POSIX_portable.h
        |        |
        |        +- FreeRTOS_POSIX_portable_default.h
        |
        +- source
            +- FreeRTOS_POSIX_clock.c
            +- FreeRTOS_POSIX_mqueue.c
            +- FreeRTOS_POSIX_pthread_barrier.c
            +- FreeRTOS_POSIX_pthread.c
            +- FreeRTOS_POSIX_pthread_cond.c
            +- FreeRTOS_POSIX_pthread_mutex.c
            +- FreeRTOS_POSIX_sched.c
            +- FreeRTOS_POSIX_semaphore.c
            +- FreeRTOS_POSIX_timer.c
            +- FreeRTOS_POSIX_unistd.c
            +- FreeRTOS_POSIX_utils.c

FreeRTOS+POSIX headers


	/lib/include/FreeRTOS_POSIX
                    +- errno.h
                    +- fcntl.h
                    +- mqueue.h
                    +- pthread.h
                    +- sched.h
                    +- semaphore.h
                    +- signal.h
                    +- sys
                    |    |
                    |    +- types.h
                    |
                    +- time.h
                    +- unistd.h
                    +- utils.h

 

Dependencies

Both configUSE_POSIX_ERRNO and configUSE_APPLICATION_TASK_TAG must be set to 1 in FreeRTOSConfig.h.

 

Developer References and API Documents

Please refer to the reference material (links to Doxygen output).

 

Porting

Porting Related Header Files

FreeRTOS platform specific POSIX configuration
High Level Description
/lib/FreeRTOS-Plus-POSIX/include/FreeRTOS_POSIX.h This header file brings in dependencies required by FreeRTOS+POSIX. This file must be included before all other FreeRTOS+POSIX includes.
/lib/FreeRTOS-Plus-POSIX/include/FreeRTOS_POSIX_internal.h FreeRTOS+POSIX internal structs and initializers. Users are not suggested to touch this file.
/lib/FreeRTOS-Plus-POSIX/include/FreeRTOS_POSIX_portable_default.h Defaults for FreeRTOS+POSIX port-specific configuration options.
/lib/FreeRTOS-Plus-POSIX/include/portable/[vendor-directory]/FreeRTOS_POSIX_portable.h Port-specific configuration overwrite of FreeRTOS+POSIX. As an example, /lib/FreeRTOS-Plus-POSIX/include/portable/pc/windows/FreeRTOS_POSIX_portable.h, Windows simulator uses the defaults, thus does not need to overwrite anything.

 

FreeRTOS+POSIX Include Paths

/lib/FreeRTOS-Plus-POSIX/include
/lib/FreeRTOS-Plus-POSIX/source
/lib/include/FreeRTOS_POSIX/

Note that a project only needs platform specific header from this path /lib/FreeRTOS-Plus-POSIX/include/portable.

 

Code Size

Code Size (Compiled with ARM Code Generation Tools (CGT), –silicon_version 7M4)
File
Optimisation off, in Byte
Optimisation on, in Byte
(–opt_level 0 –opt_for_speed 0)
FreeRTOS_POSIX_clock.c
412
296
FreeRTOS_POSIX_mqueue.c
2016
1612
FreeRTOS_POSIX_pthread_barrier.c
294
200
FreeRTOS_POSIX_pthread.c
980
660
FreeRTOS_POSIX_pthread_cond.c
696
496
FreeRTOS_POSIX_pthread_mutex.c
848
608
FreeRTOS_POSIX_sched.c
48
32
FreeRTOS_POSIX_semaphore.c
540
380
FreeRTOS_POSIX_timer.c
972
788
FreeRTOS_POSIX_unistd.c
92
68
FreeRTOS_POSIX_utils.c
1152
768
Total
8050
5908