自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 收藏
  • 关注

原创 无线视频监控210815

无线视频监控二,硬件原理(一)自然景观->摄像头模块->接口->S3C2440的摄像头控制器->LCD(二)ov7740(摄像头模块)核心部件:ov7740sensor(芯片)输入信号:自然景观等的模拟型号输出信号: RAW RGB、YUV格式的数字信号输出格式为:RAW RGB、YUV输出分辨率为:VGA(640480)、QVGA(240320)、CIF(352*288)、更小的任意大小有效感光阵列的大小:656*488 = 320128(30W)镜头的大小:1

2021-09-18 09:51:59 353

原创 华清笔试疑问

华清笔试疑问一,sizeof(整数)结果为4#include <stdio.h>int main(void){ printf("if sizeof error = %d\n", sizeof(13)); //输出结果为4 printf("if sizeof error = %d\n", sizeof(100)); //输出结果为4 return 0;}/**错误写法*printf("if sizeof error = %d\n", sizeof(a));

2021-06-16 21:36:02 96

原创 韦东山视频监控210606

视频监控一,V4L2框架:video for linux version2(一)虚拟视频驱动vivi.c分析:1,分配video_device2,设置结构体3,注册:video_register_device(二)vivi_intt vivi_create_instance v4l2_device_register //不是主要,只是用于初始化一些东西,比如自旋锁,引用计数,韦神说,其实函数明改为v4l2_device_init会更好 video_device_alloc //

2021-06-06 21:47:23 136 2

原创 黑马QT210526

210526一,自定义控件封装1,添加新文件 - Qt - 设计师界面类 (.h, .cpp, .ui)2,.ui中设计QSpinBox和QSlider两个控件3,Widget中使用自定义控件,拖拽一个Widget,点击提升为,点击添加,点击提升4,实现功能,改变数字,滑动条跟着移动,信号槽监听5,提供getNum和setNum对外接口6,测试接口二,Qt中的事件1,鼠标事件2,鼠标进入事件 enterEvent3,鼠标离开事件 leaveEvent4,鼠标按下 mousePress

2021-05-26 20:45:32 101

原创 黑马QT210525

QMainWindow一,菜单栏最多有一个(一)QMenuBar * bar = MenuBar();(二)setMenuBar(bar);(三)QMenu * fileMenu = bar->addMenu("文件") 创建菜单(四)QAction * newAction = fileMenu->addAction("创建"); 创建菜单项(五)添加分割线 fileMenu->addSeparator();二,工具栏 可以有多个(一)QToolBar *toolbar

2021-05-25 21:44:39 122 2

原创 黑马QT210524

创建第一个QT程序一,QT简介(一)跨平台图形界面引擎(二)历史1,1991年奇趣科技(三)优点1,跨平台2,接口简单,容易上手3,一定程度上简化了内存回收(四)版本1,商业版2,开源版(五)成功案例1,Linux桌面环境KDE2,谷歌地图3,VLC多媒体播放器4,…二,创建一个QT程序(一)点击创建项目后,选择项目路径以及给项目起名称(二)名称 — 不能有中文,不能有空格(三)路径 — 不能有中文路径(四)默认创建有窗口类,myWidget,基类有三种选择:QWi

2021-05-24 21:54:02 82

原创 唐佐林C++210522

类型转换函数210522一,

2021-05-24 14:55:32 68

原创 唐佐林C++210522

前置操作符和后置操作符210522一,区别(一)i++; //i的值作为返回值,i自增1(二)++i;//i自增1,i的值作为返回值二,意想不到的事实(一)现代编译器产品会对代码进行优化(二)优化使得最终的二进制程序更加高效(三)优化后的二进制程序丢失了C/C++的原生语义(四)不可能从编译后的二进制程序还原C/C++程序三,++操作符重载(一)++操作符可以被重载1,全局函数和成员函数均可进行重载2,重载前置++操作符不需要额外的参数3,重载后置++操作符需要一个int类型的占位

2021-05-22 16:23:16 65

原创 唐佐林C++210522

逗号操作符的分析210522一,逗号操作符(,)可以构成逗号表达式(一)逗号表达式用于将多个子表达式连接为一个表达式(二)逗号表达式的值为最后一个子表达式的值(三)逗号表达式中的前N-1个子表达式可以没有返回值(四)逗号表达式按照从左向右的顺序计算每个子表达式的值二,重载逗号操作符(一)在C++中重载逗号操作符是合法的(二)使用全局函数对逗号操作符进行重载(三)重载函数的参数必须有一个是类类型(四)重载函数的返回值类型必须是引用Class& operator , (const

2021-05-22 15:21:26 73

原创 唐佐林C++210522

逻辑操作符的陷阱一,逻辑运算符的原生语义(一)操作数只有两种值(true和false)(二)逻辑表达式不用完全计算就能确定最终值(三)最终结果只能是true或者false二,本质分析(一)C++通过函数调用扩展操作符的功能(二)进入函数体前必须完成所有参数的计算(三)函数参数的计算次序是不定的(四)短路法则完全失效三,一些有用的建议(一)实际工程开发中避免重载逻辑操作符(二)通过重载比较操作符代替逻辑操作符重载(三)直接使用成员函数代替逻辑操作符重载(四)使用全局函数对逻辑操作符

2021-05-22 14:34:11 57

原创 唐佐林C++210521

智能指针分析一,永恒的话题(一)内存泄漏(臭名昭著的Bug)1,动态申请堆空间,用完后不归还2,C++语言中没有垃圾回收的机制3,指针无法控制所指堆空间的生命周期(二)解决方案1,重载指针特征操作符(->和*)2,只能通过类的成员函数重载3,重载函数不能使用参数4,只能定义一个重载函数...

2021-05-21 22:44:11 50

原创 唐佐林C++210521

经典问题解析三一,关于赋值的疑问(一)编译器为没个类默认重载了赋值操作符(二)默认的赋值操作符仅完成浅拷贝(三)当需要进行深拷贝时必须重载赋值操作符(四)赋值操作符与拷贝函数有相同的存在意义二,一般性原则重载复制操作符,必然需要实现深拷贝!!!三,编译器默认提供的函数class Test{};等价于class Test{public: Test(); Test(const Test&); Test& operator = (const Test&amp

2021-05-21 14:46:51 120 1

原创 唐佐林C++210521

函数对象分析一,存在的问题(一)函数一旦开始调用就无法重来1,静态局部变量处于函数内部,外界无法改变2,函数为全局函数,是唯一的,无法多次独立使用3,无法指定某个具体的数列项作为初始值二,解决方案(一)函数对象1,使用具体的类对象取代函数2,该类的对象具备函数调用的行为3,构造函数指定具体数列项的起始位置4,多个对象相互独立的求解数列项三,函数对象(一)函数调用操作符(())1,只能通过类的成员函数重载2,可以定义不同参数的多个重载函数四,小结(一)函数调用操作符(())是

2021-05-21 11:26:39 69

原创 唐佐林C++210521

数组操作符的重载一,字符串类的兼容性(一)string类最大限度的考虑了C字符串的兼容性(二)可以按照使用C字符串的方式使用string对象string s = "a1b2c3d4e";int n = 0;for(int i = 0; i < s.length(); i++){ if(isdigit(s[i])) { n++; }}二,被忽略的事实(一)数组访问符是C/C++中的内置操作符(二)数组访问符的原生意义是数组访问和指针运算a[n]<–>(a

2021-05-21 10:24:43 60

原创 唐佐林C++210520

C++中的字符串类一,历史遗留问题(一)C语言不支持真正意义上的字符串(二)C语言用字符数组和一组函数实现字符串操作(三)C语言不支持自定义类型,因此无法获得字符串类型二,解决方案(一)从C到C++的进化过程引入了自定义类型(二)在C++中可以通过类完成字符串类型的定义三,标准库中的字符串类(一)C++语言直接支持C语言的所有概念(二)C++语言中没有原生的字符串类型——---------------------------------------------——(三)C++标准库提

2021-05-21 09:28:45 72

原创 唐佐林C++210520

初探C++标准库一,C++标准库(一)C++标准库并不是C++语言的一部分(二)C++标准库是由类库和函数库组成的集合(三)C++标准库中定义的类和对象都位于std命名空间中(四)C++标准库的头文件都不带.h后缀(五)C++标准库涵盖了C库的功能二,小结(一)C++标准库是由类库和库函数组成的集合(二)C++标准库包含经典算法和数据结构的实现(三)C++标准库涵盖了C库的功能(四)C++标准库位于std命名空间中...

2021-05-20 20:31:18 49

原创 唐佐林C++210520

操作符重载的概念一,操作符重载(一)C++中的重载能够扩展操作符的功能(二)操作符的重载以函数的方式进行(三)本质:用特殊形式的函数扩展操作符的功能二,方法(一)通过operator关键字可以定义特殊的函数(二)operator的本质是通过函数重载操作符(三)语法:Type operator Sign(const Type p1, const Type p2){ Type ret; return ret;}Sign为系统中预定义的操作符,如:+,-,*,/,等三,深度挖掘

2021-05-20 17:07:37 69

原创 唐佐林C++

类中的函数重载一,函数重载回顾(一)函数重载的本质为相互独立的不同函数(二)C++中通过函数名和函数参数确定函数调用(三)无法直接通过函数名得到重载函数的入口地址(四)函数重载必然发生在同一个作用域中二,类中的重载(一)构造函数的重载(二)普通成员函数的重载(三)静态成员函数的重载三,本质(一)重载函数的本质为多个不同的函数(二)函数名和参数列表是唯一的标识(三)函数重载必须发生在同一个作用域中四,重载的意义(一)通过函数名对函数功能进行提示(二)通过参数列表对函数用法进行提

2021-05-20 15:42:42 154

原创 唐佐林C++210520

友元的尴尬能力一,友元的概念(一)什么是友元1,友元是C++中的一种关系2,友元关系发生在函数与类之间或者类与类之间3,友元关系是单项的,不能传递二,友元的用法(一)在类中以friend关键字声明友元(二)类的友元可以是其他类或者具体函数(三)友元不是类的一部分(四)友元不受类中访问级别的限制(五)友元可以直接访问具体类的所有成员三,友元的语法(一)在类中用friend关键字对函数或类进行声明class Point{ double x; double y; friend

2021-05-20 15:05:36 98

原创 唐佐林C++210520

二阶构造模式一,关于构造函数(一)类的构造函数用于对象的初始化(二)构造函数与类同名并且没有返回值(三)构造函数在对象定义时自动被调用(四)关于构造函数该知道的真相1,只提供自动初始化成员变量的机会2,不能保证初始化逻辑一定成功3,执行return语句后构造函数立即结束4,构造函数能决定的只是对象的初始态,而不是对象的诞生!!二,半成品对象(一)半成品对象的概念1,初始化操作不能按照预期完成而得到的对象2,半成品对象是合法的C++对象,也是Bug的重要来源三,二阶构造(一)工程

2021-05-20 14:21:59 99

原创 唐佐林C++210520

类的静态成员函数一,使用静态成员变量未完成的需求(一)统计在程序运行期间某个类的对象数目(二)保证程序的安全性(不能使用全局变量)(三)随时可以获取当前对象的数目(Failure)二,在C++中可以定义静态成员函数(一)静态成员函数是类中特殊的成员函数(二)静态成员函数属于整个类所有(三)可以通过类名直接访问公有静态成员函数(四)可以通过对象名访问公有静态成员函数三,静态成员函数vs普通成员函数静态成员函数 | 普通成员函数所有对象共享 yes

2021-05-20 11:25:11 43

原创 唐佐林C++210520

类的静态成员变量一,成员变量的回顾(一)通过对象名能够访问public成员变量(二)每个对象的成员变量都是专属的(三)成员变量不能在对象之间共享二,静态成员变量(一)静态成员变量属于整个类所有(二)静态成员变量的生命期不依赖于任何对象(三)可以通过类名直接访问公有静态成员变量(四)所有对象共享类的静态成员变量(五)可以通过对象名访问公有静态成员变量三,静态成员变量的特性(一)在定义时直接通过static关键字修饰(二)静态成员变量需要在类外单独分配空间(三)静态成员变量在程序内部

2021-05-20 10:30:54 37

原创 唐佐林C++210519

经典问题解析二一,关于析构的疑问(一)单个对象创建时构造函数的调用顺序1,调用父类的构造过程2,调用成员变量的构造函数(调用顺序与声明顺序相同)3,调用类自身的构造函数4,析构函数与对应构造函数的调用顺序相反(二)多个对象析构时1,析构顺序与构造顺序相反二,关于析构的答案1,对于栈对象和全局对象,类似于入栈与出栈的顺序,最后构造的对象被最先析构!!2,堆对象的析构发生在使用delete的时候,与delete的使用顺序相关!!三,关于const对象的疑问(一)1,const关键字能

2021-05-19 22:15:06 57

原创 唐佐林C++210519

神秘的临时对象一,临时对象(一)直接调用构造函数将产生一个临时对象(二)临时对象的生命周期只有一条语句的时间(三)临时对象的作用域只在一条语句中(四)临时对象是C++中值得警惕的灰色地带二,编译器的行为(一)现代C++编译器在不影响最终执行结果的前提下,会尽力减少临时对象的产生!!!三,小结(一)直接调用构造函数将产生一个临时对象(二)临时对象是性能的瓶颈,也是bug的来源之一(三)现代C++编译器会尽力避开临时对象(四)实际工程开发中需要人为的避开临时对象...

2021-05-19 21:07:00 38

原创 唐佐林C++210519

对象的销毁一,一般而言,需要销毁的对象都应该做清理(一)解决方案1,为每个类都提供一个public的free函数2,对象不再需要时立即调用free函数进行清理class Test{ int *p;public: Test() { p = new ini; } void free() { delete p; };}二,析构函数(一)C++的类中可以定义一个特殊的清理函数1,这个特殊的清理函数叫做析构函数2,析构函数的功能与构造函数相反(二)定义:~ClassName()1,

2021-05-19 20:19:24 34

原创 唐佐林C++210519

对象的构造顺序一,对于局部对象(一)当程序执行流到达对象的定义语句时进行构造对象定义->构造二,对于堆对象(一)当程序执行流到达new语句时创建对象(二)使用new创建对象将自动触发构造函数的调用三,对于全局对象(一)对象的构造顺序是不确定的(二)不同的编译器使用不同的规则确定构造顺序四,小结(一)局部对象的构造顺序依赖于程序的执行流(二)堆对象的构造顺序依赖于new的使用顺序(三)全局对象的构造顺序是不确定的...

2021-05-19 17:22:42 34

原创 唐佐林C++210519

初始化列表的使用210519一,C++中提供了初始化列表对成员变量进行初始化语法规则:ClassName::ClassName():m1(v1), m2(v1, v2), m3(v3){ //some other initialize operation}二,注意事项(一)成员的初始化顺序与成员的声明顺序相同(二)成员的初始化顺序与初始化列表中的位置无关(三)初始化列表先于构造函数的函数体执行三,类中的const成员(一)类中的const成员会被分配空间的(二)类中的const成

2021-05-19 16:04:45 61

原创 唐佐林C++210519

对象的构造210519一,对象的初始化(一)从程序设计的角度,对象只是变量,因此:1,在栈上创建对象时,成员变量初始为随机值2,在堆上创建对象时,成员变量初始为随机值3,在静态存储区创建对象时,成员变量初始为0值(二)一般而言,对象都需要一个确实的初始状态1,解决方案(1)在类中提供一个public的initialize函数(2)对象创建后立即调用initialize函数进行初始化(3)存在的问题a,initialize只是一个普通函数,必须显示调用b,如果未调用initialize

2021-05-19 15:18:18 80

原创 唐佐林C++210519

类的真正形态一,类的关键字(一)struct在C语言中已经有了自己的含义,必须继续兼容(二)在C++中提供了新的关键字class用于类定义(三)class和struct的用法是完全相同的二,struct和class的区别(一)在用struct定义类时,所有成员的默认访问级别为public(二)在用class定义类时,所有成员的默认访问级别为private三,类的声明与实现(一)C++中的类支持声明和实现的分离(二)将类的实现和定义分开1,.h头文件中只有类的声明(1)成员变量和成员函

2021-05-19 09:31:21 77

原创 唐佐林C++210518

类和封装的概念210518一,类通常分为以下两个部分(一)类的实现细节(二)类的使用方式(三)当使用类时,不需要关心其实现细节;当创建类时,才需要考虑其内部实现细节二,封装的基本概念(一)根据经验:并不是类的每一个属性都是对外公开的1,如:女孩子不希望外人知道自己的体重和年龄2,如:男孩子不希望别人知道自己的身高和收入(二)而一些类的属性是对外公开的1,如:人的姓名,学历,国籍,等(三)必须在类的表示法中定义属性和行为的公开级别1,类似文件系统中文件的权限三,C++中类的封装(

2021-05-18 21:38:27 92

原创 唐佐林C++210518

进阶面向对象(下)210518一,类之间的基本关系(一)继承1,从已存在类细分出来的类和原类之间具有继承关系(is-a)2,继承的类(子类)拥有原类(父类)的所有属性和行为(二)组合1,一些类的存在必须依赖于其他的类,这种关系叫组合2,组合的类在某一个局部上由其他的类组成二,小结(一)类之间可以存在继承关系或组合关系(二)继承关系中子类拥有父类的一切属性和行为(三)组合关系是类之间整体和部分的关系(四)类及类之间的关系可以由不同的表示法(五)编译器对类的表示法有具体的要求...

2021-05-18 20:43:05 51

原创 回顾——华清设备树210515

回顾——华清设备树210515

2021-05-18 20:04:56 83

原创 回顾——华清平台总线驱动210514

回顾——华清平台总线驱动210514一,struct bus_type:总线对象,描述一个总线,管理device和driver,完成匹配struct bus_type{ const char *name; int (*match)(struct device *dev, struct device_driver *drv);}注册和注销int bus_register(struct bus_type *bus)void bus_unregister(struct bus_type *bu

2021-05-14 21:08:29 87

原创 回顾——华清中断编程210509

回顾——华清中断编程210509

2021-05-14 10:38:19 120

原创 回顾——华清字符设备驱动框架210508

回顾——华清字符设备驱动框架一,设备驱动分类(一)字符设备驱动1,所产生数据为字符流,2,常见字符设备有,lcd,keyboard,iic从设备3,为什么说产生字符流呢,其实大部分设备所产生的数据都是从寄存器中产生,因此数据传输较快,量也不会太大。(二)块设备驱动1,数据以块为单位2,常见块设备为存储设备,如磁盘,硬盘,u盘,flash,sd卡3,特点,读取数据较大,速度较慢(三)网络设备驱动1,常见网络设备有以太网,网卡二,字符设备驱动框架作为字符设备驱动要素:(一)必须有一个

2021-05-08 16:53:26 113

原创 回顾——原始驱动框架(韦东山)210508

回顾——原始驱动框架(韦东山)一,怎么编写驱动程序(一)确定主设备号1,主设备号major=0时,表示自动分配;(二)定义自己的file_operations结构体(三)实现对应的open/read/write等函数,填入file_operations结构体(四)把file_operations结构体告诉内核:注册驱动程序(五)谁来注册驱动程序啊?得有一个入口函数:安装驱动程序时,就会去调用这个入口函数(六)有入口函数就有出口函数:卸载驱动程序时,就会去调用这个出口函数(七)其他完善:提供

2021-05-08 11:20:56 81

原创 华清快速排序20210505

华清快速排序/**************************quicklysort.h**************************/#ifndef __QUICKLYSORT_H__#define __QUICKLYSORT_H__#define N 8void show(int a[]);int quickpass(int a[], int i, int j);void quicksort(int a[], int low, int high);#endif

2021-05-05 20:33:42 41

原创 华清平台总线驱动201208(不同平台)

华清平台总线驱动201208(不同平台)一,(一)代码编写编写一个能在多平台下使用的led驱动1,注册一个platform_device,定义资源:地址和中断号struct platform_device led_pdev = {.name = , //用于匹配.id = -1,.num_resources = ,.resource = , //指针变量,指向resource结构体} //主要是这几个成员struct resource{resource_size_t start

2020-12-08 21:45:33 146

原创 华清平台总线(同平台)201207

华清平台总线(同平台)201207一,struct bus_type(一)总线对象,描述一个总线,管理device和driver,并且完成匹配动作。(二)一个结构体,里面有很多成员,但是记住主要的即可。struct bus_type {const char *name;int (*match)(struct device *dev, struct device_driver *drv);}(三)注册和注销总线1,int bus_register(struct bus_type bus);

2020-12-07 21:43:58 82

原创 韦东山总线驱动设备模型201128

韦东山总线驱动设备模型201128一,bus_drv_dev模型(新一期)(一)bus,device,driver都是一个结构体。(二)这只是一种机制,一种device和driver建立联系的机制。(三)注册1,driver_register,会把driver注册到bus结构体中的drv链表里。2,device_add,会把device注册到bus结构体中的dev链表里。(四)比较1,如何比较,利用bus里的.match函数进行比较,判断driver是否能支持的device。若能支持,调用

2020-11-28 21:28:07 85

空空如也

空空如也

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

TA关注的人

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