S32K324 MCAL中的Postbuild和PreCompile使用

news2024/12/25 3:57:39

文章目录

    • 前言
    • 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)
    #else
        if (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);
    #else
        Can_Init (&Can_Config);
    #endif

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

总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2265067.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

中国电信网络下多方通话 SIP消息交互记录

如下表格记录了一个日志中,在中国电信网络下多方语音通话 发起方的 SIP消息交互记录,省略部分SIP消息,记录下和多方通话的重要SIP消息。 progress1:发起方A通过拨号盘呼叫B 此操作建立A和B之间的通话,网络会向终端分配QCI=1的专有承载。 同时此专有承载包含四个pkt_filt…

应用(APP)部署容器化演进之路

应用&#xff08;Application&#xff09;部署容器化演进之路 一、应用程序部署痛点 1.1 应用程序部署流程 举例&#xff1a;部署一个JAVA编程语言开发的Web应用&#xff0c;以War包放入Tomcat方式部署。 部署过程如下&#xff1a; 服务器配置运行环境:JAVA代码运行环境&am…

SDMTSP:粒子群优化算法PSO求解单仓库多旅行商问题,可以更改数据集和起点(MATLAB代码)

一、单仓库多旅行商问题 单仓库多旅行商问题&#xff08;Single-Depot Multiple Travelling Salesman Problem, SD-MTSP&#xff09;&#xff1a;&#x1d45a;个推销员从同一座中心城市出发&#xff0c;访问其中一定数量的城市并且每座城市只能被某一个推销员访问一次&#x…

AI在线医生

第一章:背景介绍与Unit的使用 1.1背景介绍 1.2 Unit对话API的使用 第二章:在线医生的总体架构与工具介绍 第三章:neo4j图数据库 第四章:离线部分 第五章:命名实体审核任务 第六章:命名实体识别任务 第七章:在线部分 第八章:句子主题相关任务 第九章:系统联调与测试

LiteFlow决策系统的策略模式,顺序、最坏、投票、权重

个人博客&#xff1a;无奈何杨&#xff08;wnhyang&#xff09; 个人语雀&#xff1a;wnhyang 共享语雀&#xff1a;在线知识共享 Github&#xff1a;wnhyang - Overview 想必大家都有听过或做过职业和性格测试吧&#xff0c;尤其是现在的毕业生&#xff0c;在投了简历之后经…

ubuntu paddle ocr 部署bug问题解决

ubuntu paddle ocr 部署会出现异常报错。 尝试安装以下版本&#xff1a; pip install paddlepaddle2.5.2 -i https://pypi.tuna.tsinghua.edu.cn/simpl ​​​​​​ 助力快速掌握数据集的信息和使用方式。 数据可以如此美好&#xff01;

华为云计算HCIE笔记02

第二章&#xff1a;华为云Stack规划设计 交付总流程 准备工作&#xff1a;了解客户的基本现场&#xff0c;并且对客户的需求有基本的认知。 HLD方案BOQ报价设备采购和设备上架 2.安装部署流程 硬件架构设计 硬件设备选配 设备上架与初始化配置 准备相关资料&#xff08;自动下载…

WWW23-多行为级联|级联图卷积网络的多行为推荐

论文&#xff1a;https://arxiv.org/abs/2303.15720 代码&#xff1a;https://github.com/SS-00-SS/MBCGCN 这篇论文MB-CGCN和上一篇CRGCN是同一个团队的&#xff0c;都是级联的方式。一个用了残差&#xff0c;一个用了特征转换&#xff0c;文章最后有discussion讨论了两者的不…

【day16】Java开发常用API

模块15回顾 在深入探讨模块16之前&#xff0c;让我们回顾一下【day15】中的重点内容&#xff1a; String类&#xff1a; 构造方法&#xff1a;String(), String(String s), String(char[] chars), String(byte[] bytes), String(char[] chars, int offset, int count), String…

MLU运行Stable Diffusion WebUI Forge【flux】

文章目录 一、平台环境准备二、代码下载三、基础环境准备3.1 支援whl包 四、代码修改4.2 组件下载 六、运行效果 FLUX模型是由Black Forest Labs推出的一款文本生成图像的AI模型&#xff0c;具有120亿参数&#xff0c;显著提升了图像生成的质量和多样性‌。FLUX模型包含三个版本…

PPP - NCP协议

NCP协议是一个很多子协议构成的主要取决于网络层封装的什么协议比如 三层协议NCP协议ipIPCPIPv6IPv6CPMPLSMPLSCP NCP能够协商的内容包括&#xff1a; 1.网络层协议&#xff08;ip&#xff1f;ipv6&#xff1f;MPLS&#xff1f;…&#xff09;  2.协商地址 主要了解使用最多…

< Chrome Extension : TamperMonkey > 去禁用网页的鼠标的事件 (水文)

问题描述 在一个视频网站看视频&#xff0c;在播放视频时&#xff0c; 如果当鼠标移到视频外&#xff0c;只要有点击鼠标的动作&#xff0c;视频就会暂停播放&#xff08;包括 Window 下的 其它 tab&#xff09;。有种被打劫完财物&#xff0c;还被凌辱的感觉。 解决方案 使…

网络安全 | 常见的网络攻击类型及防范技巧全解析

网络安全 | 常见的网络攻击类型及防范技巧全解析 一、前言二、常见网络攻击类型2.1 网络扫描2.2 恶意软件攻击2.3 网络钓鱼2.4 拒绝服务攻击&#xff08;DoS/DDoS&#xff09;2.5 中间人攻击2.6 SQL 注入攻击2.7 跨站脚本攻击&#xff08;XSS&#xff09; 三、防范技巧3.1 网络…

CE第七次作业

1. for创建20用户 用户前缀由用户输入 用户初始密码由用户输入 例如&#xff1a;test01,test10 [rootServer ~]# vim add_user20.sh #!/bin/bash read -p "please input usernames prefix:" name_pre read -p "please input users passwd:" p…

了解反向传播算法

目录 一、说明 二、了解反向传播算法 三、定义神经网络模型 3.1 输入层 3.2 隐藏图层 3.3 输出层 四、前向传播和评估 五、反向传播和计算梯度 六、结束语 一、说明 梯度正向和反向传播&#xff0c;是神经网络的重要概念。其中包含的重要技巧是&#xff1a;1&#xff09;复函数…

实力认可 | 通付盾入选《ISC.AI 2024创新能力全景图谱》五项领域

近日&#xff0c;ISC.AI 2024创新能力百强&#xff08;以下简称“创新百强”&#xff09;正式发布《ISC.AI 2024创新能力全景图谱》。该全景图谱是由政企、资本、高校、行业力量共同完成了领域划分、综合创新等标准的制定&#xff0c;整合梳理了参评的300余家数字安全厂商、120…

Web3.0安全开发实践:9个sCrypt智能合约开发的最佳实践

sCrypt是一种基于TypeScript的嵌入式领域特定语言&#xff08;eDSL&#xff09;&#xff0c;专为在比特币链上编写智能合约而设计。sCrypt智能合约使用比特币支持的操作码&#xff0c;可以编译成Bitcoin Script。由此生成的类似汇编的脚本可用作交易中的锁定脚本。 本文将探讨…

新手SEO指南如何快速入门与提升网站排名

内容概要 搜索引擎优化&#xff08;SEO&#xff09;是提高网站可见度和排名的重要手段&#xff0c;尤其对新手来说&#xff0c;掌握其基本概念和实用技巧至关重要。本文将针对新手提供一系列的指导&#xff0c;帮助你快速入门并逐步提升网站排名。 首先&#xff0c;了解SEO的…

【EthIf-14】EthIfGeneral容器配置-02

1.实际EthIfGeneral的配置实例 关闭DET接口开启发送确认中断开启接收中断主周期接收timeout主周期 2. 代码实例参考 阅读此部分代码,搞清楚代码分为几个section,大概瞄一眼就好,不用深究其含义,只需有一个宏观的层次结构的映像即可。 //Appl/GenData/EthIf_Cfg.h #

‘pnpm’ 不是内部或外部命令,也不是可运行的程序或批处理文件。

‘pnpm’ 不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件。 1.情况: npm -v 和 node -v的都正常就是 pnpm-v 无效 检查环境变量也没看出问题 2.分析 没有正确添加环境变量 3.解决 找到npm的全局安装目录 npm list -g --depth 0这里出现了npm的全局安装…