Merge branch 'bugfix/freemodbus_fix_critical_sections' into 'release/v3.2'

freemodbus: fix critical sections to semaphore mutex (backport v3.2)

See merge request idf/esp-idf!4435
This commit is contained in:
Angus Gratton 2019-04-16 08:53:23 +08:00
commit e4c1bcddc5
3 changed files with 11 additions and 10 deletions

View file

@ -60,8 +60,11 @@
#define MB_ENTER_CRITICAL(mux) portENTER_CRITICAL(mux)
#define MB_EXIT_CRITICAL(mux) portEXIT_CRITICAL(mux)
#define ENTER_CRITICAL_SECTION( ) ( vMBPortEnterCritical() )
#define EXIT_CRITICAL_SECTION( ) ( vMBPortExitCritical() )
#define ENTER_CRITICAL_SECTION( ) { ESP_LOGD(MB_PORT_TAG,"%s: Port enter critical.", __func__); \
vMBPortEnterCritical(); }
#define EXIT_CRITICAL_SECTION( ) { vMBPortExitCritical(); \
ESP_LOGD(MB_PORT_TAG,"%s: Port exit critical", __func__); }
typedef char BOOL;

View file

@ -32,16 +32,16 @@
#include <stdlib.h>
#include <freertos/FreeRTOS.h>
#include <freertos/task.h>
#include <freertos/semphr.h>
/* ----------------------- Modbus includes ----------------------------------*/
#include "mb.h"
#include "mbport.h"
#include "sys/lock.h"
/* ----------------------- Modbus includes ----------------------------------*/
/* ----------------------- Variables ----------------------------------------*/
static portMUX_TYPE mb_mutex = portMUX_INITIALIZER_UNLOCKED;
static _lock_t s_port_lock;
/* ----------------------- Start implementation -----------------------------*/
@ -52,16 +52,16 @@ bMBPortIsWithinException( void )
return bIsWithinException;
}
void
inline void
vMBPortEnterCritical( void )
{
portENTER_CRITICAL(&mb_mutex);
_lock_acquire(&s_port_lock);
}
void
inline void
vMBPortExitCritical( void )
{
portEXIT_CRITICAL(&mb_mutex);
_lock_release(&s_port_lock);
}
void

View file

@ -74,7 +74,6 @@ static USHORT uiRxBufferPos = 0; // position in the receiver buffer
void vMBPortSerialEnable(BOOL bRxEnable, BOOL bTxEnable)
{
// This function can be called from xMBRTUTransmitFSM() of different task
ENTER_CRITICAL_SECTION();
if (bRxEnable) {
//uart_enable_rx_intr(ucUartNumber);
bRxStateEnabled = TRUE;
@ -88,7 +87,6 @@ void vMBPortSerialEnable(BOOL bRxEnable, BOOL bTxEnable)
} else {
bTxStateEnabled = FALSE;
}
EXIT_CRITICAL_SECTION();
}
static void vMBPortSerialRxPoll(size_t xEventSize)