tree bd67026f1c00738e71100d661de189d27880220a
parent e4e4fb01a19fa9bff3bec4b398c860aa92110c2e
author RichardBarry <3073890+RichardBarry@users.noreply.github.com> 1590607728 -0700
committer GitHub <noreply@github.com> 1590607728 -0700
gpgsig -----BEGIN PGP SIGNATURE-----
 
 wsBcBAABCAAQBQJezr9wCRBK7hj4Ov3rIwAAdHIIAA2kvH1ZtdpGrxc404yb6RqQ
 R+YJV7Xw71stEfUmqwmByMqZx9F16TIHMp9tM1z4IV1ao2Pg3/MEQKp0b36ap3tv
 f/qfVWfZVwW8/yFVeuNBfthucRKUMLAT+WIUYiLP+bQAW8AcOlcREz0mVEWkwyaC
 PJ+Dvb8PC5AANwL8mvpfMwXWbmxX9gIecIgsXzRQ0qOZHqGOXRhiUIkrhQ/PXVvK
 biMSXxl28A/YUwUKufcJZo74ncIvNGZYlk9jo9X9p4IIYrIPURJ/kCaDWKp8hC5K
 1FwfxmXVz/Ik5Vhi+rtsxcoeYdWLhsZtGFHJpJShg7SojNC5JRVb9y+26jbQDVk=
 =2bos
 -----END PGP SIGNATURE-----
 

Feature/multiple direct to task notifications (#63)

Description
Before this change each task had a single direct to task notification value and state as described here: https://www.FreeRTOS.org/RTOS-task-notifications.html. After this change each task has an array of task notifications, so more than one task notification value and state per task. The new FreeRTOSConfig.h compile time constant configTASK_NOTIFICATION_ARRAY_ENTRIES sets the number of indexes in the array.

Each notification within the array operates independently - a task can only block on one notification within the array at a time and will not be unblocked by a notification sent to any other array index.

Task notifications were introduced as a light weight method for peripheral drivers to pass data and events to tasks without the need for an intermediary object such as a semaphore - for example, to unblock a task from an ISR when the operation of a peripheral completed. That use case only requires a single notification value. Their popularity and resultant expanded use cases have since made the single value a limitation - especially as FreeRTOS stream and message buffers themselves use the notification mechanism. This change resolves that limitation. Stream and message buffers still use the task notification at array index 0, but now application writers can avoid any conflict that might have with their own use of task notifications by using notifications at array indexes other than 0.

The pre-existing task notification API functions work in a backward compatible way by always using the task notification at array index 0. For each such function there is now an equivalent that is postfixed "Indexed" and takes an additional parameter to specify which index within the array it should operate upon. For example, xTaskNotify() is the original that only operates on array index 0. xTaskNotifyIndexed() is the new function that can operate on any array index.

Test Steps
The update is tested using the Win32 demo (PR to be created in the FreeRTOS/FreeRTOS github repo), which has been updated to build and run a new test file FreeRTOS/Demo/Common/Minimal/TaskNotifyArray.c. The tests in that file are in addition to, not a replacement for those in FreeRTOS/Demo/Common/Minimal/TaskNotify.c.

By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.