77#include <string.h>
88#include "SysEeprom.h"
99/*********************************************************************************/
10- #if (SYS_EEPROM_REVISION_DATE != 20191001 )
10+ #if (SYS_EEPROM_REVISION_DATE != 20200115 )
1111#error wrong include file. (SysEeprom.h)
1212#endif
1313/*********************************************************************************/
@@ -19,7 +19,27 @@ static inline tU8 CheckAllOfInit(tag_EepControl *Eep)
1919 return (Eep -> Bit .InitGeneral ) ? true : false;
2020}
2121/*********************************************************************************/
22- tU8 InitEepCommonConfig (tag_EepCommonConfig * EepConfig , tU16 LastAddr , tU8 (* EepromWrite )(tU16 Addr , tU8 Data ), tU8 (* EepromRead )(tU16 Addr , tU8 * pData ))
22+ static void EepWrite (tag_EepCommonConfig * EepConfig , tU16 Addr , tU8 Data )
23+ {
24+ tU8 Cnt = 0 ;
25+
26+ while (EepConfig -> HalEepromWrite (Addr , Data ) == false)
27+ {
28+ if (++ Cnt >= 5 ){ EepConfig -> Bit .WriteFail = true; return ; }
29+ }
30+ }
31+ /*********************************************************************************/
32+ static void EepRead (tag_EepCommonConfig * EepConfig , tU16 Addr , tU8 * Data )
33+ {
34+ tU8 Cnt = 0 ;
35+
36+ while (EepConfig -> HalEepromRead (Addr , Data ) == false)
37+ {
38+ if (++ Cnt >= 5 ){ EepConfig -> Bit .ReadFail = true; return ; }
39+ }
40+ }
41+ /*********************************************************************************/
42+ tU8 InitEepCommonConfig (tag_EepCommonConfig * EepConfig , tU16 LastAddr , tU8 (* HalEepromWrite )(tU16 Addr , tU8 Data ), tU8 (* HalEepromRead )(tU16 Addr , tU8 * pData ))
2343{
2444 tU16 * pLastAddr = (tU16 * ) & EepConfig -> LastAddr ;
2545 static tag_EepControl EepSignature = { .Bit .InitGeneral = false };
@@ -28,8 +48,8 @@ tU8 InitEepCommonConfig(tag_EepCommonConfig *EepConfig, tU16 LastAddr, tU8 (*Eep
2848 /*
2949 1) 인수
3050 - EepConfig : EepConfig 인스턴스의 주소
31- - EepromWrite : 사용자가 구현한 EepromWrite 함수 포인터 주소
32- - EepromRead : 사용자가 구현한 EepromRead 함수 포인터 주소
51+ - HalEepromWrite : 사용자가 구현한 HalEepromWrite 함수 포인터 주소
52+ - HalEepromRead : 사용자가 구현한 HalEepromRead 함수 포인터 주소
3353
3454 2) 반환
3555 - 초기화 성공 여부
@@ -40,8 +60,8 @@ tU8 InitEepCommonConfig(tag_EepCommonConfig *EepConfig, tU16 LastAddr, tU8 (*Eep
4060 */
4161
4262 * pLastAddr = LastAddr ;
43- EepConfig -> EepromWrite = EepromWrite ;
44- EepConfig -> EepromRead = EepromRead ;
63+ EepConfig -> HalEepromWrite = HalEepromWrite ;
64+ EepConfig -> HalEepromRead = HalEepromRead ;
4565 EepConfig -> AllocEepAddr = 0 ;
4666 EepConfig -> Bit .Init = true;
4767
@@ -130,15 +150,15 @@ void DoEepReadControl(tag_EepControl *Eep)
130150 - 해당 인스턴스의 eeprom으로 부터 데이터를 읽어와 대상 버퍼에 값을 대입.
131151 */
132152
133- if (Eep -> Bit .InitComplete == false)
153+ if (( Eep -> Bit .InitComplete == false) || ( Eep -> Config -> Bit . ReadFail == true) || ( Eep -> Config -> Bit . WriteFail == true) )
134154 {
135155 return ;
136156 /* error or disabled */
137157 }
138158
139159 do
140160 {
141- Eep -> Config -> EepromRead ( Eep -> EepBase + (Index ), & Data );
161+ EepRead (( tag_EepCommonConfig * ) Eep -> Config , Eep -> EepBase + (Index ), & Data );
142162 pDataBase [Index ] = Data ;
143163 }while (++ Index < Eep -> Length );
144164}
@@ -164,18 +184,18 @@ tU8 DoEepWriteControl(tag_EepControl *Eep)
164184 - 값이 유효하여 쓰기를 진행하거나 해당영역의 마지막에 도달할 경우에만 while loop를 탈출한다.
165185 */
166186
167- if ((Eep -> Bit .InitComplete == false) || (Eep -> Bit .Write == false))
187+ if ((Eep -> Bit .InitComplete == false) || (Eep -> Config -> Bit . ReadFail == true) || ( Eep -> Config -> Bit . WriteFail == true) || ( Eep -> Bit .Write == false))
168188 {
169189 return false;
170190 /* error or disabled */
171191 }
172192
173193 while (true)
174194 {
175- Eep -> Config -> EepromRead ( Eep -> EepBase + (* pIndex ), & Data );
195+ EepRead (( tag_EepCommonConfig * ) Eep -> Config , Eep -> EepBase + (* pIndex ), & Data );
176196 if (Data != Eep -> DataBase [* pIndex ])
177197 {
178- Eep -> Config -> EepromWrite ( Eep -> EepBase + (* pIndex ), Eep -> DataBase [* pIndex ]);
198+ EepWrite (( tag_EepCommonConfig * ) Eep -> Config , Eep -> EepBase + (* pIndex ), Eep -> DataBase [* pIndex ]);
179199 return true;
180200 /* check valid data */
181201 }
@@ -231,14 +251,14 @@ void EraseEepCommonConfigSignature(tag_EepCommonConfig *EepConfig)
231251 - 본 함수 실행 후
232252 */
233253
234- if (EepConfig -> Bit .Init == false)
254+ if (( EepConfig -> Bit .Init == false) || ( EepConfig -> Bit . ReadFail == true) || ( EepConfig -> Bit . WriteFail == true) )
235255 {
236256 return ;
237257 }
238258
239- EepConfig -> EepromWrite ( 0 , 0 );
240- EepConfig -> EepromWrite ( 1 , 0 );
241- EepConfig -> EepromWrite ( 2 , 0 );
259+ EepWrite ( EepConfig , 0 , 0 );
260+ EepWrite ( EepConfig , 1 , 0 );
261+ EepWrite ( EepConfig , 2 , 0 );
242262}
243263/*********************************************************************************/
244264
0 commit comments