TinyCTS/AL is a Cooperative Task Scheduler (CTS) in combination with an Abstraction Layer (AL).
It is still under development and this is only a proof of concept up to now.
The following architectures should be supported by TinyCTS:
- Cortex M4, M3, M0
- ARM 7
- Nios II
Some components are already be available and must be revised to fit together. They was
created in the past and forgotten in the digital nirvana :o)
Why TinyCTS? Here Tiny means small in functionality. I have only added the functionality
which I really needed. If you need more functionality, take a look at (in alphabetical order)
If you compare main.c from the EIR and STM3240G example of the TinyCTS only
project you will see the differences of led, interrupt and systick initialisation.
All these differences are now fixed by the abstraction layer (AL). Up to now the following
functionality are provided:
- CPU and CTS initialisation
- UART communication
- CAN communication under development, problems with STM32F103 :o(
- LED support
The core of the cooperative scheduling algorithm was acquired by the Ethernut project.
All other features has been developed from scratch to be able to support the TCP/IP stack
from Ethernut. Up to now the following features are implemented:
- Cooperative scheduling
- Unlimited number of tasks (1)
- Unlimited number of tasks with the same priority (1)
- Round robin scheduling for tasks with the same priority
- Unlimited number of semaphores (1)
- Unlimited number of events (flags) (1)
- Timer and Statistic support
(1) Unlimited is not correct, it depends on the available memory.
In best case it should be possible to use the same application on different CPU
architectures and platforms. At start the application with the abstraction layer,
will output some information over the UART (115200, 8, N, 1):
It is possible to check the runtime stack:
But one of the most useful features is the task info:
Some information about the tasks which are available in the system will be displayed.
Here six tasks are available. Two system tasks, "stat" and "idle"
and four application tasks, "CANTask", "LEDTask",
"Terminal" and "StartTask". The priority, stack size, stack
utilisation and CPU load of each tasks will be displayed too. Furthermore the overall
CPU and IRQ stack utilisation.
Btw, the task info for a web server which is under test by JPerf might look like this:
But this is another story...
This project is still under development. Therefore it is possible that some nasty
I have warned you ;o)
For the compiler CrossWorks for ARM v3.6.2 was used.
tcts-tal-blinky-qsb4088_20161028 CTS/AL example for a Cortex-M4
board (827 KB)
tcts-tal-blinky-ea4088_20161026 CTS/AL example for a Cortex-M4
board (827 KB)
tcts-tal-blinky-stm3240g_20170209 CTS/AL example for a Cortex-M4
board (746 KB)
tcts-tal-blinky-e407_20160428 CTS/AL example for a Cortex-M4
board (742 KB)
tcts-tal-blinky-p405_20160521 CTS/AL example for a Cortex-M4
board (734 KB)
tcts-tal-blinky-ea1788_20161026 CTS/AL example for a Cortex-M3
board (700 KB)
tcts-tal-blinky-samd20xpro_20160616 CTS/AL example for a Cortex-M0+
board (495 KB)
tcts-tal-blinky-samd21xpro_20160617 CTS/AL example for a Cortex-M0+
board (736 KB)
tcts-tal-blinky-eir_20160312 CTS/AL example for an ARM 7
board (172 KB)
Download TinyCTS only
For the compiler CrossWorks for ARM v3.6.2 and Quartus II 11.1sp2 was used.
tcts-blinky-stm3240g_20160312 CTS example for a Cortex-M4
board (161 KB)
tcts-blinky-eir_20160312 CTS example for an ARM 7
board (97 KB)
tcts-blinky-de1_20160312 CTS example for a Nios II
board (317 KB)