03 find_package用法
find_package()的用法作用主要就是通过库对应的.cmake文件(由库的维护者提供,一般用不着自己写),获得第三方库的头文件以及动/静态库文件的路径,方便我们直接添加到我们自己的工程里面 <PackageName>_FOUND :找到了就是True,没找到就是未设定 <PackageName>_INCLUDE_DIR :头文件目录 <PackageName>_LIBRARY...
05 CMake工程层次
CMake工程结构如果项目比较简单,比如只有一个CMakeLists.txt或者projet,那么就不用特别关心这个。但是如果一个大工程,有多个可执行文件,或者又有可执行文件,又有静态/动态库,则需要写多个CMakeLists.txt 多个CMakeLists如何写一般最外层的CMakeLists写: 1.设置编译后输出的位置 2.设置整个工程的C++版本 3.add_subdirectory() 什么时候写projet()一般只有最外层的CMakeLists写一下projet()。每写一个projet(),就会生成一个.sln文件。单独打开就如右图所示。左图是最外层的.sln文件 如果用VS的话,每个project就可以单独编译,但如果用的是VSCode的话,即使不写project每个subdirectory也可以单独编译,所以就没必要写了
软件开发流程
软件开发基本流程软件开发流程是标准化的项目实施框架,核心围绕 “需求落地 - 开发实现 - 测试验证 - 上线运维” 闭环推进,结合你当前的 i.MX6ULL 智能车载终端项目,具体流程及关键节点如下: 1.需求阶段 需求收集与调研:对接产品、车载场景用户(车企 / 终端用户),明确核心诉求(如你文档中的导航、CAN 总线交互、宽温适配等),同步调研行业标准(GB/T 车载规范)、竞品功能、技术可行性(i.MX6ULL 芯片性能边界)。 需求分析与梳理:筛选有效需求,区分核心功能(必做)与可选功能(选配,如 4G/5G 模块对接),明确需求优先级,规避功能冲突(如多媒体与倒车影像切换逻辑)。 需求文档输出:即你当前的《需求规格说明书》,明确功能、硬件适配、性能、合规性等要求,作为全流程依据,需组织多方评审(开发、测试、产品)确认,避免歧义。 需求分解:将整体需求拆解为可落地的细分任务,按模块拆分(如软件层拆分为驱动层、中间件层、应用层),每个任务明确目标、产出物、时间节点,适配 i.MX6ULL 项目的硬件绑定特性(如 CAN 驱动开发、LVDS...
docker
Docker安装Windows下安装包及下载的镜像之类的默认是放在C盘,通过以下方式可以安装到别的盘 1start /w "" "Docker Desktop Installer.exe" install -accept-license --installation-dir="F:\Docker" --wsl-default-data-root="F:\Docker\wsl-data" --windows-containers-default-data-root="F:\Docker-windows-data" 参考:Windows装Docker至D盘/其他盘(最新,最准确,直接装) - HaimaBlog - 博客园 常用CLI指令镜像相关 docker pull:下载一个镜像 docker build -t :编译一个镜像 docker imags:查看所有已有镜像 docker image rm :删除一个镜像 docker commit...
wsl
WSL遇到的问题1.开启WSL2后,VMWare老卡死 VMware虚拟机经常性卡死,打开运行一段时间后卡死 WSL、Docker、Hyper-V、VMWare共存方案 WSL2和VMWare因为Hyper-V虚拟化的原因,不能很好的共存,如果要开启WSL2的话,就得开启Hyper-V虚拟化,这可能导致VMWare运行的时候卡死。所以如果要用VMWare的话,就暂时把Hyper-V关了吧 Hyper-V开/关方法: 1234# 开启:bcdedit /set hypervisorlaunchtype auto # 然后重启# 关闭:bcdedit /set hypervisorlaunchtype off # 然后重启 重启后可以在终端中输入wsl验证,如果不能进ubuntu的终端,就说明关闭成功了 2.WSL里的虚拟磁盘占用空间太大,及时删掉磁盘里的内容,也不会自动回收空间 解决办法: 首先通过wsl --shutdown关掉所有实例 关闭之后通过wsl -l -v确认关闭成功(都是Stopped状态) 然后用任务管理器关Docker...
08 pkg config
pkg-configpkg-config是一个命令行工具,使用它可以快速查看当前环境中安装了哪些第三方库,方便在一个库没提供.cmake文件时链接该库 核心用法12345678910pkg-config --list-all # 列出所有库pkg-config --modversion 库名 # 查看版本pkg-config --cflags 库名 # 查看编译标志pkg-config --libs 库名 # 查看链接标志pkg-config --variable=libdir 库名 # 库文件目录pkg-config --variable=includedir 库名 # 头文件目录pkg-config --variable pc_path pkg-config 注意事项 不是所有库都注册了 pkg-config 信息,有些库可能没有 .pc 文件,但是使用apt安装的带-dev的包一般都带.pc文件 如果找不到某个库,可能是因为: 库确实没有安装 库没有提供 .pc 文件 .pc 文件不在 pkg-config...
10 包管理工具
包管理工具在Linux系统中,包管理工具是软件安装、升级、卸载和维护的核心组成部分,它们极大地简化了软件管理过程。不同的Linux发行版采用了不同的包管理体系,比如Debian系用的是apt、RetHat系用的是yun… dpkg dpkg是Debian系列发行版中最底层的包管理工具,它直接面向本地.deb格式的软件包 dpkg的主要职责是对单个软件包进行操作,例如安装、卸载、查看包信息等 它本身并不具备自动解决依赖关系的能力,因此在使用dpkg安装软件时,如果该软件依赖的其他库或组件尚未安装,dpkg只会报错并终止操作,需要用户手动处理依赖问题 123456789101112131415161718192021222324# 安装本地的.deb软件包,如果依赖缺失会报错但不会自动解决dpkg -i package.deb# 卸载已安装的软件包(但不删除/etc下的配置文件,适合以后重新安装)dpkg -r package_name# 完全卸载软件包(同时删除配置文件)dpkg -P package_name#...
03 计算机组成原理
...
02 计算机体系结构
计算机体系结构什么是体系结构 在讨论计算机设计时,有几个概念经常被混在一起。实际上,它们对应的是从不同抽象层次、不同视角去看同一台计算机。自上而下来看,可以大致分为以下几个层级。 1.体系结构(Architecture)/ 指令集架构(ISA) 体系结构 = 软件眼里的CPU 这一层是从软件视角来看计算机,ISA的内容包括: 指令集:属于RISC还是CISC、支持的指令(如 ADD、MOV)、指令格式、操作数类型 寄存器结构:通用寄存器、状态寄存器(如 x86 的 EFLAGS、ARM 的 CPSR),各寄存器宽度 内存管理:虚拟内存映射,地址空间、对齐要求、内存访问语义、字节序 中断与异常模型:异常类型(如缺页、非法指令)、处理流程 特权级别:定义特权模式(如 x86 的 Ring 0-3、ARM 的...
05 外设总线协议
外设总线协议UART总线概述定义: UART(Universal Asynchronous Receiver/Transmitter)通用异步收发器:异步、串行、全双工通信 USART(Universal Synchronous/Asynchronous Receiver/Transmitter)通用同步/异步收发器:同步或者异步、串行、全双工通信 异步时靠波特率进行数据同步 同步时需要额外的CLK线 UART和USART不是总线,是点对点通信 特点: 点对点通信 传输距离较远(可达几十米) 硬件简单,成本低 硬件结构 信号线 作用 TX 发送数据线 RX 接收数据线 GND 共地线 UART原始输出是TTL电平,可通过PHY芯片转成别的电平,比如RS232、RS485、USB 通信时序数据帧格式 起始位:1位低电平 数据位:5-9位(通常8位) 校验位:可选(奇校验/偶校验/无校验) 停止位:1-2位高电平 波特率 双方必须约定相同的波特率(如9600,...







