自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 找完工作+重启博客

找完工作+重启博客今天被朋友叫着点开csdn关注他,想着来都来了还是记录记录”程序员生活“。兜兜转转,还有半年就要硕士毕业了(希望顺利)。最后半年重心估计也在毕业论文上,现在回想硕士期间自己更像是一个探索者,搞得东西很杂, 从嵌入式软件(单片机)、到Linux内核驱动、蓝牙协议到应用层开发;从stm32、DA14580到RK3399,再到PC、手机软件开发。正如找工作一样,先投递的硬件厂商 华为、oppo、vivo、海康、汇顶…再到后来的腾讯、阿里、字节、深信服…。最后还是在生活和工作中,折了个中,选择了

2021-12-29 21:08:56 1324

原创 常用的几种设计模式总结

前言记录记录我理解的设计模式设计模式主要分为三大类:创建型设计模式:对象的创建问题,封装复杂的创建问题。结构型设计模式:类或对象组合在一起的问题,应用于一些特定的场景。行为型设计模式:类和对象的交互问题。目前只理解了 创建型设计模式中的单例模式和工厂模式;结构型设计模式的装饰模式;行为型设计模式的观察者模式。一、创建型设计模式1.单例模式类的实例化只能有一个,并提供一个访问它的全局访问点。如 文件系统、打印程序等。通常都是通过全局或者静态变量来实现,其构造函数、拷贝构造函数和赋值构造函数

2021-07-19 14:55:11 1535

原创 Linux内核层和用户层的内存管理

前言看了一些书和别人的博客,记录一下自己对Linux内核层和用户层的内存管理的理解。以下都是针对32位操作系统的知识理解。一、内核层的内存管理首先得有概念,内核层的内存很紧张,不像用户层可用内存很多。所以内核中分配内存是很复杂的。1.页①页作为内核管理的基本单位。MMU(内存管理单元,把虚拟地址转换为物理地址的硬件)通常以页为单位管理内存。②页是物理内存,与虚拟内存无关。③内核对于每个物理页都用struct page描述。2.区①不同物理地址的页具有不同的功能,所以内核对页进行了分类,

2021-05-10 23:25:34 742

原创 指针数组、数组指针以及二维数组的参数传递

前言区分一下指针数组和数组指针和二维数组做参数该怎么传递。。指针数组和数组指针区分 在中间加个“的”即可理解,指针的数组 数组的指针一、指针数组指针数组,指针的数组。表示一个数组里面装的全是指针。定义:int *p[5]; // []的优先级高于 **,先和p结合为数组,再由int *指明为指针不能进行p++操作,因为p是数组头,是一个地址 而不是指针!!例子:#include <iostream>using namespace std;int main(){ int a

2021-05-07 22:30:10 484 2

原创 常量指针和指针常量

前言人傻傻的,常量指针和指针常量经常弄混!一、正文1.const int* p;2.int const* p;3.int* const p;4.const int* const p;1和2是常量指针,指针是指向常量的。指向可以变,指向的内容不可以变。3是指针常量, 指针是一个常量,指向变量。指向不可以变,指向的内容可以变。4.两个都不可以变。技巧: 遇到p翻译为(p is a),遇到*翻译为(pointer to)还有一种记法, 加个“的”字 ,常量指针变为(常量的指针) 就是1和2

2021-04-28 21:53:26 76

原创 Linux启动流程和bootloader具体流程

前言参考了很多别人的博客,自己总结一下。上次实习面试就被问了,感觉很多面试都会问。一、linux启动流程1.运行bios开机自检2.根据MBR指引运行bootloader(PC内核引导程序常用LILO和GRUB,嵌入式常用UBOOT)3.加载内核4.运行initrd驱动,挂载根文件系统5.运行init进程(进程编号为1),使用inittab定义条目,如登录级别。6.执行脚本(rc.sysinit、rc.d等)7.启动mingetty,进入系统登录界面。二、bootloader具体流程1

2021-04-22 11:30:22 489

原创 C++运算符优先级

“->” > “++” > “!” > “~” > "指针取值 * " >> “算数运算符(加减乘除)” > “关系运算符(大于小于等于)”> “逻辑运算符 && ||” > "赋值运算符 = "

2021-04-21 20:33:51 111

原创 C语言strcpy和strcat(携带sizeof和strlen)

前言有点忘记了strcpy和strcat,回忆一下。c库:#include <string.h> c++库#include <cstring.h>一、strcpy1.用法char *strcpy(char *dest, const char *src);把从src地址开始且含有’\0’结束符的字符串复制到以dest开始的地址空间。dest为目标字符串,src为源字符串,返回指向dest的指针。例1:#include <stdio.h>#include

2021-04-15 21:31:43 358

原创 stringstream的常见用法

stringstream的常见用法前言今天笔试实习,做到一道字符串的题,感觉自己对字符串掌握的不够,今天记录记录stringstream的学习一、简介头文件是 #include<sstream> ,提供了三个类istringstream、ostringstream 和 stringstream,感觉stringstream包含了前两个功能(即可对string输入也可输出)。主要对string输入输出数据,让string像一个IO流一样。二、去除字符串中的空格去掉字符串中的空格 ‘

2021-04-07 16:41:57 1503 2

原创 Linux下应用层进程、应用层线程和内核线程

Linux下应用层进程、应用层线程和内核线程前言总结一下,应用层进程、应用层线程和内核线程的一些基本知识点、以及它们的通信方式、比较比较不同。主要参考了两本书 《UNIX环境高级编程》、《Linux内核设计与实践》一、应用层进程1.ID每个进程都有独一无二的进程ID,ID为0:调度进程,也叫交换进程,属于内核的一部分。ID为1:Init进程(自举过程中由内核调用,自举后启动一个UNIX内核),不会终止、会成为所有孤儿进程的父进程。2.fork和vforkfork和vfork都是创建一个新的子

2021-04-06 15:52:09 609

原创 new/delete 和 malloc/free 的异同

1.相同点两者的功能都是用于申请/释放内存。2.不同点1.new/delete是C++的运算符(可重载),malloc/free是C语言的标准库函数。2.new分配完内存后和自动执行构造函数,delete在释放完内存年后会执行析构函数。而malloc和free不行。3.new返回申请类型的指针,而malloc 返回void* 需要强制转换。4.new申请失败抛出bad_alloc类型的异常,而malloc申请失败返回 nullptr。...

2021-03-29 20:18:03 133

原创 微内核和宏内核

Linux属于宏内核,也叫大内核,内核服务和用户服务都工作在相同的地址空间。具体一点,就是内核可以代表内核进程运行代码,就是通常的内核进程;当用户进程经过系统调用或者中断进入到内核态时,内核也可以代表它运行代码。这样一来,宏内核需要管理的资源多于微内核,执行速度要快于微内核。华为推出的鸿蒙还有Google正在研发的Fuchsia系统都是微内核。微内核考虑在操作系统的内核中保留操作系统最基本的功能,也就是任务调度、内存和设备的抽象和管理。其他的功能全部从内核移出,放到用户态中了实现,并以C/S模式对其他应用

2020-11-30 15:13:53 841

原创 BLE协议框架理解

BLE协议框架理解文章目录BLE协议框架理解前言一、Physical layer二、Link layer1.广播通信2.连接通信3.Air Interface Protocol三、Host Controller interface(HCI)四、Logical link control&Adaption protocol(L2CAP)五、Attribute Protocol(ATT)六、Generic Attribute Protocol(GATT)七、Generic Access Profile(

2020-10-07 21:07:56 845

原创 C++学习记录---(9)读写文件(文本文件和二进制文件)

这章记录记录对文本文件和二进制文件的读写。挂库#include 写文件的类 :ofstream ,读文件的类:ifstream 读写文件的类:fstream1.文本文件(1)写:①创建流对象(ifstream )②打开文件③写④关ofstream ofs;ofs.open("test.txt",ios::out|ios::app);//ofs << "hahahah...

2020-04-11 19:51:02 110

原创 C++学习记录---(8)类和对象-----多态

多态是类和对象的一大特性。多态可以使 代码组织结构清晰、可读性强,利于前期和后期的扩展和维护。1.多态的种类(1)静态多态:函数重载和运算符重载 ,在编译阶段确定函数地址。(2)动态多态:派生类和虚函数(区分于虚继承)的实现和运行,在程序运行阶段才确定函数地址。2.多态的条件和使用(1)条件:①有继承关系 ②子类重写了父类的虚函数(重写不是重载,重写参数时完全一样的)(2)使用:①父类...

2020-04-11 19:35:30 86

原创 C++学习记录---(7)类和对象-----继承

继承也是c++ 对象的一大特性,简单记录下。基本语法:class 子类(也叫派生类):继承方式 父类1(也叫基类),继承方式 父类21.继承方式有三种继承方式:公共继承、保护继承和私有继承(1)公共继承:class B:public A结果 A::public—> B::public A::protected-----> B::protected(2)保护...

2020-04-11 17:46:02 109

原创 C++学习记录---(6)类和对象-----友元和运算符重载

友元可以让一个函数或者其他类访问一个类中的私有成员。主要分为,全局函数做友元、其他类做友元和成员函数做友元。1.全局函数做友元在类中声明: friend 函数名(); 即可2.其他类做友元在类中声明: friend 类名(); 即可3.成员函数做友元在类中声明:类名::函数名(); 即可。...

2020-04-11 16:55:59 224

原创 C++学习记录---(5)类和对象-----对象特性

这一节的内容:构造函数和析构函数、深拷贝和浅拷贝的问题、成员变量和成员函数储存位置、this指针、空指针与对象、const修饰成员函数1.构造函数和析构函数简单来说构造函数就是用来初始化的,析构函数用来清理。并且由系统自动调用,创建对象时自动调用构造函数、删除对象时自动调用析构函数。①构造函数的分类按照参数:有参构造和无参构造按照类型:普通构造和拷贝构造②编译器默认提供:默认构造(无...

2020-04-11 15:26:03 140

原创 C++学习记录---(4)类和对象-----封装

下面就是c++对于c的不同:面向对象编程。封装就是把属性和行为作为一个整体,并加以权限控制。1.访问权限访问权限有:public、protected、private(1)public:类内和类外都可以访问。(2)protected:类内可以访问、内外不能访问。继承后,子类可以访问父类的protected。(3)private:类内可以访问、内外不能访问。继承后,子类不可以访问父类的pr...

2020-04-11 14:21:15 84

原创 C++学习记录---(3)引用及函数的提高

引用在c++中很常用。函数提高包括默认参数、占位参数和重载。1.引用引用就是给变量起别名,语法为 数据类型 &别名=原名;(1)注意:引用必须初始化,并且初始化后不能够改变。(其本质就是一个指针常量!)(2)应用:①做函数参数,可以在子函数中更改实参,简化指针。②做函数的返回值:还可以作为左值再赋值,但是注意不能返回局部变量,因为局部变量在函数执行完后会被释放,别名就指...

2020-04-11 14:12:08 71

原创 C++学习记录---(2)内存分区

linux应用程序分区为:代码段、数据段、堆、栈c++分区为: 代码区、全局区、堆、栈1.代码区存放函数体的二进制代码、由操作系统执行。2.全局区存放全局变量、静态变量和常量,由操作系统释放。代码区和全局区在程序执行前在有了,exe文件。3.堆区存放程序员申请的变量,由程序员分配释放的空间,如果程序员不释放、程序结束会由操作系统释放。申请:new 释放:delete例子:申请:...

2020-04-11 11:28:16 70

原创 C++学习记录---(1)基础(跟c差不多)

回学校了,,但是不能出去。。复习下c++(包括c的一些知识)。1.三目运算符(1)表达式: 条件 ? 结果1 : 结果2条件为真则得到结果1,条件为假则为结果2。(2)应用: 简化了if else吧,可用于等号左边,也可以用于等号右边。2.break、continue和goto(1)break:跳出本层循环,常用于跳出嵌套内层循环、switch中。(2)continu...

2020-04-11 11:14:32 65

原创 NanoPC-T4学习记录---(11)使用NanoPC-T4的alsa声音系统(命令行和c语言应用程序)及设置音量大小

要回学校了,这几天比较颓废。。今天记录一下RK3399上如何使用播放音频文件,作为一个新手,这个也搞了我好几天。。之前看师兄写的老板子的c语言应用程序是打开“/dev/dsp”这个设备文件,但是去板子上的目录下,找了老半天也没有找到。。后来才知道以前的老板子老系统是oss声音系统,现在linux较新的系统都用的是alsa声音系统。1.使用命令行播放音频aplay -Dplughw:0,0 ...

2020-04-06 16:18:01 445

原创 Qt学习记录---(6)线程(QThread)和connect的第五个参数

Qt中线程是一个非常难的问题。这里记录下我的理解。Qt中线程解决问题:由于复杂的操作(复杂计算、复杂绘图等操作)使得整个应用程序变得卡顿时。这个时候就可以使用线程,将复杂的操作放到新开的线程中完成,完成后emit一个信号给主线程表明其操作完成。注意: 1.QThread其实是管理线程的工具,它是属于主线程的,直接调用QThread的槽函数(不是run函数),也是在主线程中调用。需要使用到...

2020-03-30 18:31:42 1364

原创 Qt学习记录---(5)绘图(QPainter和QPaintDevice)

Qt中绘图,我觉得可以用下面的结构来表示。简单描述下就是 QPainter(画家)可以使用QPen(画笔)、QBrush(画刷)等工具在QPaintDevice(绘图设备)上进行绘图。其中QPainter和QPaintDevice是必须有的。其中QPaintDevice主要分为三种:QPixmap、QImage和QPicture。其实窗口和一些控件也是QPaintDevice(绘图设备),...

2020-03-30 12:20:37 1390

原创 Qt学习记录---(4)事件(event和eventfilter函数)

Qt中的事件,学完有一种挺重要的但是有一种实际开发中可能用不上的感觉。。还是记录下来把。。1.Event函数很多对象的操作都对应一个Event函数 ,主窗口也有event函数,用于对其子类事件信号分发(它们都是虚函数)。我理解为 event函数就是处于信号和槽之间的一层函数,他可以决定是否忽略信号(槽函数就接收不到),或者执行完一定的操作后继续传递信号(槽函数可以接收到)。使用时先需要在h文...

2020-03-26 22:14:20 351

原创 Qt学习记录---(3)标准控件、自定义控件、添加资源和样式表

这一部分感觉用到哪个写哪个把。在这里大概回顾下。1.标准控件Qt提供的控件:(1)Layouts和Spacers:用于排版布局(2)Buttons:提供的各种按键(3)Item Views和Item Widgets:用于数据库(4)Containers:容器,容纳别的控件,可辅助布局(5)Input Widgets:用于输入数据(6)Display Widgets:用于显示2....

2020-03-26 21:38:05 235

原创 Qt学习记录---(2)信号与槽、重载函数

信号和槽我感觉属于Qt的核心。1.connect函数connect函数连接信号与槽。比如:connect(Mytimer,&QTimer::timeout,thread1_task1,&Mythread1::slot_drawimage);(1)第一个参数:发送对象(2)第二个参数:发送对象的信号,需要取地址(3)第三个参数:接受对象(4)第四个参数:接受对象的槽函...

2020-03-26 21:07:29 235

原创 Qt学习记录---(1)创建工程、创建对象、指定父对象和创建类

把之前学的Qt的一些知识总结一下。1.创建工程一直next就可以了。。主要区分下基类,QMainWindow和Qwidght。(1)QMainWindow带状态栏、工具栏、菜单栏等等。(2)Qwidght比较“干净”。2.创建对象(1)自动分配空间,创建静态变量/对象。(2)手动分配空间,创建动态变量/对象,如果不指定父对象(会自动释放内存),就需要手动释放内存。注意需要在父类...

2020-03-26 21:06:55 1057

原创 NanoPC-T4学习记录---(10)ubuntu18上搭建NanoPC-T4的Qt交叉编译环境

回顾一下:对于板子外设的那些操作,准备回学校再搞。驱动开发差不多入了个门,以后有需要再深入。准备搞搞在NanoPC-T4的Qt开发,,首先就得在PC端上的搭建Qt的交叉编译环境。1.下载Qt的交叉编译链这一步直接按照这wiki上的教程来就可以了。http://wiki.friendlyarm.com/wiki/index.php/How_to_Build,_Install_and_Sett...

2020-03-26 21:06:19 692

原创 Linux应用层开发学习记录---(3)多线程程序设计

我的对于线程的简单理解就是,线程更加的“节约”一切都是共享的,没有独立的地址空间,所以也就不需要线程间通信。1.对进程的操作函数1.编译多线程程序是需要加上 “-lpthread”。2.pthread_creat 创建线程,参数有两种,一种是全局变量既可,一种是传递传输。3.pthread_exit 终止线程,从调用函数中返回,当主线程结束时,其他线程也会结束。4.pthread_joi...

2020-03-23 11:35:44 110

原创 Linux应用层开发学习记录---(2)多进程程序设计

进程简单来说就是程序的一次动态运行活动把。1.对进程的操作函数1.创建进程(1)fork 创建的子进程有独立的数据段、堆栈,并且是先父后子。(2)vfork 创建的子进程没有独立的数据段、堆栈,为阻父先子。2.退出进程(1)return 只有父进程能使用。(2)exit 父进程和子进程都能使用,参数为0表示正常、1表示异常。3.等待进程(1)wait 挂起调用的进程,直到...

2020-03-23 11:28:11 75

原创 Linux应用层开发学习记录---(1)基础知识

1.GCC1.预处理(.c➡.i)对各种预处理命令进行处理,包括头文件包含、宏定义的扩展、条件编译的选择等。2.编译(.i➡.s)生成汇编文件。3.汇编(.s➡.o)汇编翻译为机器码。4.链接(.o➡.out)链接各种库(静态连接和动态链接),得到可执行文件。2.应用程序的地址从低地址(虚拟地址0x48000)到高地址分别为代码段、数据段、堆、栈。1.代码段:代码、全局常量和字符串常...

2020-03-23 10:14:07 166

原创 NanoPC-T4学习记录---(9)基于NanoPC-T4的字符驱动的开发2

诶,,英语作业实在是太多了,感觉周一至周五天天在做英语作业,周末要去姐姐的串串店送外卖帮忙。才发现时间很少!今天把前几天的驱动开发总结一下,主要是基于NanoPC-T4写了一个LED的驱动。回顾给自己安排的实验: 1.搭建PC端和开发板系统:PC端就用虚拟机装个ubantu18.04,开发板上用rk3399-typec-friendlydesktop-bionic-4.4-arm64-201...

2020-03-12 00:16:48 440

原创 NanoPC-T4学习记录---(8)基于NanoPC-T4的字符驱动的开发1

在家上课真的是。。作业太多了,仿佛回到了高中生活,天天忙于提交作业,就连体育课都要上传运动照片。对于实验8、9、10以后再搞把,,因为这周二远程开组会给我安排了个基于ARM的项目(主要是应用层开发),所以我再学学驱动开发就要去学应用层的开发了。实验8、9、10毕竟对项目帮助不大。诶,,今天来记录记录前几天忙里偷闲学习的字符驱动开发。回顾给自己安排的实验: 1.搭建PC端和开发板系统:PC端...

2020-03-05 16:28:25 530

原创 NanoPC-T4学习记录---(7)NanoPC-T4与虚拟机Linux搭建NFS

网上买的串口USB转ttl和SD卡都到啦!这里把NFS搭建好,后面就要开始对开发板进行操作了。回顾给自己安排的实验: 1.搭建PC端和开发板系统:PC端就用虚拟机装个ubantu18.04,开发板上用rk3399-typec-friendlydesktop-bionic-4.4-arm64-20191227(带图形界面的)。2.把网络搞通。连接wifi,与电脑端处于同一网段。方面后面搭建sa...

2020-03-02 22:26:26 335

原创 NanoPC-T4学习记录---(6)在虚拟机Linux进行内核模块的编译

接下来记录一下虚拟机Linux内核模块的开发。回顾给自己安排的实验: 1.搭建PC端和开发板系统:PC端就用虚拟机装个ubantu18.04,开发板上用rk3399-typec-friendlydesktop-bionic-4.4-arm64-20191227(带图形界面的)。2.把网络搞通。连接wifi,与电脑端处于同一网段。方面后面搭建samba服务器、挂载NFS或者用tftp传输数据等...

2020-03-02 21:00:13 439

原创 NanoPC-T4学习记录---(5)用Sourceinsight查看内核源代码

内核源代码才是学习内核的最好的导师嘛,今天就用Sourceinsight来导入查看内核源代码。回顾给自己安排的实验: 1.搭建PC端和开发板系统:PC端就用虚拟机装个ubantu18.04,开发板上用rk3399-typec-friendlydesktop-bionic-4.4-arm64-20191227(带图形界面的)。2.把网络搞通。连接wifi,与电脑端处于同一网段。方面后面搭建sa...

2020-03-02 20:40:56 286

原创 NanoPC-T4学习记录---(4)在虚拟机Linux进行内核配置和编译

在外面不太方便,,先把后面的内容记录下来。回顾给自己安排的实验: 1.搭建PC端和开发板系统:PC端就用虚拟机装个ubantu18.04,开发板上用rk3399-typec-friendlydesktop-bionic-4.4-arm64-20191227(带图形界面的)。2.把网络搞通。连接wifi,与电脑端处于同一网段。方面后面搭建samba服务器、挂载NFS或者用tftp传输数据等操作...

2020-03-01 20:01:34 626

原创 NanoPC-T4学习记录---(3)虚拟机上的Linux搭建samba服务器

继续把前几天的实验记录下来。回顾给自己安排的实验: 1.搭建PC端和开发板系统:PC端就用虚拟机装个ubantu18.04,开发板上用rk3399-typec-friendlydesktop-bionic-4.4-arm64-20191227(带图形界面的)。2.把网络搞通。连接wifi,与电脑端处于同一网段。方面后面搭建samba服务器、挂载NFS或者用tftp传输数据等操作。(暂时使用网...

2020-03-01 19:34:42 305

空空如也

空空如也

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

TA关注的人

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