12 2019 档案
摘要:1.整体框图 === 系统框图 时钟框图 解析: 晶振(OSC)和输入时钟(EXTCLK)通过选择器(OM[3:2])选择时钟源 选择器把选出的频率传到MPLL和UPLL通过对PLL的设置选择输出多高的频率MPLL得到FCLK FCLK被HDIV分频后得到HCLK;被PDIV分频后得到PCLK 时钟
阅读全文
摘要:1.gcc编译器和arm linux gcc编译器 === PC上的编译工具:gcc,ld,objcopy,objdump ARM平台上必须使用交叉编译工具:arm linux gcc A.一个C/C++文件处理过程: 预处理 编译 汇编 链接 .c/.cpp .i .S .o a.预处理 以" "
阅读全文
摘要:1.原理图 === 2.芯片手册 === 3.几条汇编代码 === 1.ldr:读内存 ldr R0, [R1] 假设R1的值是x,读取地址x上的数据(4字节),保存到R0中 ldr R0, =0x12345678 (4字节) R0 = 0x12345678 此语句是伪指令,它会被分为几条真正的AR
阅读全文
摘要:1.source insight软件 === 1)增加文件类型 options documents options中,将c source file的文件过滤设置为 .c; .h; .S 2)新建项目(新建工程) project new project,然后将相应的文件添加到该项目中。 3)字体的设置
阅读全文
摘要:1.开发板概览 === 2.开发板接口介绍与串口连接 === 安装com1口的串口驱动 此时可以使用串口,但是还不能使用uboot烧写程序 3.使用eop烧写裸板程序 === 安装驱动 安装openocd(默认路径) 4.eop常见问题 === a. 未连接op/eop到电脑 b. 有其他程序在使用
阅读全文
摘要:1.find:查找符合条件的文件 === 格式: find 目录名 选项 查找条件 eg: find /work/001_linux_basic/dira/ name "test1.txt" 说明: a)/work/001_linux_basic/dira/指明了查找的路径 b) name表明以名字
阅读全文
摘要:1.vi编辑器的配置 === cd /etc/vim cp vimrc ~/.vimrc cd ~ gedit .vimrc 在.vimrc中加入如下内容: "关闭兼容功能 set nocompatible "显示行号 set number "编辑时 backspace 键设置为2个空格 set b
阅读全文
摘要:1.linux命令的格式 === 命令 [选项] [参数] eg: ls ls l ls l /home 注: a.选项与参数不一定存在 b.选项用 " " 来指明 c.命令,选项,参数之间用空格隔开 2.pwd:显示当前所在目录 === 3.ls:显示当前目录下的内容 === ls 目录名 ls
阅读全文
摘要:记录自己的学习经历 这上面是我觉得很不错的博客,很多资料来源他们的博客。
阅读全文
摘要:1.不同的编译器在动态内存分配上的实现细节不同 2.malloc函数在内存申请失败时返回NULL 3.new关键字在内存申请失败时 a.可能放回NULL(老式编译器) b.可能抛出bad_alloc异常(新式编译器)
阅读全文
摘要:1.如果异常未被处理(main函数中抛出异常),最后terminate()会被调用,结束整个程序 2.terminate()是整个程序释放系统资源的最后机会 3.结束函数可以自定义但不能继续抛出异常 4.析构函数中不能抛出异常,否则可能会导致terminate()多次调用
阅读全文
摘要:1.统计对象中某个成员变量的访问次数 === 注意:对象(普通对象,只读对象) eg: include include using namespace std; class Test { int m_value; int const m_pCount; public: Test(int value
阅读全文
摘要:1.typename和class === 早期c++直接复用class关键字来定义模板,但是class关键字的复用使得代码出现二义性。这时才诞生了typename来代替class。 eg: include include using namespace std; template class Tes
阅读全文
摘要:1.编写程序判断一个变量是不是指针 === 知识点:c++中仍然支持C语言中的可变参函数 c++编译器的 匹配调用优先级: a.重载函数(1) b.函数模板(2) c.变参函数(3) 补充知识点: 当sizeof求函数的值时(sizeof(函数)),得到函数返回值类型的大小,不会去调用函数 eg:
阅读全文
摘要:1.类型识别 === 静态类型:变量(对象)自身的类型 动态类型:指针(引用)所指向的对象的实际类型 2.问题: void test(Base b) { / 危险的转换方式 如b正好指向子类,则没有问题。如果b正好指向父类,则此处则有风险 / Derived d = static_castb; }
阅读全文
摘要:1.catch语句中抛出异常 === eg: include include using namespace std; / 假设: 当前的函数式第三方库中的函数,因此,我们无法修改源代码 函数名: void func(int i) 抛出异常的类型: int 1 ==》 参数异常 2 ==》 运行异常
阅读全文
摘要:1.c++异常处理 === c++内置了异常处理的语法: try...catch... try 语句处理正常代码逻辑 catch 语句处理异常情况 try 语句中的异常由对应的 catch 语句处理(注意一个try语句块只能捕获一个异常给catch) try { double r = divider
阅读全文
摘要:1.异常与bug的区别 === 异常:是程序运行时可预料的执行分支 bug :是程序中的错误,是不被预期的运行方式 异常与bug的对比 异常: a.运行时产生除0的情况 b.需要打开的外部文件不存在 c.数组访问时越界 bug: a.使用野指针 b.对数组使用结束后未释放 c.选择排序无法处理长度为
阅读全文
摘要:1.单例模式 === 概念:定义一个类,使得这个类最多只能创建一个对象。(单例对象在系统的生命周期中都是存在的,所以单例对象在整个系统的运行中不释放) 思路: a.将构造函数的访问属性设置为private b.定义instance并初始化为NULL c.当需要使用对象时,访问instance值 空值
阅读全文
摘要:1.智能指针模板 === STL(头文件 memory )中的智能指针模板: auto_ptr a.生命周期结束时,销毁指向内存的空间 b.不能指向堆数组,只能指向堆对象(变量) c.一片堆空间只属于一个智能指针对象 d.多个智能指针对象不能指向同一片堆空间(当多个智能指针指向同一堆空间时, aut
阅读全文
摘要:1.数组模板 === 模板参数可以是数值型参数(非类型参数) template void func() { T a[N]; // 使用模板参数定义局部数组 } 数值类型模板参数的限制 a. 变量 不能作为模板参数 b. 浮点数 不能作为模板参数 c. 类对象 不能作为模板参数 d.... 本质:模板
阅读全文
摘要:1.多参数类模板 === 类模板可以定义多个不同的类型参数 template class Test { public: void add(T1 a, T2 b); }; Test t; 2.类模板特化(即实现模板中的特殊情况) === a.类模板特化:指定类模板的特定实现 b.部分类型参数必须显示指
阅读全文
摘要:1.c++中的类模板 === a.以相同的方式处理不同的类型 b.在类声明前使用template进行标识 c.用于说明类中使用的泛指类型T template class Operator { public: T op (T a, T b); }; 2.类模板的应用 === a. 只能显示指定具体类型
阅读全文
摘要:1.函数模板深入理解 === 编译器会对函数模板进行两次编译 对模板代码本身进行编译 对参数替换后的代码进行编译 注意事项: 函数模板本身不允许隐式类型转换 自动推导类型时,必须严格匹配 (类型必须严格匹配) 显示类型指定时,能够进行隐式类型转换 2.多参数函数模板 === 函数模板可以定义任意多个
阅读全文
摘要:1.泛型编程 概念:不考虑具体数据类型的编程方式 函数模板: template关键字用于声明开始进行泛型编程 typename关键字用于声明泛指类型 template <typename T> // template : 告诉编译器开始泛型编程 // typename : 告诉编译器T是一个泛指类型
阅读全文
摘要:1.关于动态内存分配 === new 和 malloc 的区别是什么? delete 和 free 的区别是什么? new 关键字与 malloc 函数的区别: a. new关键字是c++的一部分 malloc是由c库提供的函数 b. new以具体类型为单位进行内存分配 malloc以字节为单位进行
阅读全文
摘要:1.多重继承的问题(三) === 多重继承可能产生多个虚函数表 eg: include include using namespace std; class BaseA { public: virtual void funcA () { cout funcA(); // 调用指针,指向虚函数表。在表
阅读全文
摘要:1.c++中的多重继承 === a.c++支持编写多重继承的代码 b.一个子类可以拥有多个父类 c.子类拥有父类的成员变量 d.子类继承所有父类的成员函数 e.子类对象可以当做任意父类对象使用(退化) 语法规则: class Derived : public BaseA, public BaseB,
阅读全文
摘要:1.什么是抽象类 === a.可用于表示现实世界中的抽象概念 b.是一种只能定义类型,而不能产生对象的类 c.只能被继承被重写相关函数 (不能创建对象,只能用于继承,可以用来定义指针) d.直接特征是 相关函数没有完整的实现 2.抽象类与纯虚函数 === a.c++语言中没有抽象类的概念 b.c++
阅读全文
摘要:1.继承的对象模型 === 子类是由父类成员 叠加 子类新成员得到的(相当于在子类中开辟了一段内存来存储父类成员) class Derived : public Demo { int mk; }; 2.多态对象模型 === 多态是概念,虚函数是实现多态的方法 c++多态的实现原理 a.当类中声明虚函
阅读全文
摘要:1.class分析 === a.class是一种特殊的struct b.在内存中class依旧可以看做变量的集合 c.class与struct遵循相同的内存对齐规则 d.class的成员函数与成员变量是分开存放的 1).每个对象有独立的成员变量 2).所有对象共享类中的成员函数 2.对象分析 ===
阅读全文
摘要:1.面向对象中期望的行为 === a.根据实际的对象类型判断如何调用重写函数 b.父类指针(引用)指向 1).父类对象则调用父类对象中定义的函数 2).子类对象则调用子类对象中定义的函数 2.面向对象中的多态的概念 === a.根据实际的对象类型决定函数调用的具体目标 b.同样的调用语句在实际运行时
阅读全文
摘要:1.父子间的赋值兼容(兼容性) === a.子类对象可以直接赋值给父类对象 b.子类对象可以直接初始化父类对象 c.父类指针可以直接指向子类对象 d.父类引用可以直接引用子类对象 赋值 指针(退化) 子类 == 父类 子类 == 父类 初始化 引用(退化) 当父类指针(引用)指向子类对象时 a.子类
阅读全文