From c3f66f060189a40dbd5dd65efe381045ed099256 Mon Sep 17 00:00:00 2001 From: Tobias Antonsson Date: Wed, 2 Sep 2015 14:25:20 +0200 Subject: [PATCH] Fixed syslink priority issue causing corrupt syslink packages. --- config/FreeRTOSConfig.h | 2 +- config/config.h | 2 +- drivers/src/uart_syslink.c | 8 +++++++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/config/FreeRTOSConfig.h b/config/FreeRTOSConfig.h index 985fb8a960..6ef9965c10 100644 --- a/config/FreeRTOSConfig.h +++ b/config/FreeRTOSConfig.h @@ -87,7 +87,7 @@ #define configUSE_MALLOC_FAILED_HOOK 1 #define configTIMER_TASK_STACK_DEPTH configMINIMAL_STACK_SIZE -#define configMAX_PRIORITIES ( ( unsigned portBASE_TYPE ) 5 ) +#define configMAX_PRIORITIES ( ( unsigned portBASE_TYPE ) 6 ) #define configMAX_CO_ROUTINE_PRIORITIES ( 2 ) /* Set the following definitions to 1 to include the API function, or zero diff --git a/config/config.h b/config/config.h index c07bf3c138..02b3dd16a4 100644 --- a/config/config.h +++ b/config/config.h @@ -74,7 +74,7 @@ #define MEM_TASK_PRI 1 #define PARAM_TASK_PRI 1 #define STABILIZER_TASK_PRI 4 -#define SYSLINK_TASK_PRI 3 +#define SYSLINK_TASK_PRI 5 #define USBLINK_TASK_PRI 3 #define PROXIMITY_TASK_PRI 0 //CF1 diff --git a/drivers/src/uart_syslink.c b/drivers/src/uart_syslink.c index ce0d92e658..bda3a79eaf 100644 --- a/drivers/src/uart_syslink.c +++ b/drivers/src/uart_syslink.c @@ -322,13 +322,19 @@ void uartIsr(void) xHigherPriorityTaskWoken = pdFALSE; xSemaphoreGiveFromISR(waitUntilSendDone, &xHigherPriorityTaskWoken); } + USART_ClearITPendingBit(UART_TYPE, USART_IT_TXE); } - USART_ClearITPendingBit(UART_TYPE, USART_IT_TXE); if (USART_GetITStatus(UART_TYPE, USART_IT_RXNE)) { + // Note: UART interrupt pending bit cleared by reading DR rxDataInterrupt = USART_ReceiveData(UART_TYPE) & 0x00FF; xQueueSendFromISR(uartDataDelivery, &rxDataInterrupt, &xHigherPriorityTaskWoken); } + + if (xHigherPriorityTaskWoken) + { + vPortYieldFromISR(); + } } void uartTxenFlowctrlIsr()