Concept Flow - xTaskNotifyGive() as lightweight semaphore
Task A: Calls xTaskNotifyGive(TaskB)
Task B: Waits on ulTaskNotifyTake()
Notification count increments
Task B unblocks and continues
Task B processes resource
Task B loops back to wait for next notification
Task A sends a notification to Task B using xTaskNotifyGive(), incrementing a count. Task B waits with ulTaskNotifyTake() and unblocks when notified, acting like a lightweight semaphore.