프로젝트

일반

사용자정보

Actions

Documentation #354

진행중
안일 안일

[BUG][S32K3xx][Memory Map] RETENTION RAM영역과 그렇지 않은 영역이 같은 Memory 영역에 할당됨

Documentation #354: [BUG][S32K3xx][Memory Map] RETENTION RAM영역과 그렇지 않은 영역이 같은 Memory 영역에 할당됨

안일환(SDC)이(가) 7달 전에 추가함. 7달 전에 수정됨.

상태:
Open
우선순위:
P0
담당자:
시작일:
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달 전에 변경 Actions #1

clipboard-202504301029-nz7us.png
Actions

내보내기 PDF Atom