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

如何让 Source Insight 识别 AUTOSAR 宏定义 FUNC

有很多从事汽车电子行业的软件工程师在使用Source Insight阅览Classic AUTOSAR协议栈源码的时候,

发现函数名无法解析,基本上都变成了FUNC。

  • 先说原因:

AUTOSAR的协议栈为了实现多平台和编译器兼容,大量使用宏定义来代替关键字。

函数,指针,返回值,等等。这样可以实现代码对编译器的解耦和复用。

这种标准或者平台化设计的代码,真的和目标就是一亩三分地开发的模式不一样。为了可扩展和复用解耦,增加了很多设计。

  • 解决方法:

Source Insight在 C:\Users\你的用户名\Documents\Source Insight 4.0下面有一个C.tom。在里面可以自定义一些宏展开,

让Source Insight解析,在分析符号的时候进行替换。

注意:目前发现好像不支持宏的嵌套使用,也就是说不可避免的,有一些嵌套使用的宏定义会解析错误。常见于指针的使用解析。

比如FUNC里传入参数是个用宏描述的常量指针,就会被误识别。

宏定义的来源一般放在各种文件名带"compiler"的头文件下,搜索“#define FUNC”这样的字符串差不多就可以搜索到。

例如:

#define FUNC(rettype, memclass) rettype#define FUNC_P2CONST(rettype, ptrclass, memclass) const rettype *#define FUNC_P2VAR(rettype, ptrclass, memclass) rettype *#define P2VAR(ptrtype, memclass, ptrclass)     ptrtype *#define P2CONST(ptrtype, memclass, ptrclass)  const ptrtype *#define CONSTP2VAR(ptrtype, memclass, ptrclass) ptrtype * const#define CONSTP2CONST(ptrtype, memclass, ptrclass) const ptrtype * const#define P2FUNC(rettype, ptrclass, fctname) rettype (* fctname)#define CONSTP2FUNC(rettype, ptrclass, fctname) rettype (* const fctname)#define CONST(consttype, memclass) const consttype#define VAR(vartype, memclass) vartype#define P2P2VAR(ptrtype, memclass, ptrclass) ptrtype **

这样只需要在C.tom末尾添加上述内容,去掉前面的#define就可以了

例如:

FUNC(rettype, memclass) rettype
FUNC_P2CONST(rettype, ptrclass, memclass) const rettype *
FUNC_P2VAR(rettype, ptrclass, memclass) rettype *
P2VAR(ptrtype, memclass, ptrclass) 	ptrtype *
P2CONST(ptrtype, memclass, ptrclass)  const ptrtype *
CONSTP2VAR(ptrtype, memclass, ptrclass) ptrtype * const
CONSTP2CONST(ptrtype, memclass, ptrclass) const ptrtype * const
P2FUNC(rettype, ptrclass, fctname) rettype (* fctname)
CONSTP2FUNC(rettype, ptrclass, fctname) rettype (* const fctname)
CONST(consttype, memclass) const consttype
VAR(vartype, memclass) vartype
P2P2VAR(ptrtype, memclass, ptrclass) ptrtype **
  • 还有别的宏?

上述的内容比较常用,下面讲讲个性化的。

可能还会遇到各种各样奇奇怪怪的用法,甚至还有些函数在代码里都搜索不到,实际上都可能是宏甚至是字符串拼接宏。

例如常见的:

TASK(your_task_name){...}

实际上这是一个定义在OS User Interface系列头文件中的宏,

#define Task(TaskName) void Os_Task_##TaskName(void)

在C.tom中,就可以直接写上:

Task(TaskName) void Os_Task_##TaskName(void)

修改完之后,重启source insight或者rebuild工程,可以让修改生效!

相关文章:

如何让 Source Insight 识别 AUTOSAR 宏定义 FUNC

有很多从事汽车电子行业的软件工程师在使用Source Insight阅览Classic AUTOSAR协议栈源码的时候, 发现函数名无法解析,基本上都变成了FUNC。 先说原因: AUTOSAR的协议栈为了实现多平台和编译器兼容,大量使用宏定义来代替关键字。…...

sts搭建springboot

sts搭建springboot 需要的软件 Apache-maven-3.3.9.rar 链接:百度网盘 请输入提取码 提取码:1xgj Spring-tool-suite-4-4.20.0.RELEASE-e4.29.0-win32.win32.x86_64.self-extracting.jar 链接:百度网盘 请输入提取码 提取码:p…...

解决react使用css module无法重写bootstrap样式的问题

react使用css module虽然能够解决样式污染,但是同时也失去了写css样式的灵活性,特别是:在.module.css文件中当子元素是非变量的静态class类(比如bootstrap), 此时使用css选择器对该子元素的样式不会起作用的 比如下面…...

自动驾驶软件和人工智能

自动驾驶汽车的核心在于其软件系统,而其中的机器学习和深度学习技术是使车辆能够感知、理解、决策和行动的关键。本文将深入探讨这些技术在自动驾驶中的应用,包括感知、定位、路径规划以及道路标志和交通信号的识别。 1. 机器学习和深度学习在自动驾驶中…...

堆叠、集群技术

1.堆叠、集群技术的概述 堆叠、集群简介 堆叠(iStack),将多台支持堆叠特性的交换机通过堆叠线缆连接在一起,从逻辑上虚拟成一台交换设备,作为一个整体参与数据转发。 集群(Cluster Switch System&#xf…...

SpringCould微服务保护01——Sentinel组件下载并使用

1.初识Sentinel 1.1.雪崩问题及解决方案 1.1.1.雪崩问题 微服务中,服务间调用关系错综复杂,一个微服务往往依赖于多个其它微服务。 如图,如果服务提供者I发生了故障,当前的应用的部分业务因为依赖于服务I,因此也会被…...

可扩展性对物联网管理系统有哪些影响?

可扩展性对于物联网管理系统的设计和开发非常重要,它直接影响着系统的性能、可靠性和能耗等方面,是评估一个系统优劣的重要因素之一。可扩展性对物联网管理系统的影响主要体现在以下几个方面: 设备兼容性:物联网管理系统的可扩展性…...

洗地机哪个品牌最耐用质量好?2023年最好用的洗地机

随着科技的发展,人们的生活越来越便利,就拿打扫卫生来说,现在越来越多人抛弃扫把、地拖,转而选择让清洁更加轻松的清洁家电,而洗地机就是这样一种让打扫卫生变得简单轻松的家电。近年来洗地机销量剧增,是目…...

计算机视觉(Computer Vision, CV)是什么?

什么是计算机视觉 近年来,计算机视觉 (Computer Vision,简称CV) 不断普及,已成为人工智能 (AI) 增长最快的领域之一。计算机视觉致力于使计算机能够识别和理解图像和视频中的物体和人。 计算机视觉应用程序使用来自传感设备、人工智能、机器…...

【【萌新的SOC学习之自定义IP核 AXI4接口】】

萌新的SOC学习之自定义IP核 AXI4接口 自定义IP核-AXI4接口 AXI接口时序 对于一个读数据信号 AXI突发读 不要忘记 最后还有拉高RLAST 表示信号的中止 实验任务 : 通过自定义一个AXI4接口的IP核 ,通过AXI_HP接口对PS端 DDR3 进行读写测试 。 S_AXI…...

设计模式-创建型模式

文章目录 一、单例模式1.饿汉式(1) 静态变量(2) 静态代码块(3) 枚举方式 2.懒汉式(1) 双检锁(2) 静态内部类 3.破坏单例模式(1) 序列化(2) 反射 4.解决单例模式被破坏(1) 序列化、反序列化破坏单例模式的解决方法(2) 反射破坏单例解决 二、工厂方法模式1.简单工厂模式2.工厂方法…...

golang中的RSA算法,加密解密,签名校验,导出公钥密钥,导入公钥密钥

RSA算法广泛应用与数据加密(比如 SSL 传输层加密),数字签名(比如支付宝的支付签名)。 1、加密解密 // encrypts the given message with RSA-OAEP func f1() {// random 用来生成随机的素数rsaPriviteKey, err : rsa…...

修炼k8s+flink+hdfs+dlink(四:k8s(二)组件)

一:控制平面组件。 控制平面组件会为集群做出全局决策,比如资源的调度。 以及检测和响应集群事件,例如当不满足部署的 replicas 字段时, 要启动新的 pod)。 1. kube-apiserver。 该组件负责公开了 Kubernetes API&a…...

Android约束布局ConstraintLayout流式Flow

Android约束布局ConstraintLayout流式Flow <?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.…...

Android JNI代码语法解释

文章目录 JNI中的JNIEXPORT、JNIIMPORT和JNICALLJVM如何查找native方法①按照JNI规范的命名规则②调用JNI提供的RegsterNatives函数&#xff0c;将本地函数注册到JVM中示例代码 JNI数据类型JNI字符串的处理①获取字符串②释放字符串③创建字符串④其他字符串处理API JNI中的JNI…...

小程序和前台开发软件定制的相关信息|APP网站搭建

小程序和前台开发软件定制的相关信息 在如今数字化时代&#xff0c;软件、小程序和前台开发软件定制已经成为了企业必备的工具之一。那么&#xff0c;这些工具到底有什么作用呢&#xff1f;接下来&#xff0c;我将为大家详细介绍。 首先&#xff0c;让我们来了解一下软件。软件…...

JVM监控及诊断工具-GUI篇

文章目录 JVM监控及诊断工具-GUI篇工具概述JConsoleVisual VM再谈内存泄漏Java中内存泄漏的8种情况Arthas&#xff08;阿尔萨斯&#xff09;康师傅使用阿尔萨斯的例子help指令 JVM监控及诊断工具-GUI篇 工具概述 使用上一章命令行工具或组合能获取目标Java应用性能相关的基础…...

【C++STL基础入门】list基本使用

文章目录 前言一、list简介1.1 list是什么1.2 list的头文件 二、list2.1 定义对象2.2 list构造函数2.3 list的属性函数 总结 前言 STL&#xff08;Standard Template Library&#xff09;是C标准库的一个重要组成部分&#xff0c;提供了一套丰富的数据结构和算法&#xff0c;可…...

WSL+vscode配置miniob环境

1.配置WSL Windows Subsystem for Linux入门&#xff1a;安装配置图形界面中文环境vscode wu-kan 2.获取源码 找个位置Git Bash然后拉取代码 git clone https://github.com/oceanbase/miniob.git 3.安装相关依赖 https://gitee.com/liangcha-xyy/source/blob/master/how…...

Flutter SliverAppBar 吸顶效果

吸顶是常见的布局&#xff0c;主要使用的是CustomScrollView 和SliverApp组件实现的 页面布局 overrideWidget build(BuildContext context) {return CustomScrollView(controller: controller.scrollController!,physics: const BouncingScrollPhysics(),slivers: [SliverApp…...

全域软开关直流变换器TPEL论文仿真复现之旅

全域软开关直流变换器 TPEL论文仿真复现最近一头扎进了全域软开关直流变换器的研究里&#xff0c;主要在琢磨TPEL论文相关内容&#xff0c;那仿真复现就成了关键任务。今天就来和大家唠唠这个过程中的酸甜苦辣。 一、全域软开关直流变换器是啥&#xff1f; 简单来说&#xff0c…...

从一次数据精度丢失的坑说起:详解Pandas fillna的‘静默下转型’与infer_objects的正确用法

从数据精度陷阱到稳健处理&#xff1a;Pandas类型转换的深度防御实践 1. 当.fillna(0)成为数据分析的隐形杀手 凌晨三点的办公室&#xff0c;咖啡杯早已见底。数据分析师李明盯着屏幕上诡异的报表结果——所有百分比计算结果突然变成了整齐的整数。这个看似简单的数据清洗操作…...

SUNFLOWER MATCH LAB在CSDN技术社区的分享:从部署到创新的完整旅程

SUNFLOWER MATCH LAB在CSDN技术社区的分享&#xff1a;从部署到创新的完整旅程 最近在CSDN上看到不少关于AI模型部署和应用的讨论&#xff0c;其中SUNFLOWER MATCH LAB这个项目引起了我的注意。它不是一个简单的模型调用工具&#xff0c;更像是一个围绕特定AI能力构建的完整实…...

YOLOv5实战:如何用Python手写IoU计算函数提升目标检测精度

YOLOv5实战&#xff1a;手写IoU计算函数提升目标检测精度的Python实现 在目标检测任务中&#xff0c;边界框的定位精度直接影响模型性能。IoU&#xff08;Intersection over Union&#xff09;作为衡量预测框与真实框重合度的核心指标&#xff0c;其计算准确性对模型优化至关重…...

WRF风场后处理实战:用Python+Cartopy绘制500hPa风场矢量图(附完整代码)

WRF风场后处理实战&#xff1a;用PythonCartopy绘制500hPa风场矢量图&#xff08;附完整代码&#xff09; 气象数据分析中&#xff0c;风场可视化是理解大气环流特征的关键环节。WRF&#xff08;Weather Research and Forecasting&#xff09;模式输出的数据包含丰富的三维风场…...

Qwen3-TTS-12Hz-1.7B-Base真实案例:为视障开发者生成无障碍编程教程语音

Qwen3-TTS-12Hz-1.7B-Base真实案例&#xff1a;为视障开发者生成无障碍编程教程语音 1. 这不是“读出来就行”的语音&#xff0c;而是真正听得懂代码的语音助手 你有没有想过&#xff0c;一段Python函数说明、一个React组件生命周期图解、甚至一段带缩进和符号的JSON结构&…...

如何通过BaiduNetdiskPlugin实现下载性能提升:面向macOS用户的实用指南

如何通过BaiduNetdiskPlugin实现下载性能提升&#xff1a;面向macOS用户的实用指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 百度网盘作为常用的…...

Phan静态分析工具:10个自动化代码质量检查的终极指南

Phan静态分析工具&#xff1a;10个自动化代码质量检查的终极指南 【免费下载链接】phan Phan is a static analyzer for PHP. Phan prefers to avoid false-positives and attempts to prove incorrectness rather than correctness. 项目地址: https://gitcode.com/gh_mirro…...

Go后端项目代码规范:编写可维护Clean Architecture代码的7个黄金法则

Go后端项目代码规范&#xff1a;编写可维护Clean Architecture代码的7个黄金法则 【免费下载链接】go-backend-clean-architecture A Go (Golang) Backend Clean Architecture project with Gin, MongoDB, JWT Authentication Middleware, Test, and Docker. 项目地址: https…...

Nunchaku FLUX.1-dev多场景实战:游戏原画/产品渲染/艺术创作全覆盖

Nunchaku FLUX.1-dev多场景实战&#xff1a;游戏原画/产品渲染/艺术创作全覆盖 你是不是也遇到过这样的烦恼&#xff1a;想画一张游戏角色概念图&#xff0c;但手绘功底不够&#xff1b;想给产品做个渲染图&#xff0c;3D软件又太复杂&#xff1b;脑子里有绝妙的艺术创意&…...