99#include "AvrModbus.h"
1010#include "crc16.h"
1111/*********************************************************************************/
12- #if (AVR_MODBUS_REVISION_DATE != 20201020 )
12+ #if (AVR_MODBUS_REVISION_DATE != 20210318 )
1313#error wrong include file. (AvrModbus.h)
1414#endif
1515/*********************************************************************************/
@@ -723,6 +723,7 @@ static void MasterReceive(tag_AvrModbusMasterCtrl *Master)
723723/*********************************************************************************/
724724tU8 AvrModbusMasterGeneralInit (tag_AvrModbusMasterCtrl * Master , tag_AvrUartCtrl * Uart , tU8 MaxSlave , tU32 MasterProcTick_us )
725725{
726+ tU8 i ;
726727 /*
727728 1) 인수
728729 - Master : tag_AvrModbusMasterCtrl 인스턴스의 주소.
@@ -738,21 +739,39 @@ tU8 AvrModbusMasterGeneralInit(tag_AvrModbusMasterCtrl *Master, tag_AvrUartCtrl
738739 - Master와 관련된 필수 정보들을 초기화 함.
739740 - 본 함수를 호출하기전 Uart는 선행적으로 초기화가 완료 되어 있어야 함.
740741 */
741-
742- if (Uart -> Bit .InitComplete == true)
742+
743+ if (( Uart == null ) || ( Uart -> Bit .InitComplete != true) )
743744 {
744- Master -> Uart = Uart ;
745+ return false ;
745746 }
747+ //Uart 초기화 여부 검사
746748
747749 Master -> SlaveArray = (tag_AvrModbusMasterSlaveInfo * ) calloc (MaxSlave , sizeof (tag_AvrModbusMasterSlaveInfo ));
750+ if (Master -> SlaveArray == null )
751+ {
752+ return false;
753+ }
754+ //tag_AvrModbusMasterSlaveInfo 동적할당
755+
756+ for (i = 0 ; i < MaxSlave ; i ++ )
757+ {
758+ Master -> SlaveArray [i ].PollData = (tag_AvrModbusMasterSlavePollData * ) calloc (1 , sizeof (tag_AvrModbusMasterSlavePollData ));
759+ if (Master -> SlaveArray [i ].PollData == null )
760+ {
761+ return false;
762+ }
763+ }
764+ //tag_AvrModbusMasterSlavePollData 동적 할당
765+
766+ Master -> Uart = Uart ;
748767 Master -> MaxSlave = MaxSlave ;
749768 Master -> Status = AVR_MODBUS_ReadHolding ;
750769 Master -> Tick_us = MasterProcTick_us ;
751770 Master -> Uart -> ReceivingDelay = AVR_MODBUS_RECEIVING_DELAY_US / Master -> Tick_us ;
752771 Master -> PollDelay = AVR_MODBUS_DEFAULT_POLLING_DELAY_US / Master -> Tick_us ;
753772 if (Master -> Uart -> ReceivingDelay < 2 ) Master -> Uart -> ReceivingDelay = 2 ;
754773
755- Master -> Bit .InitGeneral = (( Master -> Uart == null ) || ( Master -> SlaveArray == null )) ? false : true;
774+ Master -> Bit .InitGeneral = true;
756775 Master -> Bit .InitComplete = CheckAllOfMasterInit (Master );
757776
758777 return Master -> Bit .InitGeneral ;
@@ -821,26 +840,17 @@ tU8 AvrModbusMasterAddSlave(tag_AvrModbusMasterCtrl *Master, tU8 Id, enum_AvrMod
821840 {
822841 if (Master -> SlaveArray [i ].Id == 0 )
823842 {
824- Master -> SlaveArray [i ].PollData = (tag_AvrModbusMasterSlavePollData * ) calloc (1 , sizeof (tag_AvrModbusMasterSlavePollData ));
825- if (Master -> SlaveArray [i ].PollData == null )
826- {
827- Master -> Bit .PollDataAllocFail = true;
828- break ;
829- }
830- else
831- {
832- Master -> SlaveArray [i ].Id = Id ;
833- Master -> SlaveArray [i ].NoResponseCnt = 0 ;
834- Master -> SlaveArray [i ].NoResponseLimit = AVR_MODBUS_DEFAULT_SLAVE_NO_RESPONSE ;
835- Master -> SlaveArray [i ].PollDataMax = 1 ;
836- Master -> SlaveArray [i ].PollData [0 ].PollFunction = PollFunction ;
837- Master -> SlaveArray [i ].PollData [0 ].StartAddr = StartAddr ;
838- Master -> SlaveArray [i ].PollData [0 ].NumberOfRegister = NumberOfRegister ;
839- Master -> SlaveArray [i ].PollData [0 ].BaseAddr = BaseAddr ;
840- Master -> SlavePoll = & Master -> SlaveArray [i ];
841- Master -> AddedSlave ++ ;
842- return true;
843- }
843+ Master -> SlaveArray [i ].Id = Id ;
844+ Master -> SlaveArray [i ].NoResponseCnt = 0 ;
845+ Master -> SlaveArray [i ].NoResponseLimit = AVR_MODBUS_DEFAULT_SLAVE_NO_RESPONSE ;
846+ Master -> SlaveArray [i ].PollDataMax = 1 ;
847+ Master -> SlaveArray [i ].PollData [0 ].PollFunction = PollFunction ;
848+ Master -> SlaveArray [i ].PollData [0 ].StartAddr = StartAddr ;
849+ Master -> SlaveArray [i ].PollData [0 ].NumberOfRegister = NumberOfRegister ;
850+ Master -> SlaveArray [i ].PollData [0 ].BaseAddr = BaseAddr ;
851+ Master -> SlavePoll = & Master -> SlaveArray [i ];
852+ Master -> AddedSlave ++ ;
853+ return true;
844854 }
845855 }
846856
0 commit comments