自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

玫瑰花店的博客

劝君惜取少年时

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

原创 SomeIP/CommonAPI与Franca IDL使用教程(一)

SOME/IP(Service-Oriented Middleware over IP)是一种基于IP网络的通信协议,旨在支持汽车电子系统和嵌入式系统之间的通信。它属于AUTOSAR(Automotive Open System Architecture)标准的一部分,被设计用于构建汽车电子领域的分布式系统。SOME/IP 使用底层的 Socket(套接字)机制来进行通信。SOME/IP的消息是通过UDP或TCP协议传输的。

2024-01-03 15:55:22 1297

原创 Ubuntu环境下SomeIP/CommonAPI环境搭建详细步骤

Ubuntu下someip/commonAPI详细安装教程

2023-12-19 20:32:55 1191

原创 Cmake搭建QNX编译环境

cmake设置qnx编译环境

2023-12-05 10:54:32 1518

原创 OpenGL图像加载方式

OpenGL图像加载方式

2023-11-22 10:14:31 175

原创 C++常用23种设计模式总结(三)------装饰模式

装饰模式是一种结构型设计模式,它允许你在运行时为对象动态添加新的行为。该模式通过将对象放入包装器中来实现这一点,这个包装器会实现与被包装对象相同的接口,并且会将所有方法的调用委派给被包装对象。同时,包装器还可以定义一些额外的行为,例如添加新的方法或修改现有方法的行为。装饰模式的主要优点是它允许你在不修改现有代码的情况下扩展对象的功能。这使得代码更加灵活和可维护,因为你可以通过添加新的装饰器来实现新的功能,而不必修改现有的代码。此外,装饰模式还遵循开闭原则,因为它允许你在不修改现有代码的情况下添加新的功能。

2023-08-31 14:16:41 1016

原创 OpengGL教程(一)、渲染一个简单的窗体

OpenGL渲染一个窗体

2023-05-30 20:16:44 170

原创 C++常用23种设计模式总结(二)------观察者模式

观察者模式是一种设计模式,它允许对象之间建立一对多的依赖关系,当一个对象状态发生改变时,它的所有依赖者都会收到通知并自动更新。在C++中,观察者模式可以通过以下步骤实现:创建一个抽象主题类(Subject),该类定义了主题(被观察者)必须实现的方法,包括添加和删除观察者以及通知观察者的方法。创建一个抽象观察者类(Observer),该类定义了观察者必须实现的方法,包括更新方法。创建具体主题类(ConcreteSubject),该类继承了抽象主题类,并实现了具体的方法。

2023-05-11 16:59:08 177 1

原创 C++常用23种设计模式总结(一)------单例模式

单例模式是一种设计模式,它保证一个类只有一个实例,并提供一个全局访问点来访问该实例。这个模式通常用于控制资源的访问,例如数据库连接、线程池等。单例模式通过限制实例化操作并提供访问方法,确保在整个应用程序中只存在一个实例,避免了多个实例之间的冲突和资源浪费。在单例模式中,类的构造函数被私有化,使得外部无法直接实例化该类。同时,在类的内部创建一个私有静态变量来保存唯一的实例,然后提供一个静态方法来访问该实例。这个静态方法会检查实例是否已经存在,如果存在则返回原有实例,否则创建一个新的实例并返回。

2023-04-28 19:46:38 1250

原创 判断两张人脸图片是否是一个人(一)

在这个示例中,首先加载了两张图片,然后对它们进行预处理(包括灰度化、直方图均衡化和缩放),接下来使用Haar级联分类器检测每张图像中的人脸区域。如果检测到的人脸数不是1,则认为不是同一个人。接着创建了一个EigenFaceRecognizer对象,加载了训练好的人脸识别模型,并将预处理后的图像转换为一维向量进行人脸识别。判断两张人脸图片是否是同一个人的任务通常被称为人脸识别(Face Recognition),OpenCV提供了一些现成的工具和方法来解决这个问题。ChatGPT 记录。

2023-04-21 15:22:49 1651

原创 OpenGL 简单动画的创建

OpenGL简单动画绘制

2023-02-14 19:27:29 395

原创 OpenGL,窗体和图形的渲染(包含OpenGL、GLFW、GLAD)

openGL教程

2022-12-29 18:54:20 2515 1

原创 智能指针中的reset和release

智能指针中的reset和release。

2022-12-23 18:54:49 701

原创 C++ map中使用pair构造键值对小记

C++ map中使用pair构造键值对小记。

2022-11-26 15:28:48 684

原创 C++ 获取指定目录下的所有文件名称

【代码】C++ 获取指定目录下的所有文件名称。

2022-11-19 18:01:30 562

原创 C++实现分级LOG打印,不同级别LOG颜色不同

C++分级LOG实现

2022-11-14 11:39:57 855

原创 Ubuntu16.04安装使用protobuf2(一)

本人也是protobuf新手,因项目需要才接触到的。开始按照官方教程整了一整天最新版的proto3,死活配置不成功。所以直接使用了proto2。

2022-10-24 16:47:48 1033

原创 vector<string>遍历

个人学习记录。

2022-08-20 16:23:53 882

原创 C++中map自定义value

C++中map自定义value。

2022-07-16 15:17:37 737

原创 C++ find查找结构体数组中的对象方法

C++中通过find方法查找结构体数组中的对象

2022-06-22 11:29:29 1315

原创 图像识别---Windows下anaconda和yolov5安装配置及简单使用

anaconda安装

2021-11-25 20:46:24 1324 3

原创 Windows下目录跳转方法

Windows下目录跳转不能像Linux一样使用cd命令直接跳转。当前是在C盘下面,但是要注意现在并不是在C盘根目录下面,而是在C盘用户目录下面也就是家目录下面。如果想进入C盘根目录执行如下命令即可cd /查看当前目录下的文件指令:dir...

2021-11-22 21:20:06 1430

原创 Windows下Python-openCV学习(四)-------色彩空间与通道

本章简明色彩空间: GRAY色彩空间:cv2.COLOR_BGR2GRAY HSV色彩空间: cv2.COLOR_BGR2HSV 、cv2.COLOR_HSV2BGR通道: 拆分通道:split()方法 合并通道:merge()方法 综合运用拆分通道和合并通道 alpha通道GRAY色彩空间GRAY色彩空间指的就是灰度图,灰度图只有一个色彩通道。灰度图像每个像素都是从黑到白,被分为256个灰度级别,0表示纯黑,1表示纯白。0~255的数值表示不同亮度(即色彩的

2021-11-05 21:47:10 291

原创 PythonNumPy模块详解

NumPy模块openCV中NumPy模块使用详解见我另一篇博客。Windows下Python-openCV学习(三)-------像素获取和NumPy模块什么是NumPy?NumPy 是一个 Python 包。 它代表 “Numeric Python”。 它是一个由多维数组对象和用于处理数组的例程集合组成的库。Numeric,即 NumPy 的前身,是由 Jim Hugunin 开发的。 也开发了另一个包 Numarray ,它拥有一些额外的功能。 2005年,Travis Oliphant

2021-11-04 20:39:21 898

原创 Windows下Python-openCV学习(三)-------像素获取和NumPy模块

本章简明像素获取: 确定像素的位置 获取像素的BGR值 修改像素的BGR值使用NumPy模块操作像素: NumPy模块概述 数组的类型 创建数组:array()方法 操作数组 数组的索引和切片 创建图像 拼接图像讲解像素点的获取我们要如何获取图片中指定位置的像素点信息呢?在Windows下Python-openCV学习(二)-------图像处理基本操作中我们使用cv2.imread方法打开一个图像,其返回值就是图片的相关信息。我

2021-10-30 17:15:41 2006

原创 Windows下Python-openCV学习(二)-------图像处理基本操作

本章简明读取图像: inmread()方法显示图像: imshow()方法 waitKey()方法 destroyAllWindows()方法保存图像: imwrite()方法获取图像属性: shape size dtype讲解读取图像image = cv2.imread(filename,flags)功能: 读取图像参数: filename :要读取图像的完整文件名称,只写文件名表示当前项目路径。可使用带路径

2021-10-28 17:58:13 1491

原创 Windows下Python-openCV学习(一)-------openCV下载安装

环境搭建python和pycharm安装这里就不作记录了。网上教程一大堆。openCV下载和安装CMD下输入:pip install opencv-python验证安装CMD下输入python如果出现换行python>>>如上这种现象,继续输入:import cv2出现>>>这个标志继续输入:import numpy as np出现>>>继续输入exit()退出>>>模式,即说明下载安装成功

2021-10-26 13:33:02 985

原创 if判断类型

if判断的是bool值,布尔值只有0和1,非0就是1,0就是0;#include "stdio.h"int main(){ int a=-1,b=0,c=1; if(a) { printf("a = %d\n",a); } if(b) { printf("b = %d\n",b); } if(c) { printf("c = %d\n",c); } return 0;}输出:a = -2c = 1...

2021-10-20 17:13:48 478

原创 Linux驱动之------中断上下文

中断中断的顶半部(中断的上文)中断的上文就是普通的中断服务函数中断的底半部(中断的下文)如果中断服务函数里面需要写很多东西,甚至还需要有延迟。但是肯定不能直接写在中断服务函数中,否则就违背了中断快进快出的原则。中断的下半部就相当于另开一个线程。在另一个线程中操作,延时、阻塞…都不影响中断的快进快出原则。中断底半部的实现方法中断底半部的实现方法有两种:1、小任务2、工作队列小任务小任务API核心结构体:struct tasklet_struct{ struct ta

2021-10-18 13:33:28 558 2

原创 Ubuntu安装VScode,C/C++头文件红色波浪线

解决方法1、卸载gcc g++sudo apt-get --purge remove gccsudo apt-get --purge remove g++2、更新sudo apt updatesudo apt upgrade3、安装依赖sudo apt-get install libc6-devapt-get install libc6-dev-amd644、安装gcc g++sudo apt-get install gccsudo apt-get install g++5

2021-10-13 15:46:50 2641 2

原创 Kconfig语法详解--结合示例

Kconfig语法bool/tristate/int/hex/string属性 bool 值为y或n tristate 值为y或m或n string 值为字符串 int 值为十进制整数 hex 值为十六进制整数这几个属性一般必有一个。default属性表示缺省值,意思就是系统默认属性help属性这个属性是简介,没有啥实际作用,主要是写一些信息备注一类的示例:我在char目录的Kconfig下添加了一个新的驱动config JASON1 tristate

2021-10-12 18:04:13 1719

原创 内核架构---Makefile、Kconfig、.config文件分析

前提内核是一个大文件,里面有很多的驱动,内核中大部分都是使用DTS和driver机制:即device和driver分开写的,通过platform总线链接在一起。device这里就不过多描述,他主要就是一些设备的资源信息。这篇文章我们主要看driver端,也就是驱动端的架构。具体结构这里我们先描述一些基础知识:1、Makefile文件作用,Makefile文件就是一个编译脚本,最大的特点就是方便,一个目录下面有很多的.c文件,假如没有Makefile的话,就得一个个单独编译,多费事啊!给需要编译的

2021-10-12 10:50:38 589

原创 栈的实现--C语言版本

栈栈 -------------->先进后出记住这点就行了。最开始想过用栈顶指针来进行控制,通过地址的递增或者递减来实现入栈和出栈。但是低地址是栈顶还是高地址是栈顶这点无法确定。所以还是使用栈中的变量数量模拟来判定位置的。源码:#include "stdio.h"#include "stdlib.h"#define STACK_SPACE 10typedef struct Stack_list{ int * Stack_Space;//栈空间 int Stack_top;

2021-10-11 17:55:07 152

原创 C语言--实现线性表(动态内存分配)

线性表和链表不明白链表的可以看我前几个博客:链表基础1(超简单)–创建一个长度为n的单链表链表基础2(超简单)–单链表的插入和删除链表基础3(超简单)–单链表的逆序链表基础4(超简单)–创建一个长度为n的双向链表(代码可运行)链表基础5(超简单)–链表写入文件链表:是一种链式存储结构,链表每个节点的空间并不是连续的,而是通过指针把每个节点的空间串在一起。线性表:空间是连续的。源码:主要思想就是:创建一个指针,然后根据需要不停的给这个指针空间扩容。每个元素的空间地址是连续的。#i

2021-10-09 15:40:07 1199 1

原创 链表基础5(超简单)--链表写入文件

链表基础部分可以看我以前写的:链表基础1(超简单)–创建一个长度为n的单链表链表基础2(超简单)–单链表的插入和删除链表基础3(超简单)–单链表的逆序链表基础4(超简单)–创建一个长度为n的双向链表(代码可运行)#include "stdio.h"#include "stdlib.h"typedef struct linked_list{ int data; struct linked_list *pnext;}link;link *pnew;link *ptmp;li

2021-09-30 19:01:55 4007 2

原创 AICL限流器详解

在Android-charge开发中AICL指的是什么?AICL全称:Auto Input Current Limited (自动输入限流器)自动输入电流限制的功能:能够根据输入电源能够提供的最大电流选择充电电流,能够将USB/AC/DC充电器相容。根据充电芯片设定一充电输入门限电压值,比如4.75V,当充电芯片的输入电压大于该门限电压值时,设置充电电流;当输入电压没有下降或是稍有下降但高于该门限电压值时,每次以IOOmA逐级提高充电器的输出电流,检测充电芯片的输入电压是否小于门限电压值,每次时

2021-09-28 10:05:35 1543

原创 ❤Linux下IIC驱动详解

参考资料:https://www.yuanzige.com/简介I2C 是很常见的一种总线协议, I2C 是 NXP 公司设计的, I2C 使用两条线在主控制器和从机之间进行数据通信。一条是 SCL(串行时钟线),另外一条是 SDA(串行数据线),这两条数据线需要接上拉电阻,总线空闲的时候 SCL 和 SDA 处于高电平。 I2C 总线标准模式下速度可以达到 100Kb/S,快速模式下可以达到 400Kb/S。 I2C 总线工作是按照一定的协议来运行的,接下来就看一下 I2C 协议。I2C 是支持多

2021-09-22 18:14:33 1063

原创 platform平台设备总线二(device-tree和driver匹配)

在上一章讲了platform平台设备总线一(device和driver的匹配)但是在现实中驱动开发,基本上设备端是不需要我们编写的,设备端的信息都存储在DTS中,这样我们的驱动端要如何匹配device-tree的信息呢?这章为你娓娓道来。本章参考:正点原子Linux开发指南。一、内核里面结构体使用方法:像一般情况下我们使用结构体,如下:内核中有这样一个结构体:struct platform_driver { int (*probe )(struct platform_device *);

2021-09-18 14:58:40 683

原创 platform平台设备总线一(device和driver的匹配)

一、总线的作用?在 Linux 内核 的设备驱动模型中,关心总线、设备和驱动这 3 个实体,总线将设备和驱动绑定。 在系统每注册一个设备的时候, 会寻找与之匹配的驱动; 相反的, 在系统每注册一个驱动的时候,会寻找与之匹配的设备,而匹配由总线完成。一个现实的Linux 设备和驱动通常都需要挂接在一种总线上,对于不属于某一实际总线的设备,比如 led, lcd,rtc 等设备, 系统为了对它们进行统一管理, 虚拟出了一条总线出来,称为 platform(平台) 总线, 相应的设备称为 platform_de

2021-09-17 16:24:11 999

原创 DTS设备树学习

DTS的简介可以看这个博主的博客:https://great.blog.csdn.net/article/details/89847843设备节点node-name@unit-addressnode-name:指节点的名字unit-address:一般表示设备的地址或寄存器首地址,如果某个节点没有地址或者寄存器的话可写0label: node-name@unit-address引入 label 的目的就是为了方便访问节点,可以直接通过&label 来访问这个节点,比如通过&

2021-09-14 17:27:07 301

原创 Python中使用pip指令安装的包的路径

查看pip安装的所有包pip list最好在使用pip安装的时候,先跳转到Python安装目录下面,然后使用pip命令安装,这样安装的包都在那个路径下面。pip show xxx(包名)卸载相关的包pip uninstall xxxpip2 uninstall xxx python2用pi3 uninstall xxx python3用比起这些我更喜欢直接在文件夹下面删除...

2021-09-10 10:42:49 1261

空空如也

空空如也

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

TA关注的人

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