extern FreezeFrameRecType* FreezeFrameMirrorBuffer[];\r
static ExtDataRecType priMemExtDataBuffer[DEM_MAX_NUMBER_EXT_DATA_PRI_MEM] __attribute__ ((section (".dem_eventmemory_pri")));\r
AgingRecType priMemAgingBuffer[DEM_MAX_NUMBER_AGING_PRI_MEM] __attribute__ ((section (".dem_eventmemory_pri")));\r
-AgingRecType AgingMirrorBuffer[DEM_MAX_NUMBER_AGING_PRI_MEM] __attribute__ ((section (".dem_eventmemory_pri")));\r
+AgingRecType AgingMirrorBuffer[DEM_MAX_NUMBER_AGING_PRI_MEM] __attribute__ ((section (".")));\r
+\r
+/* block in NVRam, use for freezeframe */\r
+extern const NvM_BlockIdType FreezeFrameBlockId[DEM_MAX_NUMBER_FF_DATA_PRI_MEM];\r
+/* block in NVRam, use for aging */\r
+extern const NvM_BlockIdType AgingBlockId;\r
+\r
+\r
/*\r
*Allocation of freezeFrame storage timestamp,record the time order\r
*/\r
* Procedure: storeAgingRecPerMem\r
* Description: store aging records in NVRam\r
*/\r
-static void storeAgingRecPerMem(const Dem_NvramBlockIdType *AgingBlockIdPtr)\r
+static void storeAgingRecPerMem(const NvM_BlockIdType AgingBlockId)\r
{\r
NvM_RequestResultType requestResult = NVM_REQ_OK;\r
imask_t state;\r
\r
Irq_Save(state);\r
\r
- if (AgingBlockIdPtr->BlockDescriptor != NULL){\r
+ if (AgingBlockId != 0){\r
/* check the status,whether it's busy or not? */\r
- NvM_GetErrorStatus(AgingBlockIdPtr->BlockDescriptor->NvramBlockIdentifier,&requestResult);\r
+ NvM_GetErrorStatus(AgingBlockId, &requestResult);\r
/* if writing is not busy,copy priMemFreezeFrameBuffer to NVRam permanent RAM*/\r
if (requestResult != NVM_REQ_PENDING){\r
memcpy(AgingMirrorBuffer, priMemAgingBuffer, sizeof(priMemAgingBuffer));\r
- (void)NvM_WriteBlock(AgingBlockIdPtr->BlockDescriptor->NvramBlockIdentifier, (const uint8 *)AgingMirrorBuffer);\r
+ (void)NvM_WriteBlock(AgingBlockId, (const uint8 *)AgingMirrorBuffer);\r
AgingIsModified = FALSE; \r
}\r
else{\r
* Description: Store the freeze frame data in NVRam\r
* \r
*/\r
-static void storeFreezeFrameDataPerMem(const Dem_NvramBlockIdType *FFBlockIdPtr)\r
+static void storeFreezeFrameDataPerMem()\r
{\r
NvM_RequestResultType requestResult = NVM_REQ_OK;\r
uint16 i = 0;\r
\r
for(i = 0; i < DEM_MAX_NUMBER_FF_DATA_PRI_MEM; i++){\r
if(memcmp(&priMemFreezeFrameBuffer[i], FreezeFrameMirrorBuffer[i], sizeof(FreezeFrameRecType))){\r
- if(FFBlockIdPtr->BlockDescriptor != NULL){\r
- NvM_GetErrorStatus(FFBlockIdPtr->BlockDescriptor->NvramBlockIdentifier,&requestResult);\r
+ if(FreezeFrameBlockId[i] != 0){\r
+ NvM_GetErrorStatus(FreezeFrameBlockId[i], &requestResult);\r
\r
if(requestResult != NVM_REQ_PENDING ){\r
memcpy(FreezeFrameMirrorBuffer[i], &priMemFreezeFrameBuffer[i], sizeof(FreezeFrameRecType));\r
- (void)NvM_WriteBlock(FFBlockIdPtr->BlockDescriptor->NvramBlockIdentifier, (const uint8 *)(FreezeFrameMirrorBuffer[i]));\r
+ (void)NvM_WriteBlock(FreezeFrameBlockId[i], (const uint8 *)(FreezeFrameMirrorBuffer[i]));\r
FFIsModifiedLocal = FALSE;\r
}\r
else{\r
//TODO:report error or doing nothing,assume that doing nothing\r
}\r
}\r
- FFBlockIdPtr++;\r
}\r
\r
Irq_Restore(state);\r
* Description: delete the freeze frame data in event memory according to\r
* "FFBlockId" destination option,it must be used after deleteFreezeFrameDataPriMem()\r
*/\r
-static void deleteFreezeFrameDataPerMem(const Dem_NvramBlockIdType *FFBlockIdPtr)\r
+static void deleteFreezeFrameDataPerMem()\r
{\r
NvM_RequestResultType requestResult = NVM_REQ_OK;\r
uint16 i = 0;\r
\r
for(i = 0; i < DEM_MAX_NUMBER_FF_DATA_PRI_MEM; i++){\r
if(memcmp(&priMemFreezeFrameBuffer[i], FreezeFrameMirrorBuffer[i], sizeof(FreezeFrameRecType))){\r
- if(FFBlockIdPtr->BlockDescriptor != NULL){\r
- NvM_GetErrorStatus(FFBlockIdPtr->BlockDescriptor->NvramBlockIdentifier,&requestResult);\r
+ if(FreezeFrameBlockId[i] != 0){\r
+ NvM_GetErrorStatus(FreezeFrameBlockId[i], &requestResult);\r
if(requestResult != NVM_REQ_PENDING){\r
memcpy(FreezeFrameMirrorBuffer[i], &priMemFreezeFrameBuffer[i], sizeof(FreezeFrameRecType));\r
- (void)NvM_WriteBlock(FFBlockIdPtr->BlockDescriptor->NvramBlockIdentifier, (const uint8 *)(FreezeFrameMirrorBuffer[i]));\r
+ (void)NvM_WriteBlock(FreezeFrameBlockId[i], (const uint8 *)(FreezeFrameMirrorBuffer[i]));\r
FFIsModifiedLocal = FALSE;\r
}\r
else{\r
//TODO:report error or doing nothing,assume that doing nothing\r
}\r
}\r
- FFBlockIdPtr++;\r
\r
}\r
\r
{\r
case DEM_DTC_ORIGIN_PRIMARY_MEMORY:\r
storeFreezeFrameDataPriMem(eventParam, freezeFrame);\r
- storeFreezeFrameDataPerMem(FreezeFrameBlockId);\r
+ storeFreezeFrameDataPerMem();\r
break;\r
\r
case DEM_DTC_ORIGIN_PERMANENT_MEMORY:\r
deleteEventPriMem(eventParam);\r
deleteFreezeFrameDataPriMem(eventParam);\r
deleteExtendedDataPriMem(eventParam);\r
- deleteFreezeFrameDataPerMem(FreezeFrameBlockId);\r
+ deleteFreezeFrameDataPerMem();\r
break;\r
\r
case DEM_DTC_ORIGIN_PERMANENT_MEMORY:\r
} else {\r
\r
for(i = 0; i < DEM_MAX_NUMBER_FF_DATA_PRI_MEM; i++){\r
- if(FreezeFrameBlockId[i].BlockDescriptor != NULL){\r
- NvM_GetErrorStatus(FreezeFrameBlockId[i].BlockDescriptor->NvramBlockIdentifier,&requestResult);\r
+ if(FreezeFrameBlockId[i] != 0){\r
+ NvM_GetErrorStatus(FreezeFrameBlockId[i], &requestResult);\r
if(requestResult != NVM_REQ_PENDING){\r
memcpy(&priMemFreezeFrameBuffer[i], FreezeFrameMirrorBuffer[i], sizeof(FreezeFrameRecType));\r
}\r
}\r
}\r
//recover Aging from NVRam to RAM\r
- if(AgingBlockId.BlockDescriptor != NULL)\r
+ if(AgingBlockId != 0)\r
{\r
//check the status\r
- NvM_GetErrorStatus(AgingBlockId.BlockDescriptor->NvramBlockIdentifier,&requestResult);\r
+ NvM_GetErrorStatus(AgingBlockId,&requestResult);\r
\r
//recover Aging from NVRam to RAM\r
- if(AgingBlockId.BlockDescriptor != NULL){//check the status\r
- NvM_GetErrorStatus(AgingBlockId.BlockDescriptor->NvramBlockIdentifier, &requestResult);\r
+ if(AgingBlockId != 0){//check the status\r
+ NvM_GetErrorStatus(AgingBlockId, &requestResult);\r
\r
//judge whether NVM is busy\r
if(!(requestResult & NVM_REQ_PENDING)){\r
memset(&priMemAgingBuffer[i], 0, sizeof(AgingRecType));\r
AgingIsModified = TRUE;\r
}\r
+ }\r
\r
- // Validate event records stored in primary memory\r
- for (i = 0; i < DEM_MAX_NUMBER_EVENT_PRI_MEM; i++) {\r
- cSum = calcChecksum(&priMemEventBuffer[i], sizeof(EventRecType)-sizeof(ChecksumType));\r
- if ((cSum != priMemEventBuffer[i].checksum) || (priMemEventBuffer[i].eventId == DEM_EVENT_ID_NULL)) {\r
- // Unlegal record, clear the record\r
- memset(&priMemEventBuffer[i], 0, sizeof(EventRecType));\r
- }\r
- else {\r
- // Valid, update current status\r
- mergeEventStatusRec(&priMemEventBuffer[i]);\r
+ // Validate event records stored in primary memory\r
+ for (i = 0; i < DEM_MAX_NUMBER_EVENT_PRI_MEM; i++) {\r
+ cSum = calcChecksum(&priMemEventBuffer[i], sizeof(EventRecType)-sizeof(ChecksumType));\r
+ if ((cSum != priMemEventBuffer[i].checksum) || (priMemEventBuffer[i].eventId == DEM_EVENT_ID_NULL)) {\r
+ // Unlegal record, clear the record\r
+ memset(&priMemEventBuffer[i], 0, sizeof(EventRecType));\r
+ }\r
+ else {\r
+ // Valid, update current status\r
+ mergeEventStatusRec(&priMemEventBuffer[i]);\r
\r
- // Update occurrence counter on pre init stored freeze frames\r
- updateFreezeFrameOccurrencePreInit(&priMemEventBuffer[i]);\r
- }\r
+ // Update occurrence counter on pre init stored freeze frames\r
+ updateFreezeFrameOccurrencePreInit(&priMemEventBuffer[i]);\r
}\r
+ }\r
\r
- //initialize the current timestamp and update the timestamp in pre init\r
- initCurrentFreezeFrameTimeStamp(&FF_TimeStamp);//add by i-soft\r
+ //initialize the current timestamp and update the timestamp in pre init\r
+ initCurrentFreezeFrameTimeStamp(&FF_TimeStamp);//add by i-soft\r
\r
- // Validate extended data records stored in primary memory\r
- for (i = 0; i < DEM_MAX_NUMBER_EXT_DATA_PRI_MEM; i++) {\r
- cSum = calcChecksum(&priMemExtDataBuffer[i], sizeof(ExtDataRecType)-sizeof(ChecksumType));\r
- if ((cSum != priMemExtDataBuffer[i].checksum) || (priMemExtDataBuffer[i].eventId == DEM_EVENT_ID_NULL)) {\r
- // Unlegal record, clear the record\r
- memset(&priMemExtDataBuffer[i], 0, sizeof(ExtDataRecType));\r
- }\r
+ // Validate extended data records stored in primary memory\r
+ for (i = 0; i < DEM_MAX_NUMBER_EXT_DATA_PRI_MEM; i++) {\r
+ cSum = calcChecksum(&priMemExtDataBuffer[i], sizeof(ExtDataRecType)-sizeof(ChecksumType));\r
+ if ((cSum != priMemExtDataBuffer[i].checksum) || (priMemExtDataBuffer[i].eventId == DEM_EVENT_ID_NULL)) {\r
+ // Unlegal record, clear the record\r
+ memset(&priMemExtDataBuffer[i], 0, sizeof(ExtDataRecType));\r
}\r
}\r
\r
}\r
//lint -restore\r
\r
- //lint -save\r
- //lint -e568 //PC-Lint exception.\r
- //lint -e685 //PC-Lint exception.\r
- //lint -e681 //PC-Lint exception to MISRA 14.1: Loop is not entered. This only happens when DEM_MAX_NUMBER_FF_DATA_PRE_INIT is zero. Keep as it is for less complex code.\r
- // Validate freeze frame records stored in primary memory\r
- // LuYuan: no checksum is needed.\r
- /* for (i = 0; i < DEM_MAX_NUMBER_FF_DATA_PRI_MEM; i++) {\r
- // Bug report by iSOFT, data structure is not byte aligned, use "sizeof is not SAFE! \r
- cSum = calcChecksum(&priMemFreezeFrameBuffer[i], sizeof(FreezeFrameRecType)-sizeof(ChecksumType));\r
- if ((cSum != priMemFreezeFrameBuffer[i].checksum) || (priMemFreezeFrameBuffer[i].eventId == DEM_EVENT_ID_NULL)) {\r
- // Unlegal record, clear the record\r
- memset(&priMemFreezeFrameBuffer[i], 0, sizeof(FreezeFrameRecType));\r
- }\r
- }\r
- */\r
- //lint -restore\r
-\r
- /* Transfer updated event data to event memory */\r
- for (i = 0; i < DEM_MAX_NUMBER_EVENT; i++) {\r
- if (eventStatusBuffer[i].eventId != DEM_EVENT_ID_NULL) {\r
- lookupEventIdParameter(eventStatusBuffer[i].eventId, &eventParam);\r
- storeEventEvtMem(eventParam, &eventStatusBuffer[i]);\r
+ /* Transfer updated event data to event memory */\r
+ for (i = 0; i < DEM_MAX_NUMBER_EVENT; i++) {\r
+ if (eventStatusBuffer[i].eventId != DEM_EVENT_ID_NULL) {\r
+ lookupEventIdParameter(eventStatusBuffer[i].eventId, &eventParam);\r
+ storeEventEvtMem(eventParam, &eventStatusBuffer[i]);\r
+ }\r
}\r
- }\r
\r
- /* Transfer extended data to event memory if necessary */\r
- for (i = 0; i < DEM_MAX_NUMBER_EXT_DATA_PRE_INIT; i++) {\r
- if (preInitExtDataBuffer[i].eventId != DEM_EVENT_ID_NULL) {\r
- lookupEventIdParameter(preInitExtDataBuffer[i].eventId, &eventParam);\r
- storeExtendedDataEvtMem(eventParam, &preInitExtDataBuffer[i]);\r
+ /* Transfer extended data to event memory if necessary */\r
+ for (i = 0; i < DEM_MAX_NUMBER_EXT_DATA_PRE_INIT; i++) {\r
+ if (preInitExtDataBuffer[i].eventId != DEM_EVENT_ID_NULL) {\r
+ lookupEventIdParameter(preInitExtDataBuffer[i].eventId, &eventParam);\r
+ storeExtendedDataEvtMem(eventParam, &preInitExtDataBuffer[i]);\r
+ }\r
}\r
- }\r
\r
//lint -save\r
//lint -e568 //PC-Lint exception.\r
}\r
\r
if (AgingIsModified) {\r
- storeAgingRecPerMem(&AgingBlockId);\r
+ storeAgingRecPerMem(AgingBlockId);\r
}\r
}\r
\r