release 0.4 (*API CHANGED)
*Не совсем апи, но поменялись enum в modbus_core.h: - MB_ExceptionTypeDef - MB_FunctonTypeDef Необходимо обновить modbus_data.c: NO_ERRORS -> NO_ERRORS ILLEGAL_FUNCTION -> ET_ILLEGAL_FUNCTION ILLEGAL_DATA_ADDRESS -> ET_ILLEGAL_DATA_ADDRESS ILLEGAL_DATA_ADDRESS -> ET_ILLEGAL_DATA_ADDRESS - множественные правки докумнтации - множественный рефакторинг
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
*******************************************************************************
|
||||
* @file rs_message.c
|
||||
* @brief Реализация протоколов обмена по RS/UART
|
||||
******************************************************************************
|
||||
*******************************************************************************
|
||||
* @details
|
||||
Модуль реализует асинхронный обмен сообщениями через UART с использованием:
|
||||
- Прерываний по приему/передаче
|
||||
@@ -10,7 +10,7 @@
|
||||
- Таймаутов через таймер
|
||||
- Двухстадийного приема (заголовок + данные)
|
||||
|
||||
@section Архитектура:
|
||||
@section arch Архитектура:
|
||||
В режиме слейв:
|
||||
- Инициализация приема с сообщения с максимальным размером MSG_SIZE_MAX
|
||||
- При срабатывании прерывания IDLE - обработка полученного сообщения
|
||||
@@ -18,7 +18,7 @@
|
||||
- Отправка запроса и переход в режим приема сообщения с максимальным размером MSG_SIZE_MAX
|
||||
- При срабатывании прерывания IDLE - обработка полученного ответа
|
||||
|
||||
@section Необходимые обработчики:
|
||||
@section ithandler Необходимые обработчики:
|
||||
- RS_UART_Handler() в UARTx_IRQHandler вместо HAL_UART_IRQHandler()
|
||||
- RS_TIM_Handler() в TIMx_IRQHandler вместо HAL_TIM_IRQHandler()
|
||||
******************************************************************************/
|
||||
@@ -323,6 +323,7 @@ void RS_UART_Handler(RS_HandleTypeDef *hRS)
|
||||
{
|
||||
return;
|
||||
}
|
||||
RS_UART_Handler_ENTER();
|
||||
//-------------CHECK IDLE FLAG FIRST-------------
|
||||
/* Проверяем флаг IDLE в первую очередь - это гарантирует обработку только после idle */
|
||||
if(__HAL_UART_GET_FLAG(hRS->huart, UART_FLAG_IDLE) && __HAL_UART_GET_IT_SOURCE(hRS->huart, UART_IT_IDLE))
|
||||
@@ -362,10 +363,10 @@ void RS_UART_Handler(RS_HandleTypeDef *hRS)
|
||||
}
|
||||
else
|
||||
{
|
||||
RS_Set_Free(hRS); // освобожднаем RS
|
||||
if(hRS->pCallback)
|
||||
{
|
||||
hRS->pCallback(hRS, hRS->pMessagePtr); // обрабатываем ответ
|
||||
RS_Set_Free(hRS); // освобожднаем RS
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -419,6 +420,7 @@ void RS_UART_Handler(RS_HandleTypeDef *hRS)
|
||||
|
||||
// later, maybe, will be added specific handlers for err
|
||||
}
|
||||
RS_UART_Handler_EXIT();
|
||||
}
|
||||
|
||||
|
||||
@@ -434,10 +436,11 @@ void RS_TIM_Handler(RS_HandleTypeDef *hRS)
|
||||
{
|
||||
return;
|
||||
}
|
||||
RS_TIM_Handler_ENTER();
|
||||
|
||||
HAL_TIM_IRQHandler(hRS->htim);
|
||||
|
||||
RS_Abort(hRS, ABORT_RS);
|
||||
|
||||
|
||||
hRS->RS_STATUS = RS_TIMEOUT;
|
||||
|
||||
@@ -447,15 +450,16 @@ void RS_TIM_Handler(RS_HandleTypeDef *hRS)
|
||||
|
||||
if(hRS->sRS_Mode >= RS_MASTER_MODE_START)
|
||||
{ // Мастер: коллбек и освобождение для нового запроса
|
||||
RS_Set_Free(hRS);
|
||||
if(hRS->pCallback)
|
||||
{
|
||||
hRS->pCallback(hRS, hRS->pMessagePtr); // обрабатываем ответ
|
||||
}
|
||||
RS_Set_Free(hRS);
|
||||
} else {
|
||||
// Слейв: перезапускаем прием
|
||||
RS_Handle_Receive_Start(hRS, hRS->pMessagePtr);
|
||||
}
|
||||
RS_TIM_Handler_EXIT();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user