Developed over the past 12 years (circa 2005) by Richard Barry, FreeRTOS is a real-time kernel that is free to use and is provided in source form. It has become fairly popular over the years, adopted by many semiconductor manufacturers (semis) because it avoids playing favoritism among real-time operating system (RTOS) suppliers, and also allows them to provide examples using an RTOS kernel with their chips. However, semis provide limited support for this kernel.
Many customers want to understand how the products are different, since both FreeRTOS and µC/OS-III are “real-time kernels”; software that manages the time and resources of a CPU. The key difference is that µC/OS-III offers a full-fledged operating system that includes other highly reusable software modules (aka middleware) such TCP/IP stack (both IPv4 and IPv6), USB stacks (both host and device), a file system (either FAT compatible or transactional), CANbus, Modbus (ASCII or RTU), a graphical user interface (GUI) and more.
It should be noted that you don’t have to use all modules if your application/product doesn’t require them. For example, if you only need the TCP/IP stack and µC/OS-III, then these are the only modules you add to your product. However, developers who need to use more than a kernel will face additional requirements to integrate FreeRTOS with components from other vendors. Since µC/OS-III is also provided in source form and can be expanded into a full-fledge embedded operating system, we are often asked to help customers migrate from FreeRTOS to µC/OS-III.
For that reason, we have created a migration guide for customers who want to migrate their FreeRTOS-based application to Micrium’s µC/OS-III. You will find that migrating FreeRTOS is quite straightforward, and in most cases, will requires only a few hours.
The guide covers the following topics:
- Source code
- Interrupt vector table
- Critical sections
- Kernel-aware interrupts
- Initializing and starting the OS
- Task priorities
- Task creation
- Task delays
- Semaphores and mutexes
- Message queues
- Other API functions
- Error handling