Actions
Documentation #354
진행중
안일
안일
[BUG][S32K3xx][Memory Map] RETENTION RAM영역과 그렇지 않은 영역이 같은 Memory 영역에 할당됨
Documentation #354:
[BUG][S32K3xx][Memory Map] RETENTION RAM영역과 그렇지 않은 영역이 같은 Memory 영역에 할당됨
시작일:
2025/04/30
완료일:
진척도:
0%
추정시간:
설명
증상
RTE에 추가된 초기화 되지 않는 변수가 상황에 따라 RETENTION 영역에 할당 될 수도 있고, 그렇지 않을 수도 있음.
이로 인해, 예상되지 않은 동작을 할 수 있음.
Ex)
static uint8 ss_GetSleepCondition()
{
uint8 Sleep_Ret = 0;
uint8 App_SleepCond;
uint8 Nvm_SleepCond;
Rte_Read_R_Mode_SleepCondition_Mode_SleepCond(&App_SleepCond);
Rte_Read_R_Mode_Nvm_SleepCondition_Mode_SleepCond(&Nvm_SleepCond);
...
}
#ifndef Rte_Read_R_Mode_SleepCondition_Mode_SleepCond
#define Rte_Read_R_Mode_SleepCondition_Mode_SleepCond \
Rte_Read_SWC_AppMode_R_Mode_SleepCondition_Mode_SleepCond
#endif
FUNC(Std_ReturnType, RTE_CODE)
Rte_Read_SWC_AppMode_R_Mode_SleepCondition_Mode_SleepCond(P2VAR(boolean, AUTOMATIC, RTE_APPL_DATA) Data)
{
/* polyspace<MISRA-C:14.2:Not a defect:Justify with annotations> AUTOSAR Standard rte_sws_1236 */
Rte_ReadHook_SWC_AppMode_R_Mode_SleepCondition_Mode_SleepCond_Start(Data);
if (Data != NULL_PTR)
{
*Data = Rte_GblSR_Mode_SleepCondition_113_Mode_SleepCond_88;
}
/* polyspace<MISRA-C:14.2:Not a defect:Justify with annotations> AUTOSAR Standard rte_sws_1236 */
Rte_ReadHook_SWC_AppMode_R_Mode_SleepCondition_Mode_SleepCond_Return(Data);
return Rte_GucStatus_SR_Mode_SleepCondition_113_Mode_SleepCond_88;
}
#define RTE_START_SEC_VAR_CLEARED_8
#include "MemMap.h"
static VAR(boolean, RTE_VAR_CLEARED) Rte_GblSR_Mode_SleepCondition_113_Mode_SleepCond_164;
static VAR(boolean, RTE_VAR_CLEARED) Rte_GblSR_Mode_SleepCondition_113_Mode_SleepCond_88;
#define RTE_STOP_SEC_VAR_CLEARED_8
#include "MemMap.h"
#elif defined (RTE_START_SEC_VAR_CLEARED_8)
#undef RTE_START_SEC_VAR_CLEARED_8
#pragma ghs section bss=".bss.DEFAULT_RAM_VAR_CLEARED"
.ramcode ABS ALIGN(4) : > RAM_SYSTEM
.pidbase ALIGN(16) : > .
.data ALIGN(4) : {*(".data*")} > .
.mcal_data ALIGN(4) : > .
.bss CLEAR (NOLOAD) ALIGN(4) : {*(".bss.*VAR_CLEARED*")
*(".bss.ATM_RAM_VAR_CLEARED")
*(".bss.DEFAULT_RAM_VAR_CLEARED")
.bss 2040689a+000001 Rte_GblSR_Mode_SleepCondition_113_Mode_SleepCond_88..D.3A.5Cprojects.5CAMOSENSE.5CTPMS.5Camosense.5Ctpms.2Dplatform.2Ds32k.5CDebug.5CGenerated.5CBsw_Output.5Csrc.5CRte.
.bss 2040689c+000001 Rte_GblSR_Mode_SleepCondition_113_Mode_SleepCond_164..D.3A.5Cprojects.5CAMOSENSE.5CTPMS.5Camosense.5Ctpms.2Dplatform.2Ds32k.5CDebug.5CGenerated.5CBsw_Output.5Csrc.5CRte.
S32K312의 retenrion memory 크기는 32KB이고, Hex로 0x8000이다.

해결 방법¶
어느 곳에 배치가 되더라고, Reset이나, Wakeup 등의 조건에 따라 명시적으로 Init시, 초기화하도록 함
void App_amo_Init(void)
{
Rte_Write_P_Mode_SleepCondition_Mode_SleepCond(0u); /* SC_NOT_SET */
}
FUNC(void, App_Tpms_CODE) RTE_RUNNABLE_App_Tpms_IE_Runnable(void)
{
Std_ReturnType retVal;
EcuM_StateType sShutdownTarget = 0xFFu;
EcuM_ModeType sShutdownMode = 0xFFu;
retVal = Rte_Call_clientPort_ShutdownTarget_GetLastShutdownTarget(&sShutdownTarget, &sShutdownMode);
App_amo_tda5235_Init();
App_CanTxRx_Init();
App_amo_Init();
if ((retVal != RTE_E_OK)
|| (sShutdownTarget != ECUM_STATE_SLEEP))
{
App_amo_Init_POR();
App_amo_tda5235_Init_POR();
App_amo_ivd_Init_POR();
App_CanTxRx_Init_POR();
}
}

파일
안일 안일환(SDC)이(가) 7달 전에 변경
- 파일에 clipboard-202504301029-nz7us.png clipboard-202504301029-nz7us.png이(가) 추가되었습니다.
- 설명이 변경되었습니다. (비교(diff))
Actions