- 博客(80)
- 收藏
- 关注
原创 RT-Thread-线程的创建
第三章 线程的创建一 什么是线程?基本概念线程是实现任务的载体,它是RT-Thread中最基本的调度单位,它描述了一个任务执行的运行环境,也描述了这个任务所处的优先等级。二 线程组成RT-Thread中,线程由三部分组成:线程代码(入口函数)、线程控制块、线程堆栈三 线程创建1、创建进程(1)创建静态线程rt_err_t rt_thread_init(struct rt_thread *thread, ...
2021-03-16 14:59:40
382
原创 RT-Thread-动态内存堆
第二章 动态内存堆的使用一 简述堆栈栈(stack):由编译器自动分配释放(局部变量)堆(heap):一般由程序员分配和释放(rt_malloc)二 RT_Thread动态内存配置和使用1、动态分配内存的API(board.c中板机硬件性能初始化,根据板卡实际内存进行分配)rt_system_heap_init((void *)HEAP_BEGIN,(void *)HEAP_END);HEAP_BEGIN宏:程序执行区的RAM结束后的地址,及RAM未使用的区域的起始地.
2021-03-16 14:53:03
385
原创 RT-Thread入门学习笔记
第一章 初识RT-ThreadRT-Thread小贴士:RT-Thread诞生于2006年,一款知名度高、口碑极佳、高度稳定可靠的实时操作系统。RT-Thread是开源免费的,许可证类似FreeRTOS。并且,它不仅是一个RTOS内核,而且包含网络、文件系统、GUI界面等组件,具有极强的扩展性哟~RT-Thread支持市面所有的主流编译工具(IAR、GCC、Keil等),硬件上,可支持完成超过50款MCU芯片上和所有主流CPU架构上的移植工作。RT-Thread特点:高可靠性+组建丰富
2021-03-16 14:51:01
336
原创 共享指针,弱指针
#include<iostream>#include<memory>using namespace std;class Child;class Parent;class A{ public: int m_num; A() { cout << "A" << endl; } A(int num) : m_num(num) { cout << "A int" << endl;
2020-06-01 00:04:27
585
转载 exit(0/1)相关
首先介绍一下:exit(0): 正常执行程序并退出程序。exit(1): 非正常执行导致退出程序。其次介绍:stdlib.h头文件中 定义了两个变量:#define EXIT_SUCCESS 0#define EXIT_FAILURE 1最后介绍:exit(EXIT_SUCCESS)&n...
2020-05-26 19:34:21
118
原创 嵌入式面向对象程序开发·智能指针(未整理完)
一、智能指针智能指针分类 auto_ptr(C++98) 被C++11智能指针替代,不再使用 unique_ptr(C++11) 独占指针 shared_ptr(C++11) 共享指针weak_ptr(C++11 ) 弱指针需使用例如g++ -std=c++11 -o a.out shared_ptr.cpp 编译1、shared_ptr共享指针1、作用:多个指针可以同时指向同一个对象(共享所有权,协同工作),当最后一个指针被销毁...
2020-05-24 21:31:35
252
原创 嵌入式面向对象程序开发·C++模板
第十三课、C++模板概述 模板是一种参数化的多态工具。所谓参数化的多态性,是指将程序所处理的对象的类型参数化,使一段程序代码可以用于处理多不同类型的对象。采用模板编程,可以为各种逻辑功能相同而数据类型不同的程序提供一种代码共享的机制。一、函数模板1、函数模板:(1)一般说明形式:template <模板形参表>返回值类型函数名(模板函数形参表){//函数定义体}注:①函数模板的定义以关键字template开头 ②temp...
2020-05-18 00:10:13
237
原创 嵌入式面向对象程序开发·依赖倒置+运行时类型信息(RTTI)
第十一课、浅谈设计模式-依赖倒置1、C++中有一种设计原则叫依赖倒置。也是基于多态的。2、高层模块不应该依赖低层模块,二者都依赖其抽象;抽象不依赖细节;细节依赖抽象。3、依赖倒置的意义: (1)以抽象为基础搭建起来的架构比以细节为基础搭建起来的架构要稳定的多。 (2)依赖倒置原则可以降低类间的耦合性,提高系统稳定性,降低修改程序造成的风险。 (3)抽象类(c++中称为接口)。(例如类Absbook 中的virtual string getContent() = 0;) (...
2020-05-12 20:13:55
188
原创 嵌入式面向对象程序开发·C++多态
第十课、C++多态一、多态介绍1、定义:由继承而产生的相关的不同的类,其对象对同一消息会作出不同的响应。2、作用: (1)增加程序的灵活性;(2)减轻系统升级、维护、调试的工作量和复杂度;(3)提高代码的扩展性。3、分类:静多态(编译时绑定)、动多态(运行时绑定)。 注:函数重载,也是一种多态现象,通过命名倾轧在编译阶段决定,故称为静多态4、多态形成的条件(前提):(1)父类中有虚函数; (2)子类覆写父类中的虚函数;(3)通过已被子类对象赋值的父类指针...
2020-05-12 20:10:51
157
原创 嵌入式Linux网络编程·笔记9·网络
TCP服务器实现过程 (1)创建套接字:socket函数 (2)给套接字绑定ip地址和端口号:bind函数 (3)将套接字文件描述符,从主动变为被动文件描述符(做监听准备):listen函数 (4)被动监听客户的连接并响应:accept函数 (5)服务器调用read(recv)和write(send),收发数据,实现与客户的通信 (6)调用close或者shut...
2020-04-27 20:23:57
137
原创 嵌入式面向对象程序开发·C++继承
第九课、C++继承封装:提高代码维护性 (遇到问题能够准确定位)。继承:提高代码复用性(非ctrl+c ctrl+v,而是不做任何修改或操作源码就能实现代码的复用)。多态:提高代码扩展性。2、继承描述:(以下方示例2为例说明)(1)A类是B类的父类,B是A的子类。(2)A类是B类的基类,B类是A的派生类。(3)继承的过程可视为拷贝。3、继承语法声明: ...
2020-04-27 20:17:52
208
原创 嵌入式Linux网络编程·笔记8·mutex线程互斥锁+sem线程信号量
二十八、mutex线程互斥锁1、pthread_mutex_init初始化互斥锁1、头文件:#include<pthread.h>2、函数原型:int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr);3、函数形参: mutex:互斥...
2020-04-17 16:44:54
349
原创 嵌入式面向对象程序开发·运算符重载
一、友元机制1、概念定义:(友元函数、友元类) (1)友元是一种允许非类成员函数访问类的非公有成员的一种机制。 (2)可以把一个函数指定为类的友元,也可以把整个类指定为另一个类的友元。2、友元函数: (1)该函数不是类的一部分,但又需要频繁地访问类的数据成员。 (2)友元函数在类作用域外定义,但它需要在类体中进行说明。 (3)为与该类的成员函数区别,定义方式是...
2020-04-17 16:38:11
130
原创 嵌入式Linux网络编程·笔记7·多线程(未完)
线程·概述1、线程是任务调度和执行的基本单位。2、进程实现多任务缺点: (1)进程间切换的计算机资源开销很大,切换效率非常低 。 (2)进程间数据共享的开销也很大(系统资源消耗快)。3、线程和进程的关系 (1)定义:线程是进程的一个执行单元(一个进程中可有多个线程),是进程内的调度实体。是比进程更小的独立运行的基本单位。线程也被称为轻量级进程。 (2)空间:...
2020-04-09 00:38:30
192
原创 嵌入式面向对象程序开发·深浅拷贝(补充)+移动构造函数
五、深拷贝与浅拷贝1、浅拷贝:对基本类型数据以及简单的对象直接复制内存的拷贝。但是,当类的成员包含指针的时候,使用浅拷贝是将拷贝对象的地址赋值给了新的对象,导致两个指针指向了同一块内存空间,这时候浅拷贝就不能满足实际要求了,需使用深拷贝。示例: Test (const Test &other) { m_id = ...
2020-04-04 11:48:16
144
原创 嵌入式Linux网络编程·笔记6·sem(信号量API)
二十三、sem(信号量API)1、作用:当多个进程/线程进行共享操作时,用于资源保护(互斥+同步操作),以防止出现相互干扰情况,解决方法->加锁。 注:互斥:该进程在操作时其他进程不能操作,不关心操作的顺序问题; 同步:多个共享操作时,进程必须要有统一操作的步调,按照一定的顺序来操作。2、信号量的使用步骤: (1)进程调用semget函...
2020-04-01 20:46:01
429
原创 嵌入式Linux网络编程·笔记5·msg(消息队列API)
二十二、msg(消息队列API)1、消息队列的特点:(1)传送有格式的消息流;(2)多进程网状交叉通信时,消息队列是上上之选; (3)能实现大规模数据的通信。1、msgget(创建/获取消息队列)1、 头文件:#include <sys/types.h> #include <sys/ipc.h> #include <sys/msg...
2020-04-01 20:42:19
559
原创 嵌入式面向对象程序开发·深拷贝与浅拷贝
五、深拷贝与浅拷贝1、浅拷贝:对基本类型数据以及简单的对象直接复制内存的拷贝。但是,当类的成员包含指针的时候,使用浅拷贝是将拷贝对象的地址赋值给了新的对象,导致两个指针指向了同一块内存空间,这时候浅拷贝就不能满足实际要求了,需使用深拷贝。示例:Test (const Test &other){ m_id = other.m_id; m.name =...
2020-03-27 21:23:58
210
原创 嵌入式Linux网络编程·笔记4·进程间通信
1.进程创建:fork、system、exec函数族(execl、execv)。2.进程退出:exit、_exit。3.进程等待:wait(用于处理僵尸进程)。4.三种特殊进程: (1)僵尸进程:父进程退出,未调用wait等待子进程退出,子进程资源无法回收。 (2)孤儿进程:父进程退出,子进程仍然继续运行,交给init进程进行资源回收。 (3)守护进程:后...
2020-03-25 17:27:18
100
原创 嵌入式面向对象编程·封装
一、封装1、封装作用:对外提供接口,屏蔽数据,对内开放数据。2、C语言的封装:当单一变量无法完成描述需求的时候,封装成函数或结构体类型解决。 问题:即知其接口,又可以直接访问其内部数据。 注:C语言中的封装内容不能是函数(C++中的class可实现),结果可以是函数。3、C++的封装:class 封装的本质,在于将数据和行为绑定在一起,再通过对象来完成操作。二、类与...
2020-03-22 21:16:35
960
原创 嵌入式面向对象编程·类型转换
一、static_casr<T>(expr)1、作用:相关数据类型之间的转换。(1)类似于C语言的强制转化,保证代码的安全性和正确性。(2)可用于①相关类型转换;例如整型、实型;②子类转父类;③ void *指针与其他类型指针之间的类型转换。(3)不允许指针之间类型的转换(特例:仅允许void*与其他指针之间的类型转换)。 如:char ch = ‘a’;...
2020-03-22 21:11:08
127
原创 嵌入式Linux网络编程·笔记4·多任务进程概念+fork函数
1、什么是多任务?--系统可响应多个任务。 (1)平台:单个CPU(一个核)同一时刻只能处理一条语句。 (2)任务:n个任务。 (3)一个任务在执行过程中,可以暂停执行,然后cpu执行其他任务。2、单任务:一个任务执行结束之后,另一任务才能开始。 3、多任务并发处理(单核):抢占式-中断(实时性)、非抢占式-时间片轮转(非实时性)。 CPU轮换的执行,当前进程执行...
2020-03-18 14:33:54
220
原创 嵌入式面向对象编程·vector类
1、头文件:#include<vector>2、作用:保存各类型的数据,可替换数组进行使用。3、使用:vector<数据类型 > 容器名称,定义一个容器。4、使用示例#include<iostream>#include<vector>#include<string>using namespace std;...
2020-03-15 19:24:03
272
原创 嵌入式面向对象编程·string类
一、string类的字符操作1、string定义:可变长的字符串2、string字符串初始化,示例:string s = “hello world”; sting s1(“hello world2”); string *ps = new string(“hello world3”); string s4 = “”; //空字符串3、string字符访问方式:使用[]或...
2020-03-15 19:22:06
393
原创 嵌入式面向对象编程·struct结构体升级
1、结构体作用:封装不同类型的数据,即将不同类型的数据整合在一起,用同一种数据类型表示。2、C语言 VS C++ C语言:(1)定义结构变量必须加上struct关键字。 (2)结构体只能存放变量,不能存放函数。 C++: (1)定义结构变量无须加上struct关键字。 (2)结构体能存...
2020-03-15 19:06:55
257
原创 嵌入式面向对象编程·C++对C的函数扩展
一、内联函数1、 inline是由编译决定,使用inline关键字只是申请编译器。2、 宏函数:(define)省去了自定义函数调用时所需对的形参及函数体里需要分配的空间;省去了函数调用、传参、函数返回、释放等过程(提高运行效率);利用编译时间换取内存空间。限制:频繁调用且功能简单的函数可使用宏函数。例: #define ADD(a,b) a+b3、 内联函数(inli...
2020-03-15 18:40:38
133
原创 嵌入式Linux网络编程·笔记3·系统调用篇(二)
七、fcntl(操作文件的特性)1、头文件:#include <unistd.h> #include <fcntl.h>2、函数原型:int fcntl(int fd, int cmd); int fcntl(int fd, int cmd, long arg); in...
2020-03-12 19:58:25
147
原创 嵌入式面向对象编程·C++对C的加强
一、实用性加强(接上篇)5、register关键字(与volatile联系起来)(C语言 VS C++)C语言:(1)作用:尽可能地将修饰的变量保存在cpu的内部寄存器中,省去了cpu到内存中抓取数据的时间,提高程序的运行效率。(2)修饰对象:频繁访问的变量。(不能修饰全局变量,也不能修饰函数,只能修饰局部变量)(3)格式: 如:register int num = 5 ...
2020-03-07 14:27:54
163
原创 嵌入式Linux网络编程·笔记2·系统调用篇(一)
一、Create1、头文件:#include<sys/types.h> #include<sys/stat.h> #include<fcntl.h>2、函数原型:int create(const char *pathname, mode_t mode);3、函数内形参:创建文件名(路径)、文件权限(RWX, 0655当前用户RW...
2020-03-04 22:38:50
380
原创 嵌入式面向对象编程·C++对C的加强·实用性加强(未完)
1、for功能增强 //功能一 for(int i =0;i<3;i++) { cout << i << endl; } //功能二 int array[3] = {1,5,6}; for(int temp : array ) //freach { cout << te...
2020-02-29 23:37:39
169
原创 嵌入式面向对象编程·C++对C的加强·命名空间
1、命名空间作用:防止(变量名、函数名、类名)发生命名冲突。2、举例生活例子:当一个班上有两个名叫 Zara 的学生时,为了明确区分它们,我们在使用名字之外,不得不使用一些额外的信息,比如他们的家庭住址,或他们父母的名字等。计算机系统中的例子:一个文件夹(目录)中可以包含多个文件夹,每个文件夹中不能有相同的文件名,但不同文件夹中的文件可以重名。C++程序例子:一个.cpp文件中有两...
2020-02-29 23:27:34
146
原创 嵌入式面向对象编程·课堂笔记1·开篇
一、C++在嵌入式开发中的地位及应用领域(1)上层应用软件:c/c++/java/object.c/php、脚本语言:python(2)中间框架(运行库):solite3、网络线程库、opengl、opencv、tensorflow、caffer(框架)(3)系统:Linux、Android(C/汇编/脚本)、Linux内核(4)底层硬件:ARM人工智能芯片(fpga)-汇编/硬件...
2020-02-27 20:27:17
370
原创 嵌入式Linux网络编程·笔记1·Linux C 文件编程
Linux C 文件编程 – Linux I/O编程1.为什么称为I/O编程? Linux一点哲学:一切皆为文件。2.硬件设备也被抽象为文件:对硬件的操作=对硬件I/O操作=对文件的操作。3.Linux为什么会选择把所有资源抽象成文件? 1)文件本质就是字符流 – 二进制; 2)文件的操作比较简单:打开、读、写、关闭、设置文件的属性(w/r/a/+);...
2020-02-27 20:23:03
221
转载 Linux下Makefile中动态链接库和静态链接库的生成与调用
一、概念动态链接库:是一种不可执行的二进制程序文件,它允许程序共享执行特殊任务所必需的代码和其他资源。Windows平台上动态链接库的后缀名是”.dll”,Linux平台上的后缀名是“.so”。Linux上动态库一般是libxxx.so;相对于静态函数库,动态函数库在编译的时候并没有被编译进目标代码中,你的程序执行到相关函数时才调用该函数库里的相应函数,因此动态函数库所产生的可执行文件比较小。由...
2019-12-02 09:30:50
312
转载 makefile详细教程
概述——什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写makefi...
2019-12-01 22:02:28
124
转载 嵌入式实时操作系统ucosii原理及应用(任哲)
本文是《嵌入式实时操作系统ucosii原理及应用(任哲)》一书第三章的阅读笔记,知识点多为摘录,若希望深入了解,请购买该书认真研读。由于一些知识比较零散,记起来不大方便,又习惯画图辅助记忆,刚好想起一款比较好用的思维导图,就顺手拿来用一用了(绝非打广告),导图中包含部分备注。脑图链接及密码:http://naotu.baidu.com/file/c550d674fa54bd29588c31c5...
2019-12-01 21:56:46
994
原创 每周5练·shell
1、使用脚本循环创建三位数字的文本文件(111-999的文件)#!/bin/bash#使用脚本循环创建三位数字的文本文件(111-999的文件)foriin{1..9}do forjin{1..9} do forkin{1..9} do touch/tmp/$i$j$k.txt ...
2019-12-01 21:28:07
122
转载 Linux·make&makefile(详解)
从一只猫说起hello kitty linux系统中的make命令与makefile文件 make与makefile 在linux系统中make是一个非常重要的编译命令,不管是自己进行项目开发还是安装应用软件,我们都经常要用到make或makeinstall。利用make工具,我们可以将大型的开发项目分解成为多个更易于管理的模块,一个工程中的源文件不计数,其按类型、功能、模块分别放在...
2019-11-24 22:00:01
424
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人