HW: nrf52840
SW: nRF5_SDK_15.2.0_9412b96
source code: blinky_rtc_freertos example
Q1:
I read freeRTOS xtaskcreate operation on the web, it seem that I just need to call xtaskcreate function and link to a function and it should able to switching between multiple task with the right priority been set. But I notice when RTC function in the blinky_rtc_freertos example is removed the task will stop switching.
Expected xtaskcreate coding that is not working.
/**
* @brief Reference to LED0 toggling FreeRTOS task.
*/
static TaskHandle_t m_led_toggle_task_handle;
/**
* @brief Reference to LED0 toggling FreeRTOS task.
*/
static TaskHandle_t m_led_toggle_task_handle2;
static void led_toggle_task_function (void * pvParameter)
{
ret_code_t err_code;
UNUSED_PARAMETER(pvParameter);
while (true)
{
bsp_board_led_invert(BSP_BOARD_LED_0);
/* Wait for the event from the RTC */
UNUSED_RETURN_VALUE(xSemaphoreTake(m_led_semaphore, portMAX_DELAY));
}
/* Tasks must be implemented to never return... */
}
static void led_toggle_task_function2 (void * pvParameter)
{
UNUSED_PARAMETER(pvParameter);
while (true)
{
bsp_board_led_invert(BSP_BOARD_LED_2);
/* Wait for the event from the RTC */
UNUSED_RETURN_VALUE(xSemaphoreTake(m_led_semaphore, portMAX_DELAY));
}
/* Tasks must be implemented to never return... */
}
int main(void)
{
m_led_semaphore = xSemaphoreCreateBinary();
ASSERT(NULL != m_led_semaphore);
/* Create task for LED0 blinking with priority set to 2 */
UNUSED_VARIABLE(xTaskCreate(led_toggle_task_function, "LED0", configMINIMAL_STACK_SIZE + 200, NULL, 2, &m_led_toggle_task_handle));
/* Create task for LED0 blinking with priority set to 2 */
UNUSED_VARIABLE(xTaskCreate(led_toggle_task_function2, "LED1", configMINIMAL_STACK_SIZE + 200, NULL, 3, &m_led_toggle_task_handle2));
}
Q2:
I still not very clear with how softdevices <> FreeRTOS interact and how do RTC vs systick and how RTC or systick can influence the task scheduling. As I know RTC can still operate when the device in deep sleep which I can use RTC interrupt to wake the device from Tickless idle mode but I not sure how nordic softdevices + FreeRTOS works.