自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

木子皿--啥都不会的菜鸟

努力学习,希望有朝一日能够从事后台服务器开发相关工作!

  • 博客(66)
  • 资源 (4)
  • 收藏
  • 关注

原创 服务端升级为select模型处理多客户端

文章目录1 服务端升级为select模型处理多客户端1.1 概述1.2 服务端实现1 服务端升级为select模型处理多客户端1.1 概述之前我们的设计是服务端与客户端1对1的阻塞模式网络程序,我们这里对服务端进行升级,引入select模型,使得服务端有能力处理多个客户端。Socket的select模型:int select ( int nfds, fd_set FAR * readfds, fd_s

2020-05-30 11:22:28 360

原创 Shell中常用的通配符

文章目录1 Shell中常用的通配符1 Shell中常用的通配符通配符共有3个: “*”,“?”,“[]”* - 用于匹配文件名中任意长度的字符串;? - 只匹配一个字符;[] - 用于匹配所有出现在方括号内的字符。可以使用短线- “-”来指定字符集范围。如:ls text[1-3] 或 ls test[a-z]或ls test[123]。...

2020-05-29 17:10:13 2091

原创 列的完整性约束

文章目录1 设置列的完整性约束1.1 设置表字段的主键约束(PRIMARY KEY,PK)1.2 设置表字段的外键约束(FOREIGN KEY,FK)1.3 设置表字段的非空约束(NOT NULL, NK)1.4 设置表字段唯一约束(UNIQUE,UK)1.5 设置表字段值自动增加(AUTO_INCREMENT)1.6 设置表字段的默认值(DEFAULT)2 调整列的约束完整性2.1 增加、删除列2.2 调整主键PK、外键FK和 唯一键UK2.3 修改默认值DEFAULT、自增长和非空NK1 设置列的完整

2020-05-29 15:01:33 3216

原创 命令解释器的设计及实现

文章目录1 命令解释器的设计及实现1 命令解释器的设计及实现命令解释器的实现较为简单,流程简单归纳为:打印命令提示符读取一行字符串解析命令,执行操作,必要时打印结果主要实现了如下命令:实现代码如下:cli.h:/** * @brief 命令解释器设计 * @details * @author 01课堂 李述铜 http://01ketang.cc * @date 2017-06-01 * @version 1.0 * @copyright 版权所有,禁止用于商业用途 *

2020-05-29 10:36:37 1355 2

原创 网络报文的数据格式定义和使用

文章目录1 网络报文的数据格式定义和使用1.1 概述1.2 服务端实现1.3 客户端实现1 网络报文的数据格式定义和使用1.1 概述上次我们的代码使用了结构化的网络消息,但是只能发送指定的数据格式的数据,无法完成交互。因此,我们需要定义网络报文的数据格式。网络数据报文的格式定义:报文有两个部分,包头和包体,是网络消息的基本单元。包头:描述本次消息包的大小,描述数据的作用。包体:数据。1.2 服务端实现server.cpp:#define WIN32_LEAN_AND_MEAN#i

2020-05-28 17:17:53 1423

原创 MySQL中的二进制类型

文章目录1 MySQL中的二进制类型1.1 二进制类型概览1.2 binary和varbinary类型1.3 bit类型1.4 blob类型1.5 实战建议1 MySQL中的二进制类型1.1 二进制类型概览二进制数据和文本数据在mysql 中的最大区别在于:二进制类型存储原始的二进制数据(如图片,视频,exe文件等)。文本类型(TEXT)用来存储字符字符串(如由英文字符、中文字符或其它语言字符组成的字符串)。二进制类型没有字符集,并且排序和比较基于列值字节的数值。而TEXT类型有字符集,并且根据

2020-05-28 16:26:07 1804

原创 发送结构化的网络消息

文章目录1 发送结构化的网络消息1.1 概述1.2 服务端实现1.3 客户端实现1 发送结构化的网络消息1.1 概述我们之前都是采用纯字符串网络消息,特点如下:优点:处理简易命令方便快捷。缺点:传递大量数据是字符串解析消耗大。企业中的应用方式:JSON、XML、自定义格式的字符数据形式。这里我们先使用结构化的二进制数据流传输网络消息,其特点如下:优点:简单、方便、解析快,消耗低。缺点:需要严格的网络字节序一致。1.2 服务端实现server.cpp:#define WI

2020-05-27 17:33:09 345

原创 建立能够持续请求的CS网络程序

文章目录1 建立能够持续请求的CS网络程序1.1 概述1.2 服务端代码1.3 客户端代码1 建立能够持续请求的CS网络程序1.1 概述我们在上一次的代码基础,建立能够持续请求的CS网络程序:1.2 服务端代码server.cpp:#include <iostream>#define WIN32_LEAN_AND_MEAN#include <Windows.h>#include <WinSock2.h>#pragma comment(lib,

2020-05-27 17:13:53 243

原创 MySQL中的enum和set类型

文章目录1 enum类型2 set类型1 enum类型ENUM类型又称为枚举类型。在创建表时,ENUM类型的取值范围以列表的形式指定,其基本形式如下:属性名 ENUM('值1', '值2', …, '值n')其中,“属性名”参数指字段的名称,“值n”参数表示列表中的第n个值。ENUM类型的值只能取列表中的一个元素。其取值列表中最多能有65535个值。如果数据值列表在255个以内,那么一个字节就够,如果超过255但是小于65535,那么系统采用两个字节保存。列表中的每个值独有一个顺序排列的编号,M

2020-05-27 16:24:34 864

原创 MySQL中的Text类型

文章目录1 MySQL中的Text类型1 MySQL中的Text类型TEXT类型是一种特殊的字符串类型,包括TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT,其长度和存储空间的对比下表所示:各种TEXT类型的区别在于允许的长度和存储空间不同。因此,在这几种TEXT类型中,根据需求选取既能满足需要又节省空间的类型即可。特别注意:以上各类型无须指定长度!允许的长度是指实际存储的字节数,而不是实际的字符个数,比如假设一个中文字符占两个字节,那么TEXT 类型可存储 65535/2

2020-05-27 16:01:04 28695

原创 MySQL中的char和varchar类型

文章目录1 MySQL中的char和varchar类型1 MySQL中的char和varchar类型CHAR类型和VARCHAR类型都在创建表时指定了最大长度,其基本形式如下:字符串类型(M)其中,“字符串类型”参数指定了数据类型为CHAR类型还是VARCHAR类型;M参数指定了该字符串的最大长度为M。例如,CHAR(4)就是数据类型为CHAR类型,其最大长度为4。注意:这里的长度是指字符的长度,而不是字节长度!默认编码格式为utf-8格式,插入汉字时为3个字节。CHAR类型的长度是固定

2020-05-27 15:38:50 405

原创 MySQL中的日期和时间类型

文章目录1 MySQL中的日期和时间类型1 MySQL中的日期和时间类型日期与时间类型是为了方便在数据库中存储日期和时间而设计的,数据库有多种表示日期和时间的数据类型。其中,YEAR类型表示年,DATE类型表示日期,TIME类型表示时间,DATETIME和TIMESTAMP表示日期和时间。下面从这5种日期与时间类型的字节数、取值范围和零值等方面进行对比,如下表所示。每种日期与时间类型都有一个有效范围。如果插入的值超过了这个范围,系统就会报错,数据插入失败。不同的日期与时间类型均有不同的零值。插入日

2020-05-27 15:12:56 309

原创 MySQL中的浮点数类型和定点数类型

文章目录1 MySQL中的浮点数类型和定点数类型1 MySQL中的浮点数类型和定点数类型数据表中用浮点数类型和定点数类型来表示小数。浮点数类型包括单精度浮点数(FLOAT型)和双精度浮点数(DOUBLE型)。定点数类型就是DECIMAL型。下面从这三种类型的字节数、取值范围等方面进行对比,如下表所示。use school; #选择数据库school create table class10 (f1 float, do1 double, de1 decimal); #创建表class10三

2020-05-26 17:41:14 1004

原创 MySQL中的整数类型

文章目录1 MySQL中的整数类型1.1 整数类型简介1.2 整数类型的附带属性1 MySQL中的整数类型1.1 整数类型简介整数类型是数据库中最基本的数据类型。标准SQL中支持INTEGER和SMALLINT这两种数据类型。MySQL数据库除了支持这两种类型以外,还扩展支持了TINYINT、MEDIUMINT和BIGINT。下表从不同整数类型的字节数、取值范围等方面进行对比。use school; #选择数据库school create table class5(class_id int

2020-05-26 17:22:44 1284 1

原创 MySQL中表的操作

文章目录1 表的创建2 表的查询在MySQL数据库中,表是一种很重要的数据库对象,是组成数据库的基本元素,由若干个字段组成,主要用来实现存储数据记录。表的操作包含创建表、查询表、修改表和删除表,这些操作是数据库对象的表管理中最基本也是最重要的操作。1 表的创建基本语法:CREATE TABLE <表名> ([表定义选项])[表选项][分区选项];其中,[表定义选项]的格式为:<列名1> <类型1> [,…] <列名n> <类型n>

2020-05-26 16:51:39 348

原创 MySQL中数据库的操作

文章目录1 MySQL中数据库的操作1.1 创建数据库1.2 查看数据库1.3 选择数据库1.4 删除数据库1.5 数据库的命名规范1 MySQL中数据库的操作像文件一样,我们可以随时对数据库执行如下操作:创建数据库。查看数据库。选择数据库。删除数据库。1.1 创建数据库创建数据库是指在数据库系统中划分一块空间,用来存储相应的数据,这是进行表操作的基础,也是进行数据库管理的基础。在MySQL中,创建数据库之前,可以使用SHOW语句来显示当前已经存在的数据库,具体SQL语句如下:SH

2020-05-26 15:59:20 294

原创 数据库中的关系模型

文章目录1 数据库中的关系模型1 数据库中的关系模型关系数据库是建立在关系模型上的。而关系模型本质上就是若干个存储数据的二维表,可以把它们看作很多Excel表。核心概念:表的每一行称为记录(Record),记录是一个逻辑意义上的数据。表的每一列称为字段(Column),同一个表的每一行记录都拥有相同的若干字段。字段定义了数据类型(整型、浮点型、字符串、日期等),以及是否允许为NULL。注意NULL表示字段数据不存在。一个整型字段如果为NULL不表示它的值为0,同样的,一个字符串型字段为NU

2020-05-26 15:45:04 2344

原创 MySQL服务的启动与停止

文章目录1 Windows下MySQL服务的启动与停止2 控制台登陆MySQL命令1 Windows下MySQL服务的启动与停止图形化界面启动:右击“计算机”,在快捷菜单中选择“管理”命令,打开“计算机管理”对话框。也可以执行“开始”|“控制面板”|“管理工具”|“服务”来启动服务。命令行启动:查看服务命令: net start。关闭服务命令: net stop MySQL80。启动服务命令: net start MySQL80。2 控制台登陆MySQL命令mysql -h

2020-05-25 17:34:41 307

原创 主流数据库介绍

文章目录1 主流数据库介绍2 MySQL的优势1 主流数据库介绍主流数据库简介:当今市面上的数据库产品众多,每种数据库都有自己的优势和缺点,或出于数据库的性能和易用性考虑,或出于商用和开源考虑,如何选择自己合适的数据库产品,成为重中之重!主要的数据库产品有如下几种:Oracle - 作为一种商业性数据库,在事务处理方面有自己独到的优势,功能比较强大,市场占有率也比较高。oracle数据库是一种大型的关系型数据库,在使用上会收费。在部署上,可以根据自己的环境采用单节点或者集群部署。经常会使用于银行和

2020-05-25 15:17:41 1739

原创 shared_ptr和weak_ptr使用介绍

文章目录1 shared_ptr使用介绍1.1 shared_ptr使用介绍1.2 shared_ptr的使用陷阱1 shared_ptr使用介绍1.1 shared_ptr使用介绍熟悉了unique_ptr 后,其实我们发现unique_ptr 这种排他型的内存管理并不能适应所有情况,有很大的局限!如果需要多个指针变量共享怎么办?如果有一种方式,可以记录引用特定内存对象的智能指针数量,当复制或拷贝时,引用计数加1,当智能指针析构时,引用计数减1,如果计数为零,代表已经没有指针指向这块内存,那么我们

2020-05-23 13:56:56 772

原创 unique_ptr使用介绍

文章目录1 unique_ptr使用介绍1.1 unique_ptr的特性1.2 unique_ptr常用方法介绍1 unique_ptr使用介绍1.1 unique_ptr的特性我们先来看下unique_ptr的特性:基于排他所有权模式:两个指针不能指向同一个资源。无法进行左值unique_ptr复制构造,也无法进行左值复制赋值操作,但允许临时右值赋值构造和赋值。保存指向某个对象的指针,当它本身离开作用域时会自动释放它指向的对象。在容器中保存指针是安全的。示例代码如下:#includ

2020-05-23 13:41:09 638

原创 简易TCP客户端和服务端的实现

文章目录1 客户端的实现2 服务端的实现1 客户端的实现用Socket API建立简易TCP客户端:1.建立一个socket。2. 连接服务器 connect。3. 接收服务器信息 recv。4. 关闭socket closesocket。实现代码如下:#include <iostream>#define WIN32_LEAN_AND_MEAN#include <Windows.h>#include <WinSock2.h>#pragma c

2020-05-23 10:32:51 444

原创 波形生成设计

文章目录1 波形生成设计1 波形生成设计功能非常简单,直接上代码:WaveGen.h:/** * @brief 波形生成器实现 * @details * @author 01课堂 李述铜 http://01ketang.cc * @date 2017-06-01 * @version 1.0 * @copyright 版权所有,禁止用于商业用途 */#ifndef WAVEGEN_H#define WAVEGEN_Htypedef enum { WaveSquare,

2020-05-22 13:53:44 905

原创 auto_ptr使用介绍

文章目录1 auto_ptr使用介绍1 auto_ptr使用介绍auto_ptr 是c++ 98定义的智能指针模板,其定义了管理指针的对象,可以将new 获得(直接或间接)的地址赋给这种对象。当对象过期时,其析构函数将使用delete 来释放内存!使用建议:尽可能不要将auto_ptr 变量定义为全局变量或指针。除非自己知道后果,不要把auto_ptr 智能指针赋值给同类型的另外一个智能指针。C++11 后auto_ptr 已经被“抛弃”,已使用unique_ptr替代!示例代码如下:#

2020-05-22 10:11:10 866

原创 Windows下Socket库的初始化和关闭

文章目录1 Windows下Socket库的初始化和关闭1 Windows下Socket库的初始化和关闭windows下使用Socket比较特殊,使用前我们需要对socket库进行初始化,使用完我们需要对socket库进行关闭,完成相应的清理动作。首先看一下代码:#include <iostream>#define WIN32_LEAN_AND_MEAN#include <Windows.h>#include <WinSock2.h>//#pragm

2020-05-22 09:43:34 2179

原创 Socket基础API介绍

文章目录1 Socket基础API介绍1 Socket基础API介绍我们先来看下使用Socket API建立简易TCP服务端和客户端的步骤:用Socket API建立简易TCP服务端:建立一个socket。绑定接受客户端连接的端口 bind。监听网络端口 listen。等待接受客户端连接 accept。向客户端发送一条数据send。关闭socket closesocket。用Socket API建立简易TCP客户端:建立一个socket。连接服务器 connect。接收服务

2020-05-22 09:25:52 409

原创 外部IO驱动设计

文章目录1 外部IO驱动设计1 外部IO驱动设计此部分驱动较为简单,主要是调用硬件驱动库对寄存器读写。由于这些库的代码执行速度很快,就没有必要采用互斥信号量等实现保护,直接采用开关中断来保护更有效率。实现代码如下:extio.h:/** * @brief 外部IO设计 * @details * @author 01课堂 李述铜 http://01ketang.cc * @date 2017-06-01 * @version 1.0 * @copyright 版权所有,禁止用于商业用途

2020-05-21 17:48:15 305

原创 串口驱动设计

文章目录1 串口驱动设计1 串口驱动设计串口发送或者接收,各自实现了一个"管道"。对于任意管道,一端写入数据,另一端读取数据。或者可以理解为一方生产,一方消费,即所谓的"生产-消费者模型"。以串口数据发送为例,该驱动完成任务与发送中断之间的通信。通信通过自定义的全局数据结构来实现,待发送的数据写入到循环FIFO中。然后结合信号量来实现读写的同步,使用开关中断来对全局数据的访问进行共享保护控制。串口数据的接收,工作原理和发送类似。可以看到,无论是发送还是接受,通过RTOS的这些功能模块能够有效地

2020-05-21 15:53:41 406

原创 按键驱动设计

文章目录1 按键驱动设计1 按键驱动设计硬件结构如下:按键驱动综合使用了软定时器 + 状态机 + 邮箱数据通信。软定时器负责周期性地调用按键检测扫描函数。状态机负责处理按键按下、弹起等状态的判断与处理。邮箱负责处理定时器扫描任务与调用驱动的任务之间的按键值数据通信。驱动初始化后,软定时器会自动扫描按键,然后结合状态机判断哪个按键按下或弹起,一旦检查到按键按下,则将键值投递到邮箱中。需要读取键值的任务会在邮箱上等待键值。实现如下:appConfig.h://// Created b

2020-05-21 14:51:22 456

原创 实践案例说明

文章目录1 实践案例说明1 实践案例说明完成的功能如下:系统功能设计图:参考资料:手把手教你学用嵌入式操作系统

2020-05-20 11:22:27 201

原创 多任务的协同

文章目录1 多任务的协同1.1 任务之间的关系1.2 实例1 多任务的协同1.1 任务之间的关系松散任务组合:一对一关系:一对多关系:多对一关系:通信机制:1.2 实例示例代码如下:/** * @brief tOS应用示例 * @details * @author 01课堂 李述铜 http://01ketang.cc * @date 2017-06-01 * @version 1.0 * @copyright 版权所有,禁止用于商业用途 */#include

2020-05-20 11:16:48 830

原创 并行搜索

文章目录1 并行搜索1.1 并发的基本概念1.2 并行搜索1 并行搜索1.1 并发的基本概念所谓并发是在同一实体上的多个事件同时发生。并发编程是指在在同一台计算机上“同时”处理多个任务。要理解并发编程,我们必须要理解如下一些基本概念:计算机就像一座工厂,时刻在运行,为人类服务。它的核心是 CPU,它承担了所有的计算任务,就像工厂的一个现场指挥官。进程就像工厂里的车间,承担“工厂”里的各项具体的“生产任务”,通常每个进程对应一个在运行中的执行程序,比如,QQ 和微信运行的时候,他们分别是不同的进

2020-05-20 10:52:19 485

原创 穷举搜索

文章目录1 穷举搜索1.1 穷举搜索的概念1.2 应用实例1 穷举搜索1.1 穷举搜索的概念穷举法(枚举法)的基本思想是:列举出所有可能的情况,逐个判断有哪些是符合问题所要求的条件,从而得到问题的全部解答。它利用计算机运算速度快、精确度高的特点,对要解决问题的所有可能情况,一个不漏地进行检查,从中找出符合要求的答案。用穷举算法解决问题,通常可以从两个方面进行分析:(1)问题所涉及的情况:问题所涉及的情况有哪些,情况的种数必须可以确定。把它描述出来。应用穷举时对问题所涉及的有限种情形必须一一列举,既

2020-05-20 09:17:54 2369

原创 二分查找

文章目录1 二分查找1 二分查找二分查找法实质上是不断地将有序数据集进行对半分割,并检查每个分区的中间元素。再重复根据中间数确定目标范围并递归实行对半分割,直到中间数等于待查找的值或是目标数不在搜索范围之内!实现代码如下:#include <stdlib.h>#include <stdio.h>int int_compare(const void* key1, const void* key2) { const int* ch1 = (const int*)key1;

2020-05-20 09:14:24 251

原创 查找的基本概念

文章目录1 查找的定义2 数组和索引1 查找的定义查找: 又称检索或查询,是指在查找表中找出满足一定条件的结点或记录对应的操作。查找表: 在计算机中,是指被查找的数据对象是由同一类型的记录构成的集合,如顺序表,链表、二叉树和哈希表等。查找效率: 查找算法中的基本运算是通过记录的关键字与给定值进行比较,所以查找的效率同常取决于比较所花的时间,而时间取决于比较的次数。通常以关键字与给定值进行比较的记录个数的平均值来计算。查找操作及分类:操作:查找某个“特定的”数据元素是否存在在查找表中。某个“

2020-05-20 09:08:39 1348

原创 空闲任务的配置

文章目录1 空闲任务的配置1 空闲任务的配置空闲任务:空闲任务工作:空闲任务注意事项:示例:/** * 进入低功耗模式 */void targetEnterSleep (void) {#ifdef HAL_STM32 PWR_EnterSTOPMode(PWR_Regulator_ON, PWR_STOPEntry_WFI);#else __WFI();#endif}uint32_t idleFlag = 0;void tHooksCpuIdle (v

2020-05-19 15:51:51 172

原创 任务的优先级配置

文章目录1 任务的优先级配置1 任务的优先级配置优先级的概念:优先级配置:参考资料:手把手教你学用嵌入式操作系统

2020-05-19 15:29:57 440

原创 中断事件分离处理

文章目录1 中断事件分离处理1 中断事件分离处理首先看一下任务和中断的协同机制:我们可以采用常驻模式进行处理:这样的话就是由任务全权处理事件:我们可以提出事件分离处理的解决方案,如下:演示代码如下:/** * @brief tOS应用示例 * @details * @author 01课堂 李述铜 http://01ketang.cc * @date 2017-06-01 * @version 1.0 * @copyright 版权所有,禁止用于商业用途 */#inc

2020-05-19 15:15:54 415

原创 排序算法的对比分析

文章目录1 各种排序算法的对比分析1 各种排序算法的对比分析

2020-05-19 14:45:37 173

原创 快速排序

文章目录1 快速排序1 快速排序快速排序的思想:每次选取第一个数为基准数;然后使用“乾坤挪移大法”将大于和小于基准的元素分别放置于基准数两边;继续分别对基准数两侧未排序的数据使用分治法进行细分处理,直至整个序列有序。快速排序示例:代码实现:int partition(int arr[], int low, int high) { int i = low; int j = high; int base = arr[low]; if (low < high) { wh

2020-05-19 14:44:08 187

STM32F103C8T6_GRBL 1.1f 移植

STM32F103C8T6_GRBL 1.1f 移植,最新版本的GRBL,STM32F103C8T6,拿过去改一改便可以使用,非常实用!

2019-12-17

0.96LCD显示屏技术资料.zip

中景园电子0.96LCD显示屏技术资料,其中有完整的参考参考程序,硬件原理图,可以很方便的进行移植,使用起来很方便!

2019-12-09

【小项目】简易计算机等级考试模拟练习

【小项目】简易计算机等级考试模拟练习

2018-11-02

条码和二维码生成的DLL

这两个DLL可以用来生成条码和二维码

2018-10-29

空空如也

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

TA关注的人

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