内存映射(MemMap)
头文件
原理:利用#if #elif #ifndef #undef #pragma(将源代码中的字符串编码直接转换为编译指令)进行条件编译
以一个BSW模块DCM的内存映射为例:
1. Dcm_MemMap.h
/** @file Dcm_MemMap.h
*
* @brief RTE Sample SWC MemMap file
*
* @note AUTOMATICALLY GENERATED FILE! DO NOT EDIT!
*
*/
#if defined (START_WITH_IF)
#elif defined(Dcm_START_SEC_CODE)
#undef Dcm_START_SEC_CODE
#define RTE_START_SEC_APPL_CODE
#elif defined(Dcm_STOP_SEC_CODE)
#undef Dcm_STOP_SEC_CODE
#define RTE_STOP_SEC_APPL_CODE
#endif /* START_WITH_IF */
#include "Rte_MemMap.h"
嵌套include了 Rte_MemMap.h
2. Rte_MemMap.h
/** \file Rte_MemMap.h
*
* \brief RTE Memory Mapping header file
*
* \note Implemented SWS: N/A
*
* \note PLATFORM DEPENDANT [yes/no]: no
*
* \note TO BE CHANGED BY USER [yes/no]: yes
*
*/
#ifndef RTE_MEMMAP_H_ //避免重复定义
#define RTE_MEMMAP_H_
#include "MemMap.h"
#endif /* RTE_MEMMAP_H_ */
再一次嵌套include了 MemMap.h
3 MemMap.h
/*----------------------------------------------------------------------------*/
/************** *SAMPLE* of MemMap.h. Not for production purposes *************/
/*----------------------------------------------------------------------------*/
#define MEM_VENDOR_ID (11U)
#define MEM_AR_MAJOR_VERSION (4U)
#define MEM_AR_MINOR_VERSION (0U)
#define MEM_AR_PATCH_VERSION (3U)
#define MEM_SW_MAJOR_VERSION (5U)
#define MEM_SW_MINOR_VERSION (6U)
#define MEM_SW_PATCH_VERSION (3U)
/*******************************************************************************
** Default section mapping **
*******************************************************************************/
#if defined (START_WITH_IF)
/* -------------------------------------------------------------------------- */
/* RAM variables not initialized */
/* -------------------------------------------------------------------------- */
#elif defined (DEFAULT_START_SEC_VAR_NOINIT_BOOLEAN)
#undef DEFAULT_START_SEC_VAR_NOINIT_BOOLEAN
#elif defined (DEFAULT_STOP_SEC_VAR_NOINIT_BOOLEAN)
#undef DEFAULT_STOP_SEC_VAR_NOINIT_BOOLEAN
#elif defined (DEFAULT_START_SEC_VAR_NOINIT_8BIT)
#undef DEFAULT_START_SEC_VAR_NOINIT_8BIT
#elif defined (DEFAULT_STOP_SEC_VAR_NOINIT_8BIT)
#undef DEFAULT_STOP_SEC_VAR_NOINIT_8BIT
#elif defined (DEFAULT_START_SEC_VAR_NOINIT_16BIT)
#