- 博客(36)
- 资源 (3)
- 收藏
- 关注
原创 c++ 开发中读写yaml配置文件
4、创建自己测试用的文件夹,将yaml-cpp目录下面的include 目录拷贝到测试目录下,将编译后的动态库也拷贝到测试目录下,同事目录下在编写三个文件,分别为CMakeLists.txt、config.yaml、main.cpp。1、yaml-cpp 是一个开源库,地址在 github 上,https://github.com/jbeder/yaml-cpp。2、进入到yaml-cpp目录,新建一个build目录。获取yaml-cpp源码。在ubuntu中可以输入。
2023-04-04 17:32:19 1520
原创 Linux驱动Day08
一、Linux 内核配置系统1、Makefile 文件:分布在 Linux 内核源码中的 Makefile 文件,定义了 Linux 内核的编译规则。2、Kconfig文件给用户提供配置选择的功能。3、相关配置工具menuconfig 。4、Menuconfig 的操作Linux 的裁减配置是通过 menuconfig 工具来实现的。5、 Menuconfig 发展历史简介在 Linux 发展过程中,配置内核可以使用以下工具:① #make config这是基于文本的最为传统的配置界
2021-07-06 15:10:00 158
原创 Linux驱动Day06
一、Linux内核结构1、System Call Interface为用户空间提供了一套标准你的系统调用函数来访问Linux内核。2、Process Manahement进程管理是创建进程,停止进程,并控制他们之间的通信,还包括进程调度,控制活动进程如何共享CPU。3、Memory Management内存管理的主要作用是控制多个进程安全的共享内存区域。4、Virtual File Systems虚拟文件系统,隐藏各种文件系统的细节,为文件系统提供统一的接口。...
2021-07-04 14:50:35 71
原创 Linux驱动Day05
一、相关概念的了解1、高速缓存cache①它是位于CPU和主存之间的高速存储子系统。②它可以提高存储器的平均访问速度,从而使存储器的速度的CPU的速度相匹配。2、内存管理单元它是虚拟地址到物理地址的转换。3、虚拟内存虚拟存储器的空间大小取决于计算机的访存能力而不是实际外存的大小。它使存储系统既具有相当于外存的容量有接近于主存的访问速度。...
2021-07-04 14:28:35 98
原创 Linux驱动Day04
一、Linux驱动概述1、常用基本概念①uboot是一个引导程序,在系统启动以后最先执行的一个程序,初始化系统,并将Linux内核加载到内存中那个运行,linux内核运行时会初始化内存、进程栈区已经本身的驱动等,Linux内核启动最后会挂载文件系统,2、Linux驱动程序是什么?3、Linux驱动程序的基本认识Linux驱动程序包含三种:字符设备驱动、块设备驱动(包括U盘、硬盘)、网络设备驱动(以太网、WIFI)。4、写设备驱动对设备操作的三部曲①通过原理图找到设备连接的PIN脚。②根据该
2021-07-02 22:15:04 124
原创 二、wireshark设定捕获选项
如上图所示,Wireshark使用多个不同的基准时间或文件大小的触发器,来管理保存为文件的集合。红色框中选中是每抓取1k的大小就保存一下文件,蓝色框选中是每抓取1s保存一下,绿色框是每抓取一个小时保存一下。而黄色框是环状缓冲,允许保存制定一个特定的文件数量。一旦超过了这个数量,就会用新数据覆盖最老的数据。上图为捕获接口的输入标签页。可以选择要捕获的网卡信息。上图为选项标签页,包含着一些其他的抓包选项,包括选项设置,解析名称和自动停止 捕获。红色框中为选择自动停止捕获的选项。...
2020-12-30 17:56:00 2481
原创 TCP/IP网络知识——应用层
一、应用层的定位在TCP/IP中的5层结构中,位于最上部的是应用层,其作用就是将计算机之间的信息交流转换为用户可以使用的“通信服务"的状态。二、应用程序应用层中,规定有通信服务中服务器与客户之间交流故意则的协议。这个协议叫做应用协议。三、应用层包头应用层中附加的包头叫做应用层包头,这里写入了实现服务最重要的”请求与响应“的相关信息。...
2020-12-27 10:20:28 2065
原创 一、wireshark抓包原理
一、什么样的“包”能够被wireshark抓住?1、本机说明:即直接抓取进出本机网卡的流量包。这种情况下,wireshark会绑定本机的一块网卡。2、集线器说明:用于抓取流量泛洪,冲突域内的数据包,即整个局域网的数据包。3、交换机说明:①端口镜像这种方式下,交换机严格按照tenlnet表和mac地址表进行转发数据包。当pc2和pc3通信的时候,默认是pc1是无法抓取数据包的,但是可以通过在交换机上设置策略,即端口镜像。这样Pc2和Pc3通信的数据包就被复制一份到连接pc2的那个交换机端口
2020-12-25 14:10:29 5172
原创 Python isinstance() 函数
一、简介1、isinstance() 函数来判断一个对象是否是一个已知的类型,类似 type()。2、isinstance() 与 type() 区别:type() 不会认为子类是一种父类类型,不考虑继承关系。isinstance() 会认为子类是一种父类类型,考虑继承关系。如果要判断两个类型是否相同推荐使用 isinstance()。二、语法isinstance(object, classinfo)三、参数object -- 实例对象。classinfo -- 可以是直接或间接类名、基
2020-10-26 11:05:21 514
原创 C++中Struct 的加强
Struct 的加强先来声明一个结构体类型,如下所示:struct Student{ char name[20]; int age;};C语言的struct 定义了一组变量的集合,C编译器并不认为这是一种新的类型,所以在定义变量结构体变量时一定要在前面加上struct关键字,例如:struct Student stu = {"wang",10};通常我们会用typedef来对结构体类型进行重命名,从而避免在每次定义变量时都要加上struct关键字,但是在C++中,认为st
2020-10-24 16:41:11 169
原创 冯诺依曼结构与哈佛结构的区别
主要区别:冯·诺依曼结构也称普林斯顿结构, 是一种将程序指令存储器和数据存储器合并在一起的存储器结构。 程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置, 因此程序指令和数据的宽度相同。而哈佛结构将程序指令和数据分开存储, 指令和数据可以有不同的数据宽度。 此外, 哈佛结构还采用了独立的程序总线和数据总线, 分别作为CPU与每个存储器之间的专用通信路径, 具有较高的执行效率。 下图描述了冯·诺依曼结构和哈佛结构的区别。...
2020-09-09 08:04:13 3117 1
原创 关于memset函数的使用误区
一、背景最近在练习中使用到了memset函数,程序如下:上述程序代码本想将数组a初始化赋值为1.但实际运行效果如下图:二、原因分析1、函数原型memset函数的原型为void *memset(void s, char ch, size_t n);函数解释:将s中前n个字节 用 ch 替换并返回 s 。memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法。2、问题分析如果用memset(a,1,20);(实际上与memset(a,1,5
2020-09-06 22:26:48 412 1
原创 STM32低功耗学习
一、STM32低功耗模式①运行模式,特点是不省电(while(1))②睡眠模式,特点是内核休眠(关闭内核时钟)③停止模式,特点是内核外设休眠④待机模式,特点是停止供电。1、STM32睡眠模式详解进入方式:**内核寄存器SLEEPDEEP = 0,调用WFI或WFE进入睡眠模式。SLEEPONEXIT = 0 立即睡眠,SLEEPONEXIT = 1,退出睡眠。唤醒方式:_WFI任意中断唤醒。_WFE任意事件唤醒。睡眠:关闭内核时钟、不关闭外设、唤醒后会保持睡眠前的内核寄存器以及内存数据。
2020-09-05 22:15:16 324 1
原创 Linux驱动Day03
一、创建设备文件今天主要学习两个函数1. class_create/**************************************************** *功能:在/sys/class目录下创建目录文件(以name命名) *参数: * @owner THIS_MODULE * @name 目录名字 *返回值:成功返回struct class *结构体指针,失败 * 返回ERR_PTR,long IS_ERR(const void *
2020-08-15 00:43:22 93
原创 Linux驱动Day02
一、设备的分类1、设备可以分为:字符设备、块设备、网络设备。字符设备:以字节流的形式进行数据读写。块设备:存储设备。网络设备:网卡。2、描述字符设备的结构体cdev<linux/cdev.h> struct cdev { struct module *owner; //THIS_MODULE struct file_operations *ops; //操作方法集 dev_t dev; //设备号 unsigned int cou
2020-08-14 00:18:02 893 1
原创 Linux驱动Day01
【一】驱动介绍1、作用:配置硬件设备处于某种模式,或提供配置硬件的方法。提供操作硬件设备的接口。2、 地位:内核与设备的桥梁。【二】内核模块介绍1、什么是内核模块.ko结尾的二进制文件。2、内核模块的三要素a、入口(加载)函数注册 —>>> module_init();<linux/init.h> typedef int (*initcall_t)(void); module_init(initfn) int __init xx
2020-08-12 21:14:12 253 1
原创 PyQt5学习之字体对话框
字体对话框(2020年8月11号)import sysfrom PyQt5.QtCore import *from PyQt5.QtGui import *from PyQt5.QtWidgets import *class QFontDialogDemo(QWidget): def __init__(self): super(QFontDialogDemo,self).__init__() self.initUI() def initUI(se
2020-08-11 23:18:26 285
原创 PyQt5学习之学会使用QDialog显示对话框
学会使用QDialog显示对话框(2020年8月10号)import sysfrom PyQt5.QtCore import *from PyQt5.QtGui import *from PyQt5.QtWidgets import *class QDialogDemo(QMainWindow): def __init__(self): super(QDialogDemo,self).__init__() self.initUI() def in
2020-08-10 23:31:49 1176
原创 PyQt5学习之创建并使用菜单
创建并使用菜单(2020年8月8号)import sys, mathfrom PyQt5.QtWidgets import *from PyQt5.QtGui import *from PyQt5.QtCore import *class Menu(QMainWindow): def __init__(self): super(Menu,self).__init__() bar = self.menuBar() #目的是获取菜单栏 f
2020-08-08 22:02:28 587
原创 将车牌号转换成十六进制数
将车牌号转换成(2020年8月8号)BusNum = "鄂12345"print(''.join([hex(b)[2:] for b in BusNum.encode('gbk')]))
2020-08-08 00:10:58 1543
原创 十六进制数据转换成车牌号
十六进制数据转换成车牌号(2020年8月7号)from binascii import *import binasciiprovince = "bcbd"verStr = binascii.unhexlify(province)verArea = "%s"%(verStr[0:2].decode('gbk'))LetterAndNum = '\x46\x31\x32\x33\x34\x35'print("%s%s" % (verArea, LetterAndNum.encode('utf-8
2020-08-07 23:57:31 1341
原创 PyQt5学习之设置不同的时间和日期-1
设置不同的时间和日期(2020年8月7号)import sys, mathfrom PyQt5.QtWidgets import *from PyQt5.QtGui import *from PyQt5.QtCore import *class DateTimeEdit1(QWidget): def __init__(self): super(DateTimeEdit1, self).__init__() self.initUI() def in
2020-08-07 22:45:34 717
原创 PyQt5学习之使用日历控件
使用日历控件(2020年8月6号)import sys, mathfrom PyQt5.QtWidgets import *from PyQt5.QtGui import *from PyQt5.QtCore import *class MyCalendar(QWidget): def __init__(self): super(MyCalendar, self).__init__() self.initUI() def initUI(self):
2020-08-06 23:15:37 602
原创 PyQt5学习之会使用剪贴板
使用剪贴板(2020年8月5号)import sys, mathfrom PyQt5.QtWidgets import *from PyQt5.QtGui import *from PyQt5.QtCore import *class ClipBoard(QDialog): def __init__(self): super(ClipBoard, self).__init__() textCopyButton = QPushButton('复制文本')
2020-08-05 21:29:30 322
原创 PyQt5学习之在窗口上绘制文本
在窗口上绘制文本(2020年8月4号)import sysfrom PyQt5.QtWidgets import QApplication,QWidgetfrom PyQt5.QtGui import QPainter,QColor,QFontfrom PyQt5.QtCore import Qtclass DrawText(QWidget): def __init__(self): super(DrawText,self).__init__() self
2020-08-04 22:25:16 1640
原创 线程池的使用
一、线程池的简介线程池就是首先创建一些线程,它们的集合称为线程池。使用线程池可以很好地提高性能,线程池在系统启动时即创建大量空闲的线程,程序将一个任务传给线程池,线程池就会启动一条线程来执行这个任务,执行结束以后,该线程并不会死亡,而是再次返回线程池中成为空闲状态,等待执行下一个任务。二、为何引入线程池传统多线程方案中我们采用的服务器模型则是一旦接受到请求之后,即创建一个新的线程,由该线程执...
2019-08-08 10:56:51 263
嵌入式软件工程师必做面试题汇总(内包含多家名企面试题).zip
2020-08-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人