自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

分享AutoSAR软件架构和开发笔记,记录从小白到精通的汽车电子与软件的学习经历。

  • 博客(396)
  • 收藏
  • 关注

原创 【Adaptive AutoSAR总目录】- AP从入门到精通实战系列课程【持续更新中...】

是比较有深度的经典AutoSAR的解读作品,结合工具和代码,细扣每个知识点!订阅后可咨询技术问题!🔗《AutoSAR BSW高阶配置》

2023-07-27 01:12:40 1085

原创 总目录- AutoSAR BSW高阶配置【持续更新中...】

是比较有深度的经典AutoSAR的解读作品,结合工具和代码,细扣每个知识点!订阅后可咨询技术问题!AutoSAR BSW高阶配置。

2023-03-28 23:11:27 1999

原创 总目录- AutoSAR从入门到精通实战系列课程【持续更新中...】

欢迎大家订阅《AutoSAR入门和实战系列》,开始前博主先列出AutoSAR学习的大纲,同时这也可以作为大家学习AutoSAR的参考。想学习和及以及的同学们,可以订阅本博客,本博客一直持续更新中。如果想深入或从本质上学习和理解AutoSAR,打开此链接后,,点击左下方【立即订阅】订阅专栏!!!】......

2021-10-14 23:15:39 40452 8

原创 【Adaptive AutoSAR 源码解析01】通信中间件技术总览

具体特定技术的中间件协议(dds,someip)通过继承ProxyFactory,来使用ara::com::InstanceIdentifier。

2024-09-10 00:17:10 48

原创 【uml】graph_legend中的类图怎么看

带红色边框的方框表示未显示所有继承/包含关系的已记录的结构或类。如果图表不适合指定的边界,则图表将被截断。如果一个类包含或被另一个类使用,则使用紫色虚线箭头。箭头标有指向的类或结构可通过其访问的变量。黄色虚线箭头表示模板实例与其实例化的模板类之间的关系。箭头标有实例的模板参数。蓝色箭头用于可视化两个类之间的公共继承关系。带黑色边框的方框表示已记录的结构或类。带灰色边框的方框表示未记录的结构或类。实心灰色方框表示生成图表的结构或类。深绿色箭头用于受保护的继承。深红色箭头用于私有继承。

2024-09-09 23:22:26 110

原创 What are the differences between protected and private inheritance?

【代码】What are the differences between protected and private inheritance?

2024-09-09 23:14:42 205

原创 【通信管理之c++基础01】std::future

【代码】【通信管理之c++基础01】std::future。

2024-09-09 21:37:53 52

原创 string字符会调用new分配堆内存吗

gcc的string默认大小是32个字节,字符串小于等于15直接保存在栈上,超过之后才会使用new分配。

2024-09-08 14:03:31 330

原创 【linux软件基础知识】等待队列

prepare_to_wait() 和 prepare_to_wait_exclusive() 函数将进程状态设置为作为第三个参数传递的值,然后分别将等待队列元素中的独占标志设置为 0(非独占)或 1(独占),最后将等待队列元素 wait 插入到等待队列头 q 的列表中。一旦进程被唤醒,它就会执行 finish_wait() 函数,该函数再次将进程状态设置TASK_RUNNING(以防唤醒条件在调用 schedule() 之前变为真),并从等待队列列表中删除等待队列元素(除非唤醒函数已经完成此操作)。

2024-08-13 00:01:06 135

原创 A const member function

【代码】A const member function。

2024-07-17 22:08:06 202

原创 Writing Bazel rules: data and runfiles

Bazel has a neat feature that can simplify a lot of work with tests and executables: the ability to make data files available at run-time using data attributes. You may have seen these in rules like this:Bazel 有一个巧妙的功能,可以简化测试和可执行文件的大量工作:使用数据属性在运行时使数据文件可用。

2024-07-14 16:53:12 994

原创 Writing Bazel rules: library rule, depsets, providers

在上一篇文章中,我们构建了一个 go_binary 规则,该规则从源列表编译并链接 Go 可执行文件。这次,我们将定义一个 go_library 规则,该规则可以编译其他库和二进制文件可以依赖的 Go 包。本文重点介绍相互通信以构建可由链接器(或类似链接器的操作)使用的依赖关系图的规则。所有代码均来自 v2 分支上的 github.com/jayconrod/rules_go_simple。再说一次,您不需要了解 Go 就可以理解这一点。我只是用 Go 作为例子,因为这就是我的工作。

2024-07-14 15:45:00 881

原创 Writing Bazel rules: simple binary rule

例如,如果您要求进行fetch_repo_test构建,Bazel 将构建一个图,其中fetch_repo_test节点分别依赖于fetch_repo_test.go、:fetch_repo_lib并@org_golang_x_tools_go_vcs//:vcs通过srcs、embed和deps边。好的,今天我们已经讲完了所有的理论。go_binary 在 _go_binary_impl 函数中实现(在此处作为第一个参数传递),Bazel 将在分析阶段针对构建的每个 go_binary 目标调用该函数。

2024-07-13 09:25:26 856

原创 bazel基础知识

构建系统,而不是构建生成器(直接调用编译器)【A build system, not a build generator (invokes directly the compiler)】具有完整的测试功能(测试报告、片状测试处理等)【With full of functionality for testing (test reports, flaky tests handling, etc.)】Bazel核心是用Java编写的,规则和宏是用Starlark编写的【Bazel core is written

2024-07-09 16:53:32 1012

原创 【bazel】 一文读懂Starlark

当我们编写工作区和构建文件时,我们使用一种名为 Starlark 的语言进行编码,它是 Python 的一种自定义变体。现在,对于所有 Python 开发人员来说,请保持您的敬意。Starlark 是 Python 的一种变体 - 即该语言的受限版本。这是专门为 Bazel 设计的。它旨在具有确定性,并设计为并行运行,例如在完全不同的机器上的核心上运行。因此,您最喜欢的一些语言功能可能已被剔除。例如,对于 Starlark,类已从语言中提取。您不能使用 import 语句。相反,您使用自定义加载函数。

2024-07-07 17:32:24 926

原创 【bazel】 创建BazelRC 文件

当您的构建需要几个选项时,您可以创建一个 bazelrc 文件并使用它来将配置选项传递给您的构建。bazelrc 是一个名为 .bazelrc 的隐藏文件。您可以在该文件中提供构建选项,这些选项将应用于所有构建,但您也可以为不同的配置指定标志。这样,您可以在构建时选择配置。

2024-07-07 17:06:56 1017

原创 Variables Reference for vscode

Visual Studio Code 支持在调试、任务配置文件以及一些特定的设置中使用变量替换。这些变量可以使用 ${variableName} 语法在 launch.json 和 tasks.json 文件的某些键和值字符串中使用。

2024-06-30 21:40:36 510

原创 Debugging using Visual Studio Code

对于其他语言和运行时的调试(包括 PHP、Ruby、Go、C#、Python、C++、PowerShell 等),可以在 VS Code Marketplace 中查找调试器扩展,或在顶层的"运行"菜单中选择"安装其他调试器"。您可以在"变量参考"中查看所有预定义变量的完整列表,或者在 launch.json 的字符串属性中使用 IntelliSense (Ctrl+Space) 来浏览可用的变量。可以在"运行和调试"视图的"变量"部分查看变量的值,或者将鼠标悬停在编辑器中变量的源代码上查看。

2024-06-30 18:30:47 778

原创 Configure C/C++ debugging

launch.json 文件用于在 Visual Studio Code 中配置调试器。Visual Studio Code 会生成一个 launch.json (位于项目的 .vscode 文件夹下),其中几乎包含了所有必需的信息。要开始调试,您需要填写 program 字段,指定要调试的可执行文件的路径。这必须同时在 launch 和 attach (如果您计划随时附加到正在运行的实例)配置中指定。生成的文件包含两个部分,一个配置了 launch 调试,另一个配置了 attach 调试。

2024-06-30 12:12:42 806

原创 Bazel plugin for Visual Studio Code

默认情况下,此扩展不会在格式化期间自动修复 lint 警告(lint可用于描述在任何一种电脑程式语言中,用来标记原始码中有疑义段落的工具),但您可以通过启用 Bazel:Buildifier Fix on Format 设置来选择此功能。如果您将 Bazel 安装在系统路径之外的位置,或者您希望在 IDE 中使用其他版本,则应将 Bazel:可执行文件设置设置为 Bazel 可执行文件的位置。单击调试器中的“停止”按钮将终止正在调试的 Bazel 进程,从而允许您停止当前构建。

2024-06-29 23:54:11 1129 1

原创 Using Clang in Visual Studio Code

您可以在tasks.json中定义多个构建任务,并且标记为默认的任务就是播放按钮使用的任务。默认情况下,clang++ 使用 C++98 标准,该标准不支持 helloworld.cpp 中使用的初始化。请确保用“运行 helloworld.cpp”部分中提供的代码块替换您的 task.json 文件的全部内容。最常见的错误原因(例如未定义的 _main,或尝试链接为未知的不支持的文件格式构建的文件等)是当您开始构建或开始调试时 helloworld.cpp 不是活动文件时发生的。

2024-06-29 14:56:44 1016

原创 bazel :Output Directory Layout

Doesn’t collide if multiple users are building on the same box.如果多个用户在同一个盒子上建造则不会发生冲突。Supports building in multiple workspaces at the same time.支持同时在多个工作区中构建。Supports building for multiple target configurations in the same workspace.支持在同一个工作区中构建多个目标配置。

2024-06-23 17:56:56 625

原创 bazel build ‘...‘

By running bazel build ‘…’,您可以构建整个基于 Bazel 的项目,利用 Bazel 的缓存、增量构建和并行执行功能来优化构建过程。此命令是构建和开发基于 Bazel 的应用程序和库的常用起点。

2024-06-23 00:29:41 429

原创 怎么确定编译器使用的c++版本

【代码】怎么确定编译器使用的c++版本。

2024-06-22 22:53:44 67

原创 Clang

Clang 使用 LLVM 的 BSD 许可证进行商业项目,因为它的设计目的并非单独用作单独的编译器。根据阿里巴巴科技进行的性能比较,结果显示 Clang 的前端在编译过程中明显快于 GCC,并且占用的内存更少。Clang 的最新版本是 Clang 12。此外,它保留了主代码的形式。Clang 支持广泛的语言扩展,因为它们与 Microsoft、GCC 和其他知名编译器兼容,可通过 clang 的特定功能增强功能。此外,Clang 使用基于库的架构,因为前端被分成不同的库,可以满足各种需求。

2024-06-22 12:35:32 526

原创 【Bazel 】- Examples to build C++ code

此文件夹是 C++ Bazel 教程的一部分,位于此包将展示如何分阶段构建 C++ 代码。

2024-06-16 18:09:35 355

原创 【Bazel入门与精通】 rules之属性

属性可以为目标的 implementation 提供特定值,也可以引用其他目标,从而创建依赖关系图。

2024-06-10 21:30:04 1164 1

原创 Python01 -分解整包数据到各个变量操作和生成器

Python 的星号表达式可以用来解决这个问题。比如,你在学习一门课程,在学期末的时候,你想统计下家庭作业的平均成绩,但是排除掉第一个和最后一个分数。如果只有四个分数,你可能就直接去简单的手动赋值,但如果有 24 个呢?另外一种情况,假设你现在有一些用户的记录列表,每条记录包含一个名字、邮件,接着就是不确定数量的电话号码。

2024-06-08 20:46:43 241

原创 vruntime

是由系统定时器周期性调用的,无论是在进程处于可运行态,还是被堵塞处于不可运行态。根据这种方式,vruntime 可以准确地测量给定进程的运行时间,而且可知道谁应该是下一个被运行的进程。进行加权计算,最终将上述的权重值与与当前运行进程的 vruntime 相加。计算了当前进程的执行时间,并且将其存放在变量。然后它又将运行时间传递给了。

2024-06-03 00:31:56 93

原创 【linux软件基础知识】执行进程切换和switch_to

进程切换可能只发生在精心定义的点: schedule()函数。这里,我们仅关注内核如何执行一个进程切换,从本质上说,每个进程切换由两步组成,

2024-06-02 15:27:57 104

原创 【linux软件基础知识】与调度相关的进程描述符

如果进程的优先权等于k(其取值范围是0到139),run_list字段把该进程链入优先级为k的可运行进程的链表中。80x86 体系结构包括了一个特殊的段类型,叫任务状态段 (Task State Segment,TSS来存放硬件上下文。尽管Linux 并不使用硬件上下文(参见下文)切换,但是强制它为系统中每个不同的 CPU 创建一个TSS。在每次进程切换时,被替换进程的硬件上下文必须保存在别处。

2024-06-01 18:28:29 104

原创 【linux软件基础知识】链表数据结构

新链表是用LIST_HEAD(list_name)宏创建的。如上图中的(b)空链表所示,它申明类型为 list head的变量name,该变量作为新链表头的占位符。LIST_HEAD(list_name)宏还初始化 list head数据结构的 prev和next 字段,让它们指向list_name 变量本身。代码如下把 n指向的元素插入 P 所指向的特定元素之后 (为了把n插人在链表的开始, set p to the address of the list head.)

2024-06-01 16:08:42 139

原创 【linux软件基础知识】数据结构 runqueue

每个数据结构都表示一个可运行进程的集合,并包括 140个双向链表头(每个链表对应一个可能的进程优先级,0-99 for real time,100-139 for normal process)、一个优先级位图(通过一个bitmask 去记录对应的优先级下的queue 是否为空)和当前集合中所包含的进程数量的计数器。系统中的每个 CPU都有它自己的运行队列,所有的runqueue结构存放在 the runqueues per-CPU variable。数据结构之一:对应于包含活动进程的可运行进程的集合。

2024-06-01 16:08:25 159

原创 【linux软件基础知识】linux进程的状态和转移

最终状态:由于父进程刚发出 wait4)或waitpid()系统调用,因而进程由系统删除。为了防止其他执行线程在同一个进程上也执行wait()类系统调用(这是种竞争条件),而把进程的状态由僵死 (EXIT ZOMBIE) 状态改为僵死撤消状态(EXIT DEAD)。还有两个进程状态是既可以存放在进程描述符的state字段中,也可以存放在exit state字段中。

2024-05-26 11:40:43 85

原创 【linux软件基础知识】完全公平调度(2)

假设一个进程具有默认的 Nice 值(零),而另一个进程的 Nice 值为 5。这种分配可确保具有较高 Nice 值的进程与具有较低 Nice 值的进程相比,获得较小比例的 CPU 时间。如果两个可运行进程的Nice 值分别为 10 和 15,则分配的时间片仍将分别为 15 毫秒和 5 毫秒。在两个可运行进程具有不同的好值的情况下,完全公平调度程序 (CFS) 根据权重为每个进程分配不同比例的处理器时间。CFS根据进程的权重动态调整时间片,旨在根据进程的相对优先级提供公平和比例的资源分配。

2024-05-13 00:29:24 67

原创 【linux软件基础知识】完全公平调度

CFS根据每个进程相对于所有可运行线程总权重的权重为每个进程分配一个“时间片”。CFS 的目标是近似“无限小”的调度持续时间,称为目标延迟。较小的目标延迟可以提高交互性并接近完美的多任务处理,但其代价是更高的切换开销和可能更低的总体吞吐量。假设目标延迟设置为 20 毫秒,并且有两个具有相同优先级的可运行任务,则每个任务将运行 10 毫秒,然后被另一个任务抢占。这种时间片的平等分配确保了任务之间的公平性,无论其各自的优先级如何。如果有四个相同优先级的任务,则每个任务的时间片将减少到5毫秒。

2024-05-13 00:20:44 78

原创 【linux软件基础知识】调度场景

nicenice。

2024-05-12 13:43:23 61

原创 【linux软件基础知识】如何使用 run_list 字段将任务放入就绪队列中

是一个特殊的任务结构,代表Linux内核中的初始进程(也称为进程号0或空闲进程)。它是任务组的领导者,并作为任务管理子系统的起点。struct list_head是Linux内核中为了方便链表操作而定义的一个数据结构。字段在Linux内核中常用来表示任务在调度队列中的位置,例如就绪队列或各种优先级队列。表示内核中任务或进程的进程控制块 (PCB)。,分别指向链表中的上一个和下一个元素。,这表明它是链表实现的一部分。在给定的代码片段中,

2024-05-11 23:56:26 192

原创 【linux软件基础知识】内核代码中的就绪队列简化示例

在内核代码中,就绪队列通常使用允许高效插入和删除进程的数据结构来表示。用于表示就绪队列的一种常见数据结构是链表。它更新ready_queue_head指针以指向队列中的下一个任务。函数通过遍历链表直至到达末尾并将任务追加到就绪队列中来添加任务。如果就绪队列为空,则该任务成为队列的头。在这个例子中,每个进程都由一个task_struct结构表示,其中包含进程控制所需的字段。的next指针指向NULL,表明它是队列中的最后一个任务。的下一个指针,确保加入到就绪队列的。字段是指向就绪队列中下一个。

2024-05-11 23:35:55 118 1

原创 【linux软件基础知识】Linux 中的实时进程

Linux 中的实时进程与实时优先级相关联,实时优先级的值范围为 1(最高优先级)到 99(最低优先级)。Linux 调度程序对待实时进程的方式与传统进程不同。值得注意的是,实时进程由于其高优先级和抢占低优先级进程的能力,需要谨慎使用,以避免对系统上其他关键任务的执行产生负面影响。

2024-05-11 00:12:22 138

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除