当前位置: 首页 > news >正文

聊城市建设工程质量监督站网站长沙企业关键词优化哪家好

聊城市建设工程质量监督站网站,长沙企业关键词优化哪家好,则么建立自己的网站,重庆企业网站推广价格文章目录 前言Postbuild和PreCompile的概念MCAL中配置差异总结 前言 之前一直看到MCAL配置中有这个Postbuild和PreCompile的配置,但是不太清楚这两个的区别和使用方法。最近在使用中出现了相关问题,本文介绍一下MCAL中这两种配置的区别和使用。 Postbu…

文章目录

    • 前言
    • Postbuild和PreCompile的概念
    • MCAL中配置差异
    • 总结

前言

之前一直看到MCAL配置中有这个Postbuild和PreCompile的配置,但是不太清楚这两个的区别和使用方法。最近在使用中出现了相关问题,本文介绍一下MCAL中这两种配置的区别和使用。

Postbuild和PreCompile的概念

Postbuild和PreCompile的概念来自于AUTOSAR_RS_ECUConfiguration中的需求,具体描述如下:
在这里插入图片描述
顾名思义,PreCompile体现在编译之前,进行一些参数的配置,例如.h中的宏定义,一般以 _cfg.h结尾,示例如下:

Example: /* File: CanTp_Cfg.h                             */ 
/* Pre-compile time configuration             */ … 
#define CANTP_USE_NORMAL_ADDRESSING         STD_OFF 
#define CANTP_USE_NORMAL_FIXED_ADDRESSING   STD_OFF 
#define CANTP_USE_EXTENDED_ADDRESSING       STD_ON 
… /* File: CanTp.c                                 */ 
… 
#include "CanTp_Cfg.h" 
… 
#if (CANTP_USE_NORMAL_ADDRESSING == STD_OFF) 
… 
#endif 

使用这种方法,可以减少源码的改动量,通过修改配置来实现不同的功能的开启和关闭
在这里插入图片描述
Postbuild是在编译之后可以修改的配置,一般都是一些const定义,这样的话,只要知道其map中的位置,可以通过修改生成的可执行文件(hex,s19等),来修改对应的配置项,已达到不改代码不编译即可修改配置项。该文件一般以 _PBcfg.h, _PBcfg.c来命名,示例如下:

Example: 
/* File: ComM_PBcfg.h                           */ 
… 
/* Type declaration of the Configuration Type   */ 
struct ComM_ConfigType_Tag { 
… 
}; 
… 
/* File: ComM_PBcfg.c                             */ 
#include <ComM.h> 
… 
/* post-build time configurable data   */ 
const ComM_ConfigType ComM_Config = 
{ … 
}; 
… /* File: ComM.h                                 */ 
#include <ComM_PBcfg.h> 
… 
/* Forward declaration:                         */ 
typedef struct ComM_ConfigType_Tag ComM_ConfigType; 
extern void ComM_Init(const ComM_ConfigType * 
ComMConfigPtr); 
… 

通过修改ComM_Config内存值即可修改对应的一些配置项。

由于Postbuild是在编译后都可以修改的,所以支持Postbuild一定是可以支持PreCompile的,而支持PreCompile的一些宏定义肯定是不能支持Postbuild的,标准中描述如下:
在这里插入图片描述

MCAL中配置差异

在NXP S32K324MCAL中,一般有两个相关选项,一个为Post Build Variant Used ,另一个为Config Variant。
在这里插入图片描述
实测第一个勾选与否对生成的代码没有影响,可能主要是为了提示开发者吧。

Config Variant配置有VariantPreCompile和VariantPostBuild

以CAN模块为例,当配置为VariantPreCompile时,对应的宏CAN_PRECOMPILE_SUPPORT被打开,其主要使能的功能是Can_Init初始化时传递的参数是否为NULL_PTR

    #if (CAN_PRECOMPILE_SUPPORT == STD_ON)#if (CAN_MULTICORE_ENABLED == STD_ON)if (NULL_PTR != Can_Config[u32CoreId]){/* Update config pointer with default configuration if precompile support on. */Can_apxConfig[u32CoreId] = Can_Config[u32CoreId];bValidCoreID = TRUE;}#else/* Update config pointer with default configuration if precompile support on. */Can_apxConfig[u32CoreId] = &Can_Config;#endif(void)Config; /* Prevent compiler warning */#else#if (CAN_MULTICORE_ENABLED == STD_ON)if (u32CoreId == Config->Can_u32CoreID){#endif /* (CAN_MULTICORE_ENABLED == STD_ON) *//* Copy pointer to current Can Driver configuration. */Can_apxConfig[u32CoreId] = Config;#if (CAN_MULTICORE_ENABLED == STD_ON)bValidCoreID = TRUE;}#endif /* (CAN_MULTICORE_ENABLED == STD_ON) */#endif /* (CAN_PRECOMPILE_SUPPORT == STD_ON) */

当VariantPreCompile使能时,直接使用Can_Config作为输入的参数(实际还是来自于Can_PBcfg.c中),在调用Can_Init函数时必须输入参数NULL_PTR,否则会DET报错,代码如下:

    #if (CAN_PRECOMPILE_SUPPORT == STD_ON)if (NULL_PTR != Config)#elseif (NULL_PTR == Config)#endif{(void)Det_ReportError((uint16)CAN_MODULE_ID, CAN_INSTANCE, CAN_SID_INIT, CAN_E_INIT_FAILED);}else{

而当使用VariantPostBuild时,Can_Init函数的输入作为配置项,默认使用Can_PBcfg.c中的Can_Config
在这里插入图片描述
所以,使用VariantPostBuild时,Can_Init初始化需要使用Can_Config,使用VariantPreCompile,Can_Init初始化需要使用NULL_PTR,示例如下:

    #if (CAN_PRECOMPILE_SUPPORT == STD_ON)Can_Init(NULL_PTR);#elseCan_Init (&Can_Config);#endif

其他的MCAL模块也是类似的,如果配置和初始化时传的参数不一致,会导致初始化报错(DET报错的API为初始化,错误码为E_INIT_FAILED)而导致模块无法实现正常功能

总结

合理使用Postbuild和PreCompile,可以减少代码的变种,也可以减少代码编译的次数。

http://www.yayakq.cn/news/707560/

相关文章:

  • 建行网站网址温州小程序开发哪家好
  • 做什么网站流量大深圳辰硕网站优化
  • 网站开发赚钱的方法南京网站建设网
  • 闵行网站建设公司app源码WordPress淘客
  • 简易做网站的软件微信做单网站有哪些
  • 织梦(dedecms)怎么修改后台网站默认"织梦内容管理系统"标题建设部网站技术负责人业绩表
  • 网站做联盟还赚钱吗软文发布平台媒体
  • 清远网站seo网络科技公司logo
  • o2o商超网站建设用phpnow搭建网站的整个流程
  • 官方网站建设费用网站没备案可以做商城吗
  • 企业注册信息查询单怎么打印关键词优化排名费用
  • 聊城网站建设设计实力公司wordpress首页模板修改那个文件名
  • 用js做的网站代码吗android软件开发工程师
  • 站长之家seo综合查询门窗专业设计网站
  • 网监网站备案windows优化大师怎么使用
  • 公司做网站效果怎么样免费做网站怎么做网站链接
  • 昌吉网站建设咨询电话网站内链seo
  • 军棋是哪个网站开发的网站建设外地便宜
  • 如何对网站做引擎优化做散客机票的网站如何推广
  • 小型网站建设参考文献设计公司logo需要多少钱
  • sae网站备案设计师服务平台官网
  • 推广 quot 网站开发 quot网站个人备案需要什么
  • 网站建设企业类型是什么主流网站开发技术
  • 设置网站建设网站水印怎么做的
  • 网站游戏入口西安大型网站制作
  • 郑州网站建设伟置盐地网站建设公司
  • 网站制作哪家便宜相册网站模板
  • 外贸上哪个网站开发客户wordpress设置ssl不成功
  • 云主机重装系统后网站重新部署吗网站开发招标文件范本
  • html5 手机 手机网站wordpress 规则