如何让 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…...
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函数,将本地函数注册到JVM中示例代码 JNI数据类型JNI字符串的处理①获取字符串②释放字符串③创建字符串④其他字符串处理API JNI中的JNI…...
小程序和前台开发软件定制的相关信息|APP网站搭建
小程序和前台开发软件定制的相关信息 在如今数字化时代,软件、小程序和前台开发软件定制已经成为了企业必备的工具之一。那么,这些工具到底有什么作用呢?接下来,我将为大家详细介绍。 首先,让我们来了解一下软件。软件…...
JVM监控及诊断工具-GUI篇
文章目录 JVM监控及诊断工具-GUI篇工具概述JConsoleVisual VM再谈内存泄漏Java中内存泄漏的8种情况Arthas(阿尔萨斯)康师傅使用阿尔萨斯的例子help指令 JVM监控及诊断工具-GUI篇 工具概述 使用上一章命令行工具或组合能获取目标Java应用性能相关的基础…...
【C++STL基础入门】list基本使用
文章目录 前言一、list简介1.1 list是什么1.2 list的头文件 二、list2.1 定义对象2.2 list构造函数2.3 list的属性函数 总结 前言 STL(Standard Template Library)是C标准库的一个重要组成部分,提供了一套丰富的数据结构和算法,可…...
WSL+vscode配置miniob环境
1.配置WSL Windows Subsystem for Linux入门:安装配置图形界面中文环境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 吸顶效果
吸顶是常见的布局,主要使用的是CustomScrollView 和SliverApp组件实现的 页面布局 overrideWidget build(BuildContext context) {return CustomScrollView(controller: controller.scrollController!,physics: const BouncingScrollPhysics(),slivers: [SliverApp…...
CVPR 2026 手物交互数据生成新SOTA
Project Page: https://gasaiyu.github.io/PAM.github.io/01▪ 在只给定初始姿态、目标姿态和不含外观的物体几何信息的输入下,如何直接生成逼真的手物交互(HOI)视频?▪ 现有方法存在一系列问题:姿态合成方法只能预测 …...
51单片机实战:UART串口通信与数据交互优化
1. UART串口通信基础与51单片机实战价值 我第一次用51单片机做UART通信时,连波特率是什么都搞不清楚,结果电脑发过来的数据全是乱码。后来才发现是单片机定时器初值算错了,这个经历让我深刻理解到串口通信基础的重要性。 串口通信就像两个人用…...
CasRel在电商商品知识图谱中的应用:标题-品牌-品类-功效三元组生成
CasRel在电商商品知识图谱中的应用:标题-品牌-品类-功效三元组生成 1. 理解CasRel关系抽取模型 CasRel(Cascade Binary Tagging Framework)是一个专门从文本中自动提取结构化信息的智能模型。想象一下,你有一大段描述商品的文字…...
VCAM虚拟摄像头:革新移动设备视觉交互的技术探索
VCAM虚拟摄像头:革新移动设备视觉交互的技术探索 【免费下载链接】com.example.vcam 虚拟摄像头 virtual camera 项目地址: https://gitcode.com/gh_mirrors/co/com.example.vcam VCAM虚拟摄像头是一款基于Xposed框架的安卓应用,通过HOOK技术&…...
如何快速上手Notepad--:3步完成跨平台文本编辑器的配置与使用
如何快速上手Notepad--:3步完成跨平台文本编辑器的配置与使用 【免费下载链接】notepad-- 一个支持windows/linux/mac的文本编辑器,目标是做中国人自己的编辑器,来自中国。 项目地址: https://gitcode.com/GitHub_Trending/no/notepad-- …...
抖音直播数据抓取实战:零基础掌握直播间弹幕分析技术
抖音直播数据抓取实战:零基础掌握直播间弹幕分析技术 【免费下载链接】DouyinLiveWebFetcher 抖音直播间网页版的弹幕数据抓取(2024最新版本) 项目地址: https://gitcode.com/gh_mirrors/do/DouyinLiveWebFetcher 想要获取抖音直播间的…...
YOLO X Layout案例集:10类典型文档(发票/简历/论文/合同/说明书)Layout识别效果汇总
YOLO X Layout案例集:10类典型文档Layout识别效果汇总 获取更多AI镜像 想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署…...
比迪丽模型在数据库课程设计中的应用:ER图可视化增强
比迪丽模型在数据库课程设计中的应用:ER图可视化增强 1. 引言 数据库课程设计是计算机专业学生的必修实践环节,其中ER图(实体-关系图)的设计与呈现是核心难点。传统工具绘制的ER图往往显得枯燥抽象,学生难以直观理解…...
如何用ViGEmBus实现Windows内核级游戏手柄模拟:架构解析与实践指南
如何用ViGEmBus实现Windows内核级游戏手柄模拟:架构解析与实践指南 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus ViGEmBus是一款Windows内核模…...
SGLang-v0.5.6优化技巧:合理配置GPU内存利用率
SGLang-v0.5.6优化技巧:合理配置GPU内存利用率 1. 引言 在大模型推理的实际部署中,GPU内存管理往往是决定服务稳定性和性能的关键因素。SGLang-v0.5.6作为专为高效推理设计的框架,提供了精细化的GPU内存控制机制。本文将深入解析如何通过合…...
