自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 uboot启动第二阶段

uboot启动第二阶段start_armboot函数简介一个很长的函数(1)这个函数在uboot/lib_arm/board.c的第444行开始到908行结束。(2)450行还不是全部,因为里面还调用了别的函数。(3)为什么这么长的函数,怎么不分成两三个函数?主要因为这个函数整个构成了uboot启动的第二阶段。宏观分析:uboot第二阶段应该做什么(1)概括来讲uboot第一阶段主要就是初始化了SoC内部的一些部件(譬如看门狗、时钟),然后初始化DDR并且完成重定位。(2)由宏观分析来讲,u

2022-05-09 21:55:10 705 2

原创 uboot源码分析之start.S解析

1、start.S引入1.1、u-boot.lds中找到start.S入口1、在uboot中因为有汇编阶段参与,因此不能直接找main.c。整个程序的入口取决于链接脚本中ENTRY声明的地方。ENTRY(_start)因此_start符号所在的文件就是整个程序的起始文件,_start所在处的代码就是整个程序的起始代码。不简单的头文件包含(1)#include <config.h>。config.h是在include目录下的,这个文件不是源码中本身存在的文件,而是配置过程中自动生成的文件。

2022-04-28 23:14:10 1015

原创 【无标题】

绘图控件GraphicsView一、GraphicsView简介(1)QT有多种绘图相关的技术,我们将在第2部分《2.4.QT绘图和图表》中比较详细系统的讲。(2)本节简单讲一下GraphicsView的基本理论,并使用其做一个sample绘图,初步掌握该绘图控件使用。(3)GraphicsView并不是类似framebuffer那种像素填充式绘图,而是更高层级的图形项式绘图。他有3个关键概念,分别是:Scene场景、View视图、Item图形项。(4)Scene负责内部实现和整体管理,View负

2022-02-20 20:07:28 286

原创 【无标题】

QT之QLabel一、QLabel的两个有用信号1.1、linkActivated(1)、label用来包含超链接,点击后跳转打开网页,有2种方法(2)、方法1:setText(“朱老师淘宝店”),然后加setOpenExternalLinks(true)托一个Label控件到画布上:二、方法二方法2:setOpenExternalLinks(false),加linkActivated的槽函数中,QDesktopServices::openUrl(QUrl(“https://zhulaos

2022-02-19 20:39:22 472

原创 QT之QPushButton 相关属性设置

QT-按钮风格+QPushButton样式:根据以下步骤设置PushButton属性:![在这里插入图片描述](https://img-blog.csdnimg.cn/QPushButton{color: rgb(00, 00, 00);background:rgb(255, 255, 255);border:0px solid grey; border-radius: 6px;}QPushButton:hover{border-color:rgb(82, 146, 254);background:

2021-12-20 22:25:04 2138

原创 计算机启动时都发生了什么?

计算机启动时都发生了什么?介绍下基本输入输出系统1、BIOS(Basic I/O system)BIOS 也就是基本输入输出系统 – 同时也是计算机启动时加载的第一个软件它的位置: 计算机主板上的ROM芯片( ROM 只读存储器 不可改变 掉电存储 )主要功能: 是为计算机提供最底层的、最直接的硬件设置和控制。1.1 硬件自检BIOS中主要存放的程序包括:自诊断程序(通过读取CMOS RAM中的内容识别硬件配置,并对其进行自检和初始化)、CMOS设置程序(引导过程中,通过特殊热键启动,进

2021-12-07 22:40:48 644

原创 C++之智能指针类模板

智能指针类模板智能指针的意义1、现代C++开发库中最重要的类模板之一2、C++中自动内存管理的主要手段;3、能够在很大程度上避开内存相关的问题。STL中的智能指针auto_ptr1、生命周期结束时,销毁指向的内存空间;2、不能指向堆数组,只能指向堆对象(变量);3、一片堆空间只属于一个智能指针对象;4、多个智能指针对象不能指向同一片堆空间。实例分析1#include <iostream>#include <string>#include <cstdli

2020-10-08 15:21:38 383

原创 C++之单例类模板

需求的提出在架构设计时,某些类在整个系统生命周期中最多只能有一个对象存在(Single Instance)要控制类的对象数目,必须对外隐藏构造函数;思路:1、将构造函数的访问属性设置为private2、定义instance并初始化为NULL;3、当需要使用对象时,访问instance的值1)、空值:创建对象,并用instance标记;2)、非空值:返回instance标记的对象。实例分析1#include <iostream>#include <string>

2020-10-08 15:17:08 749 1

原创 C++之类模板的概念和意义

类模板一些类主要用于存储和组织数据元素类中数据组织的方式和数据元素的具体类型无关如:数组类、链表类、Stack、Queue类、等1、C++中将模板的思想应用于类,使得类的实现不关注数据元素的具体类型,而只关注类所需要实现的功能。C++中的类模板1、以相同的方式处理不同的类型2、在类声明前使用template进行标识;3、用于说明类中使用的泛指类型T,类模板的应用1、只能显示指定具体类型,无法自动推导,2、使用具体类型定义对象,声明的泛型类型T可以出现在类模板的任意地方编译器对类模

2020-10-07 10:15:14 1842

原创 C++之函数模板的概念和意义

函数模板的概念和意义定义宏代码块1、优点:代码复用,适合所有的类型2、缺点:编译器不知道宏的存在,缺少类型检查;定义函数1、优点:真正的函数调用,编译器对类型进行检查;2、缺点:根据类型重复定义函数,无法代码复用。实例分析1#include <iostream>#include <string>#include <cstdlib>using namespace std;#define SWAP(t, a, b) \do \

2020-10-06 18:36:14 378

原创 C++之对象模型分析

对象模型分析class是一种特殊的struct1、在内存中class依旧可以看成变量的集合;2、class与struct遵循相同的内存对齐规则;3、class中的成员变量与成员函数是分开存放的; 1)、每个对象有独立的成员函数; 2)、所有对象共享类中的成员函数运行时对象退化为结构体的形式1、所有的成员变量在内存中依次排布;2、成员变量间可能存在内存空隙;3、可以通过内存地址直接访问成员变量;4、访问权限关键字在运行时失效。 类中的成员函数是位于代码段的调用成员函数时对象地址作

2020-10-05 12:34:44 81

原创 C++之继承中的构造与析构

继承中的构造与析构思考如何初始化父类成员?父类构造函数和子类构造函数有什么关系?子类对象的构造子类中可以定义构造函数子类构造函数1、必须对继承而来的成员函数进行初始化; a、直接通过初始化列表或者赋值的方式进行初始化; b、调用父类的构造函数进行初始化。父类构造函数在子类中的调用方式1、默认调用: a、适用于无参构造函数和适用默认参数的构造函数;2、显示调用: a、通过初始化列表进行调用; b、适用于所有父类构造函数;父类构造函数的调用实例分析:#includ

2020-09-26 17:53:03 298

原创 C++友元的奇葩的能力

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

2020-09-22 23:14:04 134

原创 C++之前置操作符与后置操作符

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

2020-09-22 07:35:26 201

原创 C++之逗号操作符的分析

逗号操作符的分析逗号操作符逗号操作符(,)可以构成逗号表达式 1、逗号表达式用于将多个子表达式链接为一个表达式; 2、逗号表达式的值为最后一个子表达的值; 3、逗号表达式中的前N-1个子表达式可以没有返回值; 4、逗号表达式按照从左向右的顺序计算每个子表达式的值。实例分析:#include <stdio.h>#include <iostream>#include <cstring>using namespace std;int func(i

2020-09-20 18:09:00 195

原创 C++之逻辑操作符的陷阱

逻辑操作符的陷阱逻辑运算的原生语义1、操作数只有两种值(true和false)2、逻辑表达式不用完全计算就能确定最终值;(短路规则)3、最终结果只能是true或者是false。编程实验#include <stdio.h>#include <iostream>#include <cstring>using namespace std;int main(){ int a = 0; int b = 1; if(a && b)

2020-09-20 17:03:21 122

原创 C++之智能指针的分析

智能指针的分析内存泄漏(臭名昭著的Bug)1、动态申请堆空间,用后不归还;2、C++语言中没有垃圾回收机制;3、指针无法控制所指堆空间的生命周期。内存泄漏的编程实验#include <stdio.h>#include <iostream>#include <cstring>using namespace std;class Test{ int i;public: Test() { } Test(int i)

2020-09-20 16:13:58 81

原创 C++一些常见问题

关于赋值的疑问1、编译器为每个类默认重载了赋值操作符;2、默认的赋值操作符仅完成了浅拷贝;3、当需要进行深拷贝时必须重载赋值操作符;4、赋值操作符与拷贝构造函数有相同的存在意义。实例分析:#include <stdio.h>#include <iostream>#include <cstring>using namespace std;class Test{ int* m_pointer;public: Test() { m_

2020-09-19 17:12:50 178

原创 C++数组操作符的重载

C++数组操作符的重载例题分析:#include <stdio.h>#include <iostream>#include <cstring>int main(){ string s = "a1c2d3v4b5b6h67"; int n = 0; for(int i=0; i<s.length(); i++) { if(isdigit(s[i])) { n++; } //cout << "n = " <

2020-09-19 16:03:56 565

原创 C++函数对象的分析

函数对象的分析面试题1、编写一个函数 a、函数可以获取斐波那契数列每项的值; b、每调用一次,返回一个值; c、函数可根据需要重复使用;第一个解决方案:#include <stdio.h>#include <iostream>#include <cstring>using namespace std;int fib(){ static int a0 = 0; static int a1 = 1; int ret = a1; a1

2020-09-19 16:03:36 68

原创 C++中的字符串类

字符串类历史遗留的问题1、C语言不支持真正意义上的字符串;2、C语言用字符数组和一组实现字符串操作;3、C语言不支持自定义类型,因此无法获得字符类型;解决方案1、从C到C++的进化过程引入了自定义类型;2、从C++中可以通过类完成字符串类型的定义; 问题: C++中的原生类型系统是否包含字符串类型?标准库中的字符串类1、C++语言直接支持C语言的所有概念;2、C++语言中没有原生的字符串类型;3、C++标准库提供了string类型; a、string直接支持字符串连接;

2020-09-18 08:06:52 873

原创 C++操作符重载的概念之笔记

操作符重载的概念操作符的重载1、C++中的重载能够扩展操作符的功能;2、操作符的重载以函数的方式进行;3、本质:用特殊形式的函数扩展操作符的功能。4、通过operator关键字可以定义特殊的函数;5、operator的本质是通过函数重载操作符;6、语法: Type operator Sign(const Type p1, const Type p2) { Type ret; return ret; }其中Sign为系统中预定义的操作符,如:+、-、*、/、等。例题分析:

2020-09-16 07:25:01 86

原创 C++中类中的函数重载

类中的函数重载函数重载的回顾1、函数重载的本质就是为相互独立的不同函数;2、C++中通过函数名和函数参数确定函数调用;3、无法直接通过函数名得到重载函数的入口地址;4、函数重载必然发生在同一个作用域中。类中的重载1、类中的成员函数可以进行重载; --构造函数的重载; --普通成员函数的重载; --静态成员函数的重载。2、规定: --、重载函数的本质为多个不同的函数; --、函数名和参数列表是唯一的标识; --、函数重载必须发生在同一个作用域中。在这里插入代码片重载的意义

2020-09-14 07:24:32 1025

原创 线性表的本质和操作之学习笔记

线性表的本质和操作生活中的智慧1、现实生活中的幼儿园老师总会让小朋友以同样的排队次序出现。线性表的表现形式 1、零个或者多个数据元素组成的集合; 2、数据元素在位置上是有序排列的; 3、数据元素的个数是有限的; 4、数据元素的类型必须相同。线性表的抽象定义 线性表是具有**相同类型**的n(n>=0)个的数据元素的**有限序列**; 例如:1、2、3、4、5、6、7、8、9.......n.;这样的有限序列线性表的性质 1、线性表的第一个元素,只有一个后继; 2、

2020-09-08 23:16:15 174

原创 C++二阶构造模式分析笔记

C++二阶构造模式构造函数的回顾关于构造函数1、类的构造函数用于对象的初始化;2、构造函数与类同名并且是没有返回值的3、构造函数在对象定义时自动被调用例题分析1#include <stdio.h>class Test{ int mi; int mj; bool mStatus;public: Test(int i, int j): mStatus(false) { mi = i; return; //添加return会使对

2020-09-07 15:10:09 140

原创 数据结构之智能指针

@智能指针内存泄漏(臭名昭著的Bug)一、动态申请堆空间,用完后不归还;二、C++语言中没有垃圾回收的机制;三、指针无法控制所指堆空间的生命周期。当代的C++软件平台中的智能指针(需求)一、指针生命周期结束时主动释放堆空间;二、一片堆空间最多只能由一个指针标识;三、杜绝指针运算和指针比较。智能指针的设计方案1、通过类模板描述指针的行为;1)、能够定义不同类型的指针对象;2、重载指针特征操作符(->和*)2)、利用对象模拟原生指针的行为;例题:智能指针的实现#ifndef

2020-09-06 16:44:19 169

原创 数据结构之泛型编程简介

@泛型编程简介泛型编程的概念不考虑具体数据类型的编程方式 对与Swap函数可以考虑下面的泛型写法 void Swap (T& a, T& b) { T t = a; a = b; b = t; }Swap泛型写法中的T不是一个具体的数据类型,而是泛型任意的数据类型。C++中的函数模板1、一种特殊的函数可用不同类型进行调用;2、看起来和普通函数很相似,区别是类型可被参数

2020-09-06 16:08:40 132

原创 C++类的静态成员函数的记录与分析

C++类的静态成员函数在C++中可以定义静态成员函数1、静态成员函数是类中特殊的成员函数2、静态成员函数属于整个类所有3、可以通过类名直接去访问公有静态成员函数4、可以通过对象名访问公有静态成员函数静态成员函数的定义直接通过static关键字修饰成员函数例题分析:#include <stdio.h>class Demo{private: int i;public: int getI(); static void StaticFunc(con

2020-09-05 17:17:40 99

原创 C++类的静态成员变量记录与分析

C++类的静态成员变量成员变量的回过1、通过对象名能够访问public的成员变量;2、每个对象的成员变量都是专属的;3、成员变量不能在对象之间共享。新的需求1、统计在程序运行期间某个类的对象数目;2、保证程序的安全性;(不能使用全局变量)3、随时可以获取当前对象的数目。静态成员变量在C++ 中可以定义静态成员变量 1、静态成员变量属于整个类所有; 2、静态成员变量的生命周期不依赖于任何对象; 3、可以通过类名直接访问公有静态成员变量; 4、所有对象共享的静态成员变

2020-09-05 16:39:15 171

原创 C++中神秘的临时对象分析

C++中神秘的临时对象下面的程序输出什么?为什么?#include <stdio.h>class Test { int mi;public: Test(int i) { mi = i; } Test() { Test(0); //临时对象 } void print() { printf("mi = %d\n", mi); }};int main(){ Test t;

2020-09-03 20:57:15 158

原创 C++对象的销毁

对象的销毁一般来说,需要销毁的对象都应该做清理解决方案1、为每个类都提供一个public的free函数;2、对象不再需要时立即调用free函数进行清理析构函数1、C++的类中可以定义一个特殊的清理函数 ---这个特殊的清理函数叫做析构函数 --析构函数的功能与构造函数相反2、定义:~ClassName() ---析构函数没有参数也没有返回值类型声明; ---析构函数在对象销毁时自动被调用;例题分析:#include <stdio.h>class Test{

2020-09-02 07:59:05 4850

原创 C++对象的构造分析(下)

C++对象的构造(下)两个特殊的构造函数----无参构造函数 1、没有参数的构造函数 2、当类中没有定义构造函数时,编译器默认提供一个无参构造函数,并且其函数体为空----拷贝构造函数 1、参数为const class_name& 的构造函数 2、当类中没有定义拷贝构造函数时,编译器默认提供一个拷贝构造,简单的进行成员变量的值拷贝#include <stdio.h>class Test{private: int i; int j;publi

2020-08-30 23:05:52 78

原创 C++对象的构造分析(中)

C++对象的构造(中)构造函数1、带有参数的构造函数 -构造函数可以根据需要定义参数 -一个类中可以定义存在多个重载的构造函数 -构造函数的重载遵循C++重载的规则2、友情提示:  -对象的定义和对象的声明不同   .对象定义-申请对象的空间并且调用构造函数   .对象声明-告诉编译器存在这样一个对象Test t; // 定义对象并且调用构造函数int main(){ extern Test t1; // 告诉编译器存在这样一个对象 ret

2020-08-29 18:19:07 62

原创 C++的对象的构造(上)

对象的构造1、下面的类定义中成员变量i和j的初始值是多少?class Test{private: int i; int j;public: int getI() { return i; } int getJ() { return J; }//初始值是不一定的,随机的例题分析:#include <stdio.h>//类是一个自定义类型class Test{private: int i; int j;public: int

2020-08-27 08:12:49 151

原创 C++类的真正形态分析

类的真正形态类的关键字1、struct在C语言中已经有了自己的含义,必须继续兼容;2、在C++中提供了新的关键字class用于类定义;3、class和struct的用法是完全相同的。class与struct的区别1、在用struct定义类时,所有的成员变量和成员函数默认访问级别为public;2、在用class定义类时,所有的成员变量和成员函数默认访问级别为private;#include <stdio.h>struct A{ // defualt to publ

2020-08-26 20:04:37 156

原创 C++类与封装的基本概念

类的封装1、类通常分为以下两个部分a、类的实现细节b、类的使用方式2、当使用类时,不需要关心其细节3、当创建类时,才需要考虑其内部实现细节例:a、普通用户使用手机时–只需要学习如何使用发短信,打电话,拍照,等b、手机开发工程师–需要考虑手机内部的实现细节4、封装的基本概念–根据经验:并不是类的每个属性都是公开的–而一些类的属性是对外公开的–必须在类的表示法中定义属性和行为的公开级别例如:类似文件系统中的文件的权限5、C++中的类的封装–成员变量:C++中用于表示类属性的变量

2020-08-26 08:04:27 355

原创 C语言函数设计一般原则

函数设计原则1、函数从意义上是一个独立的功能模块2、函数名要在一定程度上反映函数的功能3、函数参数名要能够体现参数的意义4、尽量避免在函数中使用全局变量void sc(char *s1, char *s2);void str_copy(char *str_dest, char *str_src);1、当函数参数不应该在函数体内部被修改时,应该加上const声明2、如果参数是指针,且仅作输入参数,则应加上const声明void str_copy(char *str_dest, const

2020-08-23 15:11:40 1119

原创 递归函数的分析

递归函数递归的数学思想1、递归是一种数学上分而自治的思想2、递归需要有边界条件1)、当边界条件不满足时,递归继续继续2)、当边界条件满足时,递归就停止。备注:递归将大型的复杂问题转化为与原问题相同但规模较小的问题进行处理。递归函数1、函数体内部可以调用自己2、递归函数1)、函数体中存在自我调用的函数3、递归函数是递归的数学思想在程序设计中的应用1)、递归函数必须有递归出口2)、函数的无限递归将导致程序栈溢出而崩溃递归函数设计技巧1、递归模型的一般表示法f(n) = a1 (n

2020-08-23 14:28:23 419

原创 C语言中函数参数的秘密

函数参数的秘密函数参数1、函数参数在本质上与局部变量相同在栈上分配空间思间2、函数参数的初始值是函数调用时的实参值3、函数参数的求值顺序依赖于编译器的实现#include <stdio.h>//函数的求值顺序依赖于编译器实现的顺序int func(int i, int j){ printf("%d, %d\n", i, j); //i=2,j=1 return 0;}int main(){ int k = 1;

2020-08-22 08:53:09 356

原创 C语言链表分析

链表的引入从数组的缺陷说起1、数组有两个缺陷,一个是数组中的所有元素的类型必须相同,第二个是数组的元素个数必须事先指定并且一但指定后就不能更改。2、如何解决数组的第一个缺陷:数组的第一个缺陷靠结构体来解决。结构体允许其中的元素的类型不相同,因此解决了数组的第一个缺陷。所以说结构体是因为数组不能解决某些问题所以才发明的。3、如何解决数组的第二个缺陷?我们希望数组的大小能够实时扩展。譬如我刚开始定了一个元素个数是10,后来程序运行时觉得不够因此动态扩展为20.普通的数组显然不行,我们可以对数组进行封装以

2020-08-22 07:31:47 251

空空如也

空空如也

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

TA关注的人

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