- 博客(26)
- 资源 (23)
- 收藏
- 关注
原创 CAN协议学习
CAN 帧有两种类型:标准帧(11 位标识符) 和 扩展帧(29 位标识符)。我们将分别讨论这两种帧的结构。数据字段(Data Field) 0-64 位(0-8 字节) 可选数据,最多可传输 8 字节(64 位)控制位(Control Field) 4 数据长度代码(DLC),表示数据字段的字节数(0-8 字节)如果数据字段的长度是最大值(8 字节,也就是 64 位),那么 标准帧的最大长度为 111 位。SOF(Start of Frame) 1 帧起始位,标识一帧的开始,固定为显性位 0。
2024-10-28 01:36:16
375
原创 可见光通信在6G中的应用:进展、挑战与前景
6G研究的现状: 在2019年底5G商业部署之后,不同国家和组织已经开始了6G的研究工作。国际电信联盟的行动: 国际电信联盟成立了Network 2030焦点小组,以探索2030年及以后的技术发展。6G的期望性能: 6G网络预计将提供比5G更好的性能,并满足工业4.0、个性化健康、虚拟存在等新兴服务的需求。传输速率的提升: 6G预计将支持的传输速率是5G的100-1000倍。带宽的使用。
2023-10-29 01:35:14
798
原创 本地与网站的文件交互-Github入门
本地与网站的文件交互在Github上创建仓库后,为了方便更新资源,会在本地创建一个文件夹实现与云端的同步本地版本库对标Github上的仓库术语解释提交(Git Commit)把对文件夹的更改同步到本地的版本库同步(Git Sync)把本地版本库的更改同步到Github上...
2020-08-01 19:17:25
180
原创 容器和算法2——C++(49)
容器和算法迭代器由来在上节课虽然我们成功地使用了向量,但是我们还是把它按照数组的形式进行操作的,如果我们创建的容器不支持使用数组下标来进行操作的话,程序就很难运行。这就需要使用迭代器。使用迭代器,当在程序里改用另一种容器的时候就不需要修改那么多的代码了。迭代器迭代器相当于是一个容器智能指针。定义 std::vector <std::string>::iner...
2020-03-10 12:47:06
129
原创 内联模板——C++(47)
内联模板函数内联是在构建类时,在类中把函数声明和实现放在一起。建议在创建类模板时,使用内联,会让代码更简洁。TIPS如果打算使用类模板,一定要给它添加一个副本构造器和赋值运算符的重载。C++并没有限制只能使用一个类型占位符,如果要使用一个以上的类型,声明和引用如下。 templete < class T ,class U> class Myclass...
2020-03-10 07:37:18
408
原创 类模板——C++(46)
类模板实现templete <class T>class Myclass{ MyClass(); void swap(T &a, T &b); //如果函数返回一个不知道的类型,就用T表示}//构造器的实现Myclass<T>::Myclass(){ //初始化操作}代码实现#include <iostream>...
2020-03-09 21:22:42
107
原创 函数模板——C++(45)
函数模板泛型编程技术支持程序员创建函数和类的蓝图(即模板,template),而不是具体的函数和类。标准模板库STL(Standard Template Library),STL库是泛型编程技术的经典之作,它包含了许多非常有用的数据类型和算法。换言之,创建函数模板就是写一个架构,不需要关注里面的数据类型。实例:templete <class T>void foo(T p...
2020-03-09 20:06:14
94
原创 链接和作用域——C++(43、44)
链接和作用域当一个项目由多个文件构成时,变量的作用域也会受到影响。存储类(storage class)每个变量都有一个存储类,它决定着程序将把变量的值储存在计算机的什么地方、如何存储、以及变量应该有怎样的作用域。默认的存储类是auto(自动变量),他是系统分配和系统回收的,储存在栈里面。链接在使用编译器建立程序时,有三个步骤。1、执行预处理器指令2、把.cpp文件编译成.o...
2020-03-09 13:11:55
126
原创 命名空间和模块化编程——C++(40、41、42)
命名空间和模块化编程模块化编程模块化:把程序划分成多个组成部分(即所谓的模块)。这是通过把程序代码分散到多个文件里,等编译程序时再把那些文件重新组合在一起实现的。头文件一般情况下都应该把自定义的头文件和其余的程序文件放在同一个子目录里,或者在主程序目录下专门创建一个子文件夹来集中存放它们。同文件应该只包含最必要的代码,比如纸声明一个类或一组彼此相关的函数。...
2020-03-07 18:04:41
394
原创 避免内存泄漏——C++(39)
避免内存泄漏如果程序会运行很长时间(例如在服务器上,注意不是所有的操作系统都像windows一样每天都要重启),并且在不停地申请新的内存块,忘记释放那些已经不再有用的老内存迟早会把内存消耗殆尽,直接导致后边的new操作无法执行甚至崩溃。动态内存是没有作用域的,所以必须由程序员来跟踪它们的使用情况,并在不需要用到它们的时候及时把它们归还给系统。虽然动态分配的内存块没有作用域,但用来保存其...
2020-03-07 16:53:56
106
原创 高级强制类型转换——C++(38)
高级强制类型转换静态对象强制类型转换new函数返回的是指针代码实现1/2 静态对象强制类型转换#include <iostream>#include <string>using namespace std;class Company{public: Company(string theName,string product); vi...
2020-03-07 15:25:47
188
原创 副本构造器——C++(37)
副本构造器由来我们可以把一个对象赋值给另一个相同类型的对象。在赋值的过程中,会把原对象各属性的值分别复制给目标对象的各属性,这种赋值方法,称为逐位复制。例如Myclass obj1;Myclass obj2;obj2=obj1;但是如果有一个属性是指针类型的话,会造成两个相同的指针指向同一个地址,那么在当删除一个对象的时候,它包含的指针也会被删除,有关内存会被释放,而此时另一...
2020-03-07 10:07:19
230
原创 从函数或方法返回内存——C++(36)
从函数或方法返回内存动态内存的另一个常见用途是让函数申请并返回一个指向内存块的指针。如果想要让函数返回一个以上的值,或者返回数组之类比较复杂的数据结构的话,那么就需要用到这个知识。基本思路在函数里调用new语句被某种对象或数据类型分配一块内存,再把那块内存的地址返回给主程序,主程序在完成相关操作后,使用delete语句释放内存。代码实现#include <iostream...
2020-03-05 16:58:34
433
原创 动态数组——C++(35)
动态数组由来虽然前面讲过的用new给基本类型和对象在运行时分配内存,但它们的尺寸在编译时就已经确定下来——因为我们为之申请内存的数据类型在程序中有明确的定义,有明确的单位长度。但有些时候,必须等到程序运行时才能确定需要申请多少内存,甚至还需要根据程序的运行情况追加申请更多的内存。学习内容编写一个程序,让他在运行时能让用户输入一个值自行定义数组的长度。进一步思考指针和数组的关系...
2020-03-05 16:12:36
203
原创 动态内存管理——C++(34)
动态内存管理由来很多时候,需要储存的数据量到底有多大往往是一个未知数,要处理好这类情况,就需要使用动态内存。动态内存由一些没有名字、只有地址的内存块构成,那些内存块是在程序运行期间动态分配的。他们来自一个由标准C++库替你管理的大池子(内存池),从内存池申请一些内存需要用到new语句,它将根据你提供的数据类型分配一块大小适当的内存。从内存池申请内存需要使用new语句,大家根据你的需要来给...
2020-03-05 15:22:00
119
原创 assert函数和捕获异常——C++(33)
assert函数和捕获异常assert函数C语言和C++都有一个专门为调试而准备的工具函数,就是assert函数。assert函数只有一个参数,相当于if语句的使用 assert( 判断语句 ); 如果为真,就什么都不做; 如果为假,程序中断,并给出提示include<cassert>int main(){ int i=20; assert(i...
2020-03-04 21:24:29
446
原创 错误处理和调试——C++(31、32)
编译时错误(complie-time error)TIPS培养并保持一种编程风格认真对待编译器给出的错误/警告信息写代码三思而后行(先画流程图)注意检查最基本的语法把可能有问题的代码行注释换一个环境或开发工具试试检查自己是否已经把所有必要的头文件全部include进来留意变量的作用域和命名空间休息一下使用调试工具运行时错误这时的...
2020-03-04 09:45:51
238
原创 虚继承——C++(30)
虚继承(virtual inheritance)由来在使用多继承方法的过程中,当两个基类具有相同的属性,(如name属性),多继承自它们的子类也会具有两个该属性,会产生矛盾,因此我们需要使用虚继承来解决。通过虚继承某个基类,就是在告诉编译器:从当前这个类派生出来的子类只能拥有这个基类的一个实例。语法class Teacher : virtual public Person{...
2020-03-03 20:24:59
103
原创 多继承——C++(29)
多继承什么时候使用多继承?当你遇到的问题无法用“是一个”来描述的时候。就需要用到多继承。比如,当我们定义了一个Person的基类,又创建了一个Teacher和一个Student的子类,但是我们又想描述一个兼职当教师的学生的时候,我们就需要写一个类,命名为TeachingStudent,来同时继承Teacher和Student类,这就是多继承。基本语法class TeachingStu...
2020-03-03 19:58:29
168
原创 重载左移运算符——C++(28)
左移运算符重载重载左移运算符也属于运算符的重载,不过语法有所不同。下面是一个 operate << () 函数声明的原型: std::ostream& operator << (std::ostream& os, Fenshu in);第一个数参数os是将要写入的流,它是以“引用传递”的方式传递的。第二个参数是打算写到那个流里面...
2020-03-02 20:53:45
1781
5
原创 运算符重载——C++(26、27)
运算符重载定义所谓重载,就是重新赋予新的含义,函数重载是对一个已有的函数赋予新的含义。方法运算符重载的方法是定义一个重载运算符的函数,在需要执行被重载的运算符时,系统就自动调用该运算符。也就是说,运算符重载是通过定义函数实现的,运算符重载实质是是函数的重载。格式函数类型 operator 运算符名称 (形参列表){ 对运算的重载处理}例如: 把加号运算符重载成乘...
2020-03-02 09:26:52
265
原创 抽象方法与多态性——C++(25)
抽象方法抽象方法,也可以称为纯虚函数。是面向对象编程技术的另一个核心概念。在设计一个多层次的类继承关系常会用到。把一个方法说明为一个抽象方法,等于告诉编译器: 这个方法必不可少。但我现在在这个基类里还不能为他提供一个实现。**抽象方法的语法很简单,在声明一个虚方法的基础上,在原先的末尾上加上“=0”。 (告诉这个编译器不用浪费时间在这个类里寻找这个方法的实现)总结理解抽...
2020-03-01 20:24:26
161
原创 虚方法——C++(24)
小甲鱼-C++学习笔记(24)之虚方法引言在学习C++的过程中,参考博主@OopsZero的笔记,受益很大。(下方附上链接)不过只记录到23讲,于是在此记录C++学习笔记目的是存放自己的代码,也希望能帮助到后来的人方便学习本系列笔记同步小甲鱼C++学习视频教程,代码不完全相同。点击进入相关链接.使用指向对象的指针如:int *pointer = new int*poin...
2020-03-01 18:23:25
216
研究生工程伦理结课报告-百度竞价排名事件分析
2023-12-29
Arduino经典模块程序.rar
2021-01-06
我的脉搏发生器.rar
2020-12-16
The drop of the oil price(英语报告PPT)
2020-07-20
PID学习视频教程PPT.rar
2020-07-20
PID学习——平衡小车PDF介绍到入门
2020-07-20
PID学习——PID源码
2020-07-20
1602显示红外接收数据.rar
2020-07-20
-Timer实现两路频率和占空比可调的PWM.rar
2020-07-20
-ADC+DMA接收.rar
2020-07-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人