I have been writing a bunch of articles about implementing PSoC FreeRTOS so, this morning I was reading the FreeRTOS manual (yes I am one of those…) and I noticed a section in the API guide that I hadn’t see before… Task Notifications. Every task in the FreeRTOS has a built in 32-bit integer notification value. This value is super light weight and can be used like a task specific counting semaphore, or a signaling bit mask, or binary semaphore. The API includes:
It seems like this API is good for the situations when your Semaphore has a specific task target in mind. I thought that this would be a perfect scheme to have a PSoC FreeRTOS UART ISR signal the UART Handling task that there is data available to do something with.
Setup the PSoC FreeRTOS Project
I start this process by making a copy of “1-BlinkingLED” (which already has all of the FreeRTOS stuff in it) and naming it “9-TaskNotify”. Then I add a UART to the schematic and name it “UART”
I attach the UART to the right pins on the CY8CKIT-044 kit.
PSoC FreeRTOS UART Code
Now that the schematic is all configured I update my firmware. The function “uartHandler” is called when there is data in the UART RX FIFO. It turns of the interrupts for the UART (which I will turn back on after I have cleared the data in the input buffer), clears the interrupt (so that it will stop pending) and then sends the notification to the UART_Task.
The UART Task just registers the handler… then while(1)’s until the end of time. It waits for a notification, then reads data out of the RX fifo and puts out, then re-enables the interrupts.
// disable the interrupt
portYIELD_FROM_ISR( xHigherPriorityTaskWoken );
void UART_Task( void *arg)
c = UART_UartGetChar();
// clear & re-enable the interrupt
FreeRTOS: A PSoC4 FreeRTOS Port
An introduction to making FreeRTOS work on PSoC 4
FreeRTOS PSoC Examples
Using multiple tasks in FreeRTOS
FreeRTOS Queue Example
Using a queue to communicate between tasks
PSoC 6 FreeRTOS - The First Example
Booting FreeRTOS on PSoC 6
FreeRTOS Binary Semaphore
An first example of a binary semaphore
FreeRTOS Binary Semaphore (Part 2)
Removing polling in the UART Task
FreeRTOS Counting Semaphore
An example using a counting semaphore
Reading I2C Sensors with a shared I2C Bus
PSoC FreeRTOS Task Notify
A light weight scheme to replace Semaphores
PSoC FreeRTOS Task Notification Values
A very light weight method to transfer one word of information into a task