2018-09-04: cocoOS, the IoT OS! coocOS is finding its way into the IoT world. This makes perfectly sense, as cocoOS is a small footprint, easy to port, easy to use scheduler.
IoT expert and teacher Lup Yuen Lee is building a portable platform using cocoOS as its task scheduler. Read more in his article series on Medium: Juggling Arduino Sensors with cocoOS
2018-09-01: cocoOS is now in GitHub! Check it out!
2018-08-28: New release: 5.0.3. Changed storage type for time variables to uint32_t. You can now wait longer...
2018-08-18: New release: 5.0.2. Minor bug fix for a problem with message handling when compiling for C++, reported by Lup Yuen Lee.
2018-06-15: Added paragraphs on the task page.
Uploaded an example project showing several cocoOS features, use of the task data pointer and more. It runs directly under Linux. Get it here!
Minor update cocoOS release 5.0.1! Get the files here!
The big new thing in version 5 is the task data pointer. It makes the task procedures so much more flexible. You can reuse task procedures for several tasks, just delegating
work through the pointer. The data pointer can not only point to a simple data structure, it can also point to an interface. Be creative!
cocoOS release 5.0.0! Get the files here!
- Tasks can reuse the same task procedure.
- Tasks can be given a pointer to a user defined data structure.
- Message passing now uses the task id as identifier instead of the task procedure, when specifying the receiver of a message.
2016-11-02: cocoOS and networking! I have reworked the LwIP tcp echo server example project for STM32F4Discovery with the expansion board STM32F4DIS-BB for use with cocoOS!
It will not compile right out of the box, there are some dependencies to stuff in my build environment that you will have to provide your own implementation for. But the example demonstrates the use of cocoOS with LwIP which is the important issue here.
I will put up more examples later. Get the files here!
2016-08-17: cocoOS release 4.1.0! Get the files here!
- Bug fix: bin semaphore created with init value > 1 was not limited to 1, but to the value specified.
- Removed potential bug generator: OS_WAIT_SEM_NO_SCHEDULE. Task could be hanging here and scheduler is not called!
- Removed semaphore handling for message queue.
- Refactored and improved the message queue implementation.
- Implemented event_last_signaled_get() which returns the latest signaled event.
Terry has written a short guide for using cocoOS on a PIC controller, compiling the source with the XC8 compiler. The guide is in the forum: The cocoOS used in PICmicro MID-RANGE MCU FAMILY
The first donation ($10) to the cocoOS project! Thank you Martin D, who has ported cocoOS to a bare metal Raspberry Pi!
Check out the projects page to learn how to run coocOS in Windows!
cocoOS release 4.0.0! Get the files here!
- Asynchronous message posting and receiving
- When an event timeouts before it is signalled, the signaledByTid member of
the event, will be set to NO_TID. This way the task can find out if the event
was signalled or timed out.
- ISR's can now signal semaphores, but scheduling will not be done until ISR
exits and scheduling is triggered from the running task.
- Added a typedef for address size. Must be defined in order to messaging to
- Message queue semaphore is automatically acquired by the OS. No need for
task to call msg_q_get() and msg_q_give()!
- Did some optimization in the messaging implementation for improved
cocoOS ported to AT91SAM7X. Get the files here!
2013-05-27: Release cocoOS 3.1.0 !
Fixed bug causing tasks beeing suspended forever. Also made the functions for suspending and resuming tasks, take the task id as input parameter instead of a pointer to the task procedure. This is better as two different tasks can share the same task procedure.
Download it here!
2012-03-07: cocoOS support forum is now online! Please make a visit and submit your questions!
2012-01-04: Release cocoOS 3.0.0 !
From now on, cocoOS will be under the BSD license.
- Moving to BSD license.
- Flash saving macros.
- Added os_cbk where sleep function can be implemented.
- Support for sub clocks with settable tick size.
- Timeout for wait event.
- Configurable scheduling: Priority based or Round robin
2011-12-25: Beta release version 3.0.0b6: Added possibility to choose round robin scheduling. Put a #define ROUND_ROBIN line in os_defines.h to enable.
2011-12-19: Beta release version 3.0.0b5: Bugfix. Fixed a problem with the event_wait_timeout() function.
2011-12-17: Beta release version 3.0.0b4. Implemented a timeout for waiting on events: event_wait_timeout(event, timeout).
2011-12-14: Beta release version 3.0.0b3. The sub clocks can be incremented in any step size with os_sub_nTick( uint8_t id, uint16_t nTicks).
2011-12-08: Beta release of cocoOS version 3.0.0b2. Support for any number of clocks. By using task_wait_id(clockID, nTicks) can a task be put to wait for nTicks of the clock with id clockID. The clock is incremented by calling os_sub_tick( clockID ).
2011-05-21: Uploaded clock.c to the download page.
Many users asks about the missing clock setup file. Here it is!
2011-01-17: Release 2.3.0:
Now with support for periodic messages.
2011-01-04: Release 2.2.0:
Support for sending delayed messages. When posting a message, the task can specify a delay before the message will be delivered to the receiving task.
2010-11-18, Release 2.1.0:
Changed implementation of message queues. The queues holds messages, not pointers to messages as in previous implementation. Also the post and receive operation has a cleaner interface. Read more about messages.
2010-11-17: Bugfix 2.0.1 uploaded. Different types was used for an internal state variable at different locations.
2010-11-14: Finally cocoOS 2.0.0 is released!
Version 2.0.0 is a major rework of cocoOS. A complete new API is introduced. Also new with this release is the implementation of message queues.
2010-11-03: cocoOS 2.0.0 b1 uploaded.