Skip to content

Commit c3b0b8a

Browse files
Merge pull request #11 from TimerOverflow/20200115
20200115
2 parents ea94772 + 21306e2 commit c3b0b8a

File tree

2 files changed

+46
-19
lines changed

2 files changed

+46
-19
lines changed

SysEeprom.c

Lines changed: 35 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
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

SysEeprom.h

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,14 @@
99
/*********************************************************************************/
1010
#include "SysTypedef.h"
1111
/*********************************************************************************/
12-
#define SYS_EEPROM_REVISION_DATE 20191001
12+
#define SYS_EEPROM_REVISION_DATE 20200115
1313
/*********************************************************************************/
1414
/** REVISION HISTORY **/
1515
/*
16+
2020. 01. 15. - 실제 Eeprom과의 정상 동작 여부 확인 기능 추가.
17+
Jeong Hyun Gu - CheckEepromError() 함수 추가. 'tag_EepCommonConfig'에서 관리 하는 실제
18+
Eeprom의 정상 동작 여부 확인.
19+
1620
2019. 10. 01. - EraseEepCommonConfigSignature() 함수 추가. InitEepCommonConfig()에서
1721
Jeong Hyun Gu 최초 실행 여부를 확인하는데 사용하는 참조 값 Signature를 지워 다음 실행에서
1822
공장 초기화 실행 가능.
@@ -70,13 +74,15 @@ typedef struct
7074
{
7175
tU8 Init : 1;
7276
tU8 FirstExecute : 1;
77+
tU8 ReadFail : 1;
78+
tU8 WriteFail : 1;
7379
}Bit;
7480

7581
const tU16 LastAddr; // eeprom마지막 주소(크기)
7682
tU16 AllocEepAddr;
7783

78-
tU8 (*EepromWrite)(tU16 Addr, tU8 Data);
79-
tU8 (*EepromRead)(tU16 Addr, tU8 *pData);
84+
tU8 (*HalEepromWrite)(tU16 Addr, tU8 Data);
85+
tU8 (*HalEepromRead)(tU16 Addr, tU8 *pData);
8086
}tag_EepCommonConfig;
8187

8288
typedef struct
@@ -101,10 +107,11 @@ typedef struct
101107
/*********************************************************************************/
102108
/**Function**/
103109

104-
tU8 InitEepCommonConfig(tag_EepCommonConfig *EepConfig, tU16 LastAddr, tU8 (*EepromWrite)(tU16 Addr, tU8 Data), tU8 (*EepromRead)(tU16 Addr, tU8 *pData));
110+
tU8 InitEepCommonConfig(tag_EepCommonConfig *EepConfig, tU16 LastAddr, tU8 (*HalEepromWrite)(tU16 Addr, tU8 Data), tU8 (*HalEepromRead)(tU16 Addr, tU8 *pData));
105111
tU8 InitEepControl(tag_EepControl *Eep, const tU8 *DataBase, tU16 Length, tag_EepCommonConfig *EepConfig);
106112

107113
#define CheckEepromFirstExecuteSignature(Eepconfig) ((Eepconfig)->Bit.FirstExecute)
114+
#define CheckEepromError(Eepconfig) (((Eepconfig)->Bit.ReadFail) || ((Eepconfig)->Bit.WriteFail))
108115
void EraseEepCommonConfigSignature(tag_EepCommonConfig *EepConfig);
109116

110117
void SetEepWriteEnable(tag_EepControl *Eep);

0 commit comments

Comments
 (0)