自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(147)
  • 资源 (10)
  • 收藏
  • 关注

原创 使用指针进行字符串赋值的小细节

String::String(const char *s){ int len; char s_temp; length = strlen(s); pBuf = new char[length+1]; //pBuf是String类中的 char* 变量 while(*s != '\0') { *pBuf++ = *s++; } *pBuf = '\0'; cout << "initializing pBuff: " << pBuf << end

2021-03-14 13:08:45 397

原创 C++ 类的继承

一、为什么C++需要用到“继承”实不相瞒,我身边有位同学,他姓张,姑且叫他张同学。有一天,张同学哭着跟我说,“我好惨啊,你说上天怎么对我这么不公平,我长着一副英俊潇洒的脸,明明可以考实力闯出一番事业的,偏偏整天被家里逼迫,要我去继承十几亿身家,呜呜呜……”。虽然我想揍他,但想了想,他还是个小孩,需要他人的关爱。算了,今晚就奉献一点爱给他。他继承了继承了十几亿能去干嘛?他可以买十年真题,他可以买遥控车,他可以买棒棒糖,他可以把十几亿转账给我…说到底,就是使用他老爸的钱来完成某一样事情…那C++的继

2021-02-26 16:52:01 553

原创 C++常函数

一、什么是常函数?常函数,就是对类中任何成员不作修改而只能作访问的函数。二、为什么存在常函数?在一个大型的C++项目中,通常需要多人负责,我们可以简单地分成两类人,一类人负责class的设计,另一类人负责使用设计好的class。他们在协作中,难免会出现一些错误。比如,使用者通过调用类的方法,只是想查看类的属性,但被调用的方法内部可能存在修改属性的语句,即使所修改的成员并非使用者所查看的对象,但这并不是使用者的意图。所以,C++添加了常函数,增加一个条件来确保所调用的函数不会修改类的成员。三、实验

2021-02-10 19:41:44 5369

原创 C++ 浅拷贝与深拷贝

一、浅拷贝和深拷贝是什么?什么是浅拷贝?只有普通变量初始化的拷贝构造函数就浅拷贝。咋算普通变量?如int,char, string…不涉及指针变量。可以直接使用默认拷贝构造函数。什么是深拷贝?不用默认拷贝构造函数,自己显式定义一个拷贝构造函数,并且在其内部再次分配动态内存,这就是深拷贝。总的来说,就是类中涉及到指针变量,需要在拷贝构造函数内部申请一边。二、实验...

2021-02-07 01:00:38 353

原创 C++ 拷贝构造函数

一、什么拷贝构造函数?拷贝构造函数就是一个函数。这个函数是负责拷贝其它类中的变量。在无显式定义拷贝构造函数的情况,编译器会定义默认拷贝构造函数。二、实验1、实现类的拷贝(copy)//video.hpp#ifndef __VIDEO_H_#define __VIDEO_H_#include <string>using namespace std;class video{public: string film_name; int during_time; int

2021-02-07 00:30:31 150

原创 C++ class中使用动态内存变量

一、什么情况下class需要使用动态内存变量?需要用到大块内存的时候。比如,动态加载一个视频,一幅图片等等。我们无法事先预知视频或图片的大小。实现静态定义它的大小,有可能会出现空间不足或浪费的情况,所以这时候可以使用动态的方式申请内存。二、实验实验一:在class中定义指针,并且分配内存//video.hpp#ifndef __VIDEO_H_#define __VIDEO_H_class video{public: int *pSpace; video(int size);

2021-02-04 00:13:11 343

原创 C++析构函数

一、什么析构函数析构函数就是对象被释放的时候被调用的函数。它的本质是回调函数。什么时候对象会被释放?比如,main执行完退出的时候,delete一个对象指针的时候…析构函数的特点是,不带返回值,也不带参数。二、实验实验一:析构函数的定义方法//cat.hppclass cat{public: string name; int age; bool male; cat(){this->name = "wawa";}; cat(string name, int age, bo

2021-02-03 07:42:24 4031

原创 C++的构造函数

一、什么是构造函数构造函数就是用来构造对象的函数。它的本质就是一个回调函数。什么时候被回调?当你创建一个对象的时候,用来初始化class的属性,分配class内部需要的动态内存。构造函数的特点是,可以带参数,但不带返回值。二、实验实验一:显式默认构造函数当你定义的class中没有构造函数的时候,编译器会默认实现一个构造函数,这个构造函数是空白的,我们可以将显式编译器默认构造函数。#ifndef __ANIMAL_CAT_#define __ANIMAL_CAT_#include <

2021-02-03 07:18:45 238

原创 C++ 面向对象编程文件结构

一、文件结构的安排一般一个cpp和一个hpp文件配对,class名字和文件名相同。二、实验任务:描述一只猫一天的生活,属性包含姓名、年龄、性别。方法包含起床、吃饭、睡觉、玩耍(公的玩小球,母的玩娃娃)。首先,先新建三个文件。//cat.hpp#ifndef __ANIMAL_CAT_#define __ANIMAL_CAT_#include <iostream>#include <string>using namespace std;class cat

2021-02-03 06:49:06 226

原创 C++ alignof和alignas

一、什么是alignof和alignasalignas用来指定对象的对齐字节数。效果和__attribute__((aligned(n)))一样alignof用来查看对象的对齐字节数。用法类似于sizeof二、实验使用alignas修改结构体的对齐字节数,然后用alignof查看是否设置成功。同时,与__attribute__((aligned(n))) 进行对比。#include <iostream>using namespace std;struct alignas(1)

2021-01-18 13:03:26 1660

原创 C++11中的nullptr

一、什么是nullptr?nullptr是c++11的空指针,可以理解为 NULL的升级版。二、解决什么问题?首先,在C语言中,NULL是被定义成这样的#define NULL ((void *)0)。而C++中,NULL是被定义成这样#define NULL 0。那好,我手动强制转换 ((void *)0)不就行了吗?很可惜,失败了。因为C++是强类型语言,即类型要一一对应,不允许void *隐式转为int *等类型。不能强制转换就算了,那我继续沿用NULL吧。再看一下可能产生什么问题

2021-01-17 18:29:00 2448 2

原创 C++ enum枚举的使用

一、enum在C++11的变化从C++11开始,支持下面的enum形式enum struct|class 名字 : 类型 { 枚举项 = 常量表达式 , 枚举项 = 常量表达式 , ... } enum class pet: unsigned int{ Dog, Cat, Monkey, Lion};enum struct|class 名字 { 枚举项 = 常量表达式 , 枚举项 = 常量表达式 , ... }enum class pet { Dog, Cat, Monkey, Lion};

2021-01-16 13:05:54 803

原创 C++中引用的本质

一、引用的本质我不会告诉你,引用是“别名”,这更加令人难以琢磨…引用的本质就是带有const的指针引用的本质就是带有const的指针引用的本质就是带有const的指针int & a = b <---> int *const a = &bchar & a = b <---> char *const a = &bdouble & a = b <---> double *const a = &b(结构体类型)

2021-01-16 08:29:37 1836

原创 C与C++混合编程

一、C与C++混合编程的原理首先,我先了解一下编译的过程。分为四步:预处理(预处理用于将所有的#include头文件以及宏定义替换成其真正的内容)——编译(将经过预处理之后的程序转换成特定汇编代码(assembly code)的过程)——汇编(汇编过程将上一步的汇编代码转换成机器码)——链接(链接过程将多个目标文以及所需的库文件(.so等)链接成最终的可执行文件).可以看下原文,大致了解一下:https://www.cnblogs.com/carpenterlee/p/5994681.html在

2021-01-13 23:07:43 5317 1

原创 Window10 新建删除文件,需要手动刷新才能显示[已解决]

电脑隔了好几天没有开机。今天一开机,发现不对劲,在硬盘上面新建文件后看不到文件,删除后文件还在,感觉出事了,于是百度了一会儿,给我搞掂了。解决步骤:1、开始——运行——输入regedit2、弹出注册表编辑器3、找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control4、接着在Control新建项,命名为 Update5、在Update中新建项,UpdateMode6、在UpdateMode中,右键“可扩充字符串值”,命名为“DWORD”,双击

2021-01-08 19:04:27 2664 2

原创 string初步使用

1.string是什么?2.实验#include <iostream>#include <string>using namespace std;int main(){ string str1 = "hello world"; string str2 = " smart"; char str3[50] = {0}; char *str4; cout << str1 <<endl;

2021-01-06 19:15:58 117

原创 fstream读写文件

1.fstream是什么?fstream是C++标准库中面向对象库的一个,用于操作流式文件。fstream本质上是一个class,提供file操作的各种方法。2.关系图basic_fstream是一个类模板,暂且不用深入理解它。我们关心的事,它前面继承的那一堆东西。fstream是basic_fstream<char>的一个模板类,也就说明,fstream也继承了一堆东西。我们再关心一下从 ios_base基类,重点继承了什么?文件流的打开模式。3.实验3.1 打开/创建文件

2021-01-05 11:01:47 4292

原创 cin的使用

1.什么是cincin是将标准输入流写入缓冲区,即从键盘输入。2.cin涉及到的头文件: 将标准的输入输出封装到std命名空间里。3.实验3.1 读取一段字符串#include <iostream>using namespace std;int main() { char val[100]; cin >> val ; cout << val << endl; return 0;}输入:hello world输出:h

2021-01-04 14:20:21 6171 2

原创 cout的使用

1.cout是什么?cout是标准输出,对应stdout。2.cout涉及到的头文件<iostream>: 将标准的输入输出封装到std命名空间里。<iomanip>:定义了标准输入输出的控制方法,如控制精度等操作<bits/ios_base.h>:定义标准输入输出的格式状态,如将标准输出格式化为 十六进制,对应的cout对象某个状态位被设置。3.<< 符号"<<" 是流操作符号,已经被重载。没有左移的效果。4. 实

2021-01-04 10:55:56 11012

原创 C++系列: 标准库的初步介绍

目录1.C语言和C++的关系2. C++对C库的兼容性3. C++库的简单介绍4.最后1.C语言和C++的关系C++是C语言的一个超集,也就是说C语言有的,C++都有,而C++有的,C语言未必就有。同时,g++能编译C++文件,同样也能编译C语言文件。C程序可以通过 __cplusplus来判断编译器是gcc还是g++,__cplusplus的值是long int类型,记录C++编译器的版本号。情况一:使用gcc编译C程序#include <stdio.h&g

2021-01-03 09:34:29 385

原创 C++系列: 嵌套命名空间

目录1.什么是嵌套命名空间?2.实验2.1 外部引用嵌套命名空间内的符号2.2 命名空间内容不同层次间符号的引用3.最后1.什么是嵌套命名空间?嵌套命名空间就是在命名空间里面在定义其它的命名空间,就像是俄罗斯套娃。namespace np1{ namespace np2 { namespace np3 { } } ...}2.实验2.1 外部引用嵌套命名空间内的符号情况一.

2021-01-03 08:39:52 3474 1

原创 c++系列:匿名命名空间

文章目录1.什么是匿名命名空间?2.匿名命名空间有什么用处?3.实验3.1在匿名空间中引用其它命名空间3.2匿名命名空间中引用自己命名空间中的方法3.3其他命名空间中引用匿名命名空间中的方法3.4不同文件调用匿名命名空间4.最后1.什么是匿名命名空间?匿名命名空间就是一个没有名字的命名空间。namespace { func() { ... }}2.匿名命名空间有什么用处?匿名命名空间里的内容只能被本文件调用,不能被外部引用;匿名命名空间中的变量特点跟全局变量一样,而函数特点像是

2021-01-02 08:14:00 6905 1

原创 c++系列:namespace(二)

探讨默认命名空间不理解这些概念也不会影响你的编写代码,但是这些概念可能会出现在试卷上、面试上…1. 什么是默认命名空间?不包含namespace的都是默认命名空间,比如 main函数,就是定义在默认命名空间。2.全局命名空间全局命名空间 就是 默认命名空间。3.默认命名空间引用其他命名空间方法就是在main函数里面,调用namespace里面的内容int main(){ np1::func1(); return 0;}4.默认命名空间引用自己的方法这不就是C语言的常规操作嘛…

2021-01-01 11:29:38 115

原创 c++系列: namespace(一)

1、为什么需要namespace?namespace解决的全局变量和函数命名冲突的问题,namespace功能就像身份证一样,即使全国有100个人跟你同名,但是你的身份证号是唯一的,身份证记录你的出身省份、出身日期等等信息。2、c++和c解决命名冲突的方式有何不同?c++是namespace命名空间,说白了,先定义一个篮子,篮子里面放东西,这得要求每个篮子都是唯一的,而篮子之间里面的东西可以相同。c语言没有关键字能解决这个问题。所以,一个c语言的项目,尽可能一个人写;定义的全局变量,前面加上前缀;不

2021-01-01 11:04:41 275 1

原创 Linux gpiolib简要分析

文章目录一、怎么用?二、简要分析gpiolib1、开启gpiolib的sysfs功能一、怎么用?#include <linux/init.h>#include <linux/module.h>#include <linux/fs.h>#include <linux/leds.h>#include <asm/io.h>#include <plat/map-base.h>#include <plat/map-s5p.h

2020-11-23 19:43:25 406 3

原创 Linux LED设备驱动框架总结

文章目录Q1:到底什么是驱动框架?Q2:内核驱动框架中的LED位置在哪?Q3:leds目录的特点是什么?Q4:怎么在内核中使能LED驱动框架?Q5:新创建leds目录下,为什么不是空白?Q6:class-led.c的运作基本流程(1)subsys_initcall(leds_init);(2)static int __init leds_init入口函数Q1:到底什么是驱动框架?(1)驱动框架由内核维护者设计,他们将每种类的驱动设计成一套成熟的、标准的、典型的驱动实现。将各个厂家相同的硬件驱动部分抽出来

2020-11-04 23:43:37 515 1

原创 Linux驱动class_create()和device_create()应用

文章目录一、代码二、程序分析Q1:如何自动创建字符设备节点?一、代码#include <linux/init.h>#include <linux/module.h>#include <linux/fs.h>#include <linux/gpio.h>#include <plat/gpio-cfg.h>#include <mach/gpio.h>#include <mach/gpio-exynos4.h>

2020-10-25 00:27:34 720

原创 字符设备驱动测试(随笔)

文章目录一、任务要求二、完整代码1、module_test.c 驱动部分代码2、app.c 应用程序3、Makefile三、程序分析Q1:注册的流程是什么?Q2: register_chrdev 与 register_chrdev_region/alloc_chrdev_region有什么区别?Q3: register_chrdev_region/alloc_chrdev_region如何使用?Q4:MKDEV、MAJOR、MINOR三个宏有什么作用?Q5: 真正用来注册的是哪个函数?Q6: 在模块入口函数

2020-10-17 08:30:09 325

原创 exynos 4412 LED字符设备驱动测试(随笔)

文章目录LED驱动代码以及原理图(1)exynos4412相关的虚拟地址包含哪些文件?(2)怎么对GPIO的虚拟寄存器进行操作?(3)为什么GPL2DAT的偏移量比GPL2CON的多出 0x04?LED驱动代码以及原理图实验的目的:验证gpio的虚拟地址。实验现象:在开发板加载模块时候,LED亮;卸载模块,LED灭#include <linux/init.h>#include <linux/module.h>#include <linux/fs.h>#in

2020-10-11 11:09:43 262

原创 字符设备驱动(随笔)

先奉上代码模块代码#include <linux/init.h>#include <linux/module.h>#include <linux/fs.h>#define MYMAJOR 0#define NAME "MyModule"int major;static int module_open(struct inode *inode, struct file *file){ printk("module_open\n"); return 0

2020-10-11 08:35:27 97

原创 拆解最简单的内核模块(随记)

#include <linux/init.h>#include <linux/module.h>static int __init hello_init(void){ printk(KERN_DEBUG "Hello World enter!\n"); return 0;}static void __exit hello_exit(void) { printk(KERN_DEBUG "Hello World exit!\n");}MODULE_LICENSE(

2020-10-07 07:43:05 127

原创 itop4412开发板学习——“掉坑”总结(持续更新)

文章目录一、关于官方自带的内核编译二、关于驱动开发一、关于官方自带的内核编译(1)make编译内核是,出现 -fipa-cp-clone 优化项目无法识别的问题原因:编译器是自己在网上下载的,版本是arm-2009q1,而官方提供的是arm-2009q3解决:使用官方的版本。(2)出现 “make[1]: *** [kernel/timeconst.h] Error 255”的错误原因:可能是我使用ubuntu16.4编译Linux-2.6.31内核,官方的ubuntu是12.解决:将

2020-10-01 08:44:06 563

原创 Source Insight4.0 跳转不了符号的原因

在新建工程的时候,需要将源码文件都添加到树上“add tree”,之前漏了这一步,所以不管怎么同步文件,也都无法找到符号。具体怎么同步文件,搜一下其它博客,他们都写得很详细。

2020-09-28 08:37:51 828

原创 嵌入式linux消息队列应用

文章目录消息队列机制发送消息三步走接收消息两步走消息队列机制在内核空间开辟一片区域,一个进程将数据传到另一个进程,需要完成2次数据复制。第一次,将一个进程的数据复制到内核中,即从用户态转到内核态。第二次,将内核的数据复制到另一个进程,即从内核态转到用户态。与管道相比,简化了对文件的操作。发送消息三步走第一步:创建一个对象,msgget。需要定义队列的键值,相当于IPC通信对象中的ID号,需要与其他IPC对象的key不一样,接着还需设置权限、模式。第二步:复制“消息”到缓存区,则先定义一个结构体#

2020-09-27 07:23:47 516

原创 itop4412开发板显示ADB驱动成功方法

第一步安装adb驱动。第二步1、打开开发板进入uboot模式,开机后一直按回车,就能进入uboot模式2、在超级终端分别输入以下命令:输入分区命令“fdisk -c 0”格式化命令,超级终端中输入命令:– fatformat mmc 0:1– ext3format mmc 0:2– ext3format mmc 0:3– ext3format mmc 0:4 •连接命令,超级终端中输入命令: – fastboot此时,开发板可以与电脑连接,同时,电脑的设备管理器也识别到 开发板连接后

2020-09-21 07:31:33 469

原创 RT-Thread看门狗驱动流程

文章目录1、配置STM32CubeMX2、配置Kconfig3、代码测试1、配置STM32CubeMX首先要使能HAL库的看门狗功能。另外一种方法是,找到stm32fxx_hal_conf.h文件,接着就将对应的宏打开。这样就可以不用开打STM32CubeMX。不过,下次配置STM32CubeMX时候要小心,你重新生成的工程会将你直接在文件打开的宏给注释掉,因为你没有在STM32CubeMX上使能。2、配置Kconfig仿照上面的语法来写写的时候怎么知道对应的 宏定义(BSP_USING_

2020-09-13 06:58:30 1630

原创 利用模块注册设备的驱动

文章目录1、概述2、相关代码3、测试1、概述与设备驱动相关的结构体和函数有:struct platform_driver { int (*probe)(struct platform_device *); int (*remove)(struct platform_device *); void (*shutdown)(struct platform_device *); int (*suspend)(struct platform_device *, pm_message_t state

2020-08-27 00:08:09 82

原创 利用模块注册设备

文章目录1、概述2、详细代码1、概述linux对设备要求是,先注册设备,然后注册设备的驱动。利用模块来注册设备和注册设备对应的驱动,是为了方便学习和测试。当功能测试好后,要在linux源码下对应的开发板的平台文件进行注册设备。然后编译源码。在这里,先来分析一下怎么利用模块来注册设备。与注册设备相关的数据结构和函数有:struct platform_device { const char *name; int id; bool id_auto; struct device dev;

2020-08-26 23:55:25 93

原创 linux内核裁剪的“秘密”

文章目录通过Kconfig文件,形成菜单make menueconfig 配置——》.config根据menueconfig生成对应的宏定义——》编译内核时,根据.config文件来裁剪内核。

2020-08-25 14:25:39 468

原创 最简单的内核模块——打印“hello world”

文章目录1、最简单的内核模块由哪些东西构造?2、c文件的编写3、Makefile文件的编写4、让.ko文件跑起来1、最简单的内核模块由哪些东西构造?首先,有一个c文件。然后,一个Makefile文件,通过make命令将c文件编译成一个模块。最后,将模块加载到你的linux系统中,可以是开发板,或者是qemu模拟器。在这里,我使用qemu模拟器。2、c文件的编写c文件要包含什么内容?(1)两个头文件 #include <linux/init.h>和#include <lin

2020-08-24 22:35:22 1095

MQTT协议传输温湿度数据ADC模拟量到阿里云物联网平台.zip

STM32L BC26开发板 NBIot学习例程.

2020-04-02

LWM2M协议传输温湿度ADC数据到电信云华为云.zip

STM32L BC26开发板 NBIot学习例程

2020-04-02

LWM2M协议采集多个属性数据到ONENET和MODBUS框架搭建.zip

STM32L BC26开发板 NBIot学习例程

2020-04-02

LWM2M协议ADC采集光照烟雾等传感器数据到ONENET.zip

STM32L BC26开发板 NBIot学习例程

2020-04-02

LWM2M协议传输温湿度数据到ONENET移动云.zip

STM32L BC26开发板 NBIot学习例程

2020-04-02

LWM2M协议传输变量数据到ONENET平台.zip

STM32L BC26开发板 NBIot学习例程

2020-04-02

温湿度发送到阿里云服务器曲线显示.zip

STM32L BC26开发板 NBIot学习例程

2020-04-02

通过TCP协议与阿里云服务器双向透传.zip

STM32L BC26开发板 NBIot学习例程

2020-04-02

通过UDP协议与阿里云服务器双向透传.zip

STM32L1 BC26开发板 NBIot学习例程

2020-04-02

UDP传输与接收数据到阿里云私有IP.zip

STM32L1 BC26开发板 NBIot例程

2020-04-02

空空如也

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

TA关注的人

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