自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

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

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

  • 博客(695)
  • 资源 (5)
  • 收藏
  • 关注

原创 文章汇总

文章目录1 单片机1.1 硬件设计1.2 MCU1.2.1 STM321.3 RTOS1.3.1 RTOS设计相关2 嵌入式2.1 Linux命令2.2 开发环境搭建3 C/C++3.1 计算机系统3.1 编码3.2 数制3.2 汇编3.2.1 X86 16位汇编3.3 基础语法3.3.1 编程小技巧3.3.2 语法特性3.3.3 EasyX图形库4 C#4.1 C#语言4.1.1 .NET平台4...

2019-09-16 14:41:17 2443

原创 音频编码的基本概念

文章目录1 音频编码的基本概念1.1 常见的音频编码格式1.2 AAC简介1 音频编码的基本概念1.1 常见的音频编码格式原始的 PCM 音频数据也是非常大的数据量,因此也需要对其进行压缩编码。和视频编码一样,音频也有许多的编码格式,如:WAV、MP3、WMA、APE、FLAC、AAC 等等,音乐发烧友应该对这些格式非常熟悉,特别是后两种无损压缩格式。1.2 AAC简介本节以 AAC 格式为例,直观的了解音频压缩格式。AAC 是新一代的音频有损压缩技术,一种高压缩比的音频压缩算法。在 MP4 视

2020-10-24 17:40:02 69

原创 视频编码的基本概念

文章目录1 视频编码的基本概念1.1 为什么需要压缩编码?1.2 常见的视频编码格式1 视频编码的基本概念1.1 为什么需要压缩编码?我们知道,在计算机的世界中,一切都是 0 和 1 组成的,音频和视频数据也不例外。由于音视频的数据量庞大,如果按照裸流数据存储的话,那将需要耗费非常大的存储空间,也不利于传送。而音视频中,其实包含了大量 0 和 1 的重复数据,因此可以通过一定的算法来压缩这些 0和 1 的数据。特别在视频中,由于画面是逐渐过渡的,因此整个视频中,包含了大量画面/像素的重复,这正好提供了

2020-10-24 17:22:17 40

原创 正则表达式基本概念

文章目录1 正则表达式基本概念1.1 元字符1 正则表达式基本概念1.1 元字符元字符解释:^表示规则字符串的开始$表示规则字符串的结束+表示匹配次数≥1次*表示匹配任意次数(可为0次){n,m}表示匹配次数至少n次,至多m次下面为正则验证邮箱地址的示例,用户名@域名 80808080@qq.com: QRegExp rx("^[A-Za-z0-9]+([_\.][A-Za-z0-9]+)*@([A-Za-z0-9\-]+\.)+[A-Za-z]{2,6}$");...

2020-10-23 17:32:37 36

原创 字符串类String

文章目录1 字符串类的初步设计1.1 历史遗留问题1.2 字符串类的初步设计1.3 代码实现1 字符串类的初步设计1.1 历史遗留问题C语言不支持真正意义上的字符串。C语言用字符数组和一组函数实现字符串操作。C语言不支持自定义类型,因此无法获得字符串类型。从C到C++的进化过程中引入了自定义类型,在C++中可以通过类完成字符串类型的定义。1.2 字符串类的初步设计类的声明如下:实现时的注意事项:无缝实现String对象与char*字符串的互操作。操作符重载函数需要考虑是否支持

2020-10-22 14:44:01 41

原创 QueueToStack

文章目录1 使用队列实现栈1.1 问题分析1.2 解决方案设计1.3 实现思路1.4 代码实现1.5 分析1 使用队列实现栈1.1 问题分析本质为,用队列“先进先出”的特性实现栈“后进先出”的特性!1.2 解决方案设计1.3 实现思路1.4 代码实现QueueToStack.h:#ifndef QUEUETOSTACK_H#define QUEUETOSTACK_H#include "LinkQueue.h"#include "Stack.h"namespace LemonL

2020-10-20 16:34:32 28

原创 StackToQueue

文章目录1 使用栈实现队列1.1 问题分析1.2 解决方案设计1.3 实现思路1.4 代码实现1.5 分析1 使用栈实现队列1.1 问题分析用栈实现队列等价于用“后进先出”的特性实现“先进先出”的特性。1.2 解决方案设计1.3 实现思路1.4 代码实现StackToQueue.h:#ifndef STACKTOQUEUE_H#define STACKTOQUEUE_H#include "LinkStack.h"#include "Queue.h"namespace Lemo

2020-10-20 16:27:57 27

原创 LinkQueue

文章目录1 链式队列的概念1.1 队列的链式存储实现1.2 链式队列的设计要点2 使用LinkList实现链式队列2.1 继承关系图2.2 代码实现1 链式队列的概念对于StaticQueue,当数据元素为类类型时,StaticQueue的对象在创建时,会多次调用元素类型的构造函数,影响效率。我们需要链式队列来解决这个问题。1.1 队列的链式存储实现1.2 链式队列的设计要点类模板,抽象父类Queue的直接子类。在内部使用链式结构实现元素的存储。只在链表的头部和尾部进行操作。2 使用

2020-10-20 10:52:48 52

原创 StaticQueue

文章目录1 StaticQueue实现1.1 队列的顺序实现1.2 StaticQueue设计要点1.3 StaticQueue实现要点(循环计数法)2 StaticQueue实现3 小结1 StaticQueue实现1.1 队列的顺序实现1.2 StaticQueue设计要点类模板使用原声数组作为队列的存储空间。使用模板参数决定队列的最大容量。1.3 StaticQueue...

2020-10-19 09:10:54 95

原创 Queue

文章目录1 队列的概念1.1 队列的概念1.2 队列的特性1.3 队列的操作1.4 继承关系图1.4 队列的实现2 代码实现1 队列的概念1.1 队列的概念队列是一种特殊的线性表。队列仅能在线性表的两端进行操作:队头(Front):取出数据元素的一端。队尾(Rear):插入数据元素的一端。1.2 队列的特性先进先出(First In First Out):1.3 队列...

2020-10-19 09:10:40 37

原创 LinkStack

1 LinkStack的实现1.1 StaticStack的缺陷由于StaticStack内部使用了原声数组,当存储的元素为类类型时,StaticStack的对象在创建时,会多次调用元素类型的构造函数,影响效率。因此,我们需要链式栈来避免这种缺陷。1.2 链式栈的存储实现1.3 链式栈的设计要点类模板,抽象父类Stack的直接子类。在内部组合使用LinkList类,实现栈的链式存储...

2020-10-17 09:38:52 154

原创 StaticStack

文章目录1 栈的顺序实现1.1 示意图1.2 StaticStack设计要点1.3 继承关系图1.4 接口实现2 代码实现1 栈的顺序实现1.1 示意图1.2 StaticStack设计要点类模板:使用原声数组作为栈的存储空间。使用模板参数决定栈的最大容量。1.3 继承关系图1.4 接口实现2 代码实现StaticStack.h#ifndef STATICSTAC...

2020-10-16 09:21:31 44

原创 Stack

文章目录1 栈的概念1.1 栈的定义1.2 栈的特性1.3 栈的操作2 栈的实现2.1 继承关系图2.2 类的实现3 代码实现1 栈的概念1.1 栈的定义栈是一种特殊的吸纳行表。栈仅能在线性表的一端进行操作。栈顶(Top):允许操作的一端。栈底(Bottom):不允许操作的一端。1.2 栈的特性后进先出(Last In First Out)。1.3 栈的操作创建栈...

2020-10-16 08:52:49 52

原创 Linux内核对设备树的处理

文章目录1 内核对设备树的处理1.1 dtb 中每一个节点都被转换为 device_node 结构体1.2 哪些设备树节点会被转换为 platform_device1.3 怎么转换为 platform_device2 platform_device 如何与platform_driver 配对3 内核里操作设备树的常用函数3.1 内核中设备树相关的头文件介绍3.1.1 处理 DTB3.1.2 处理 device_node3.1.3 处理 platform_device3.2 platform_device 相

2020-10-15 14:34:24 58

原创 设备树的引入及简明教程

文章目录1 设备树的引入与作用2 设备树的语法2.1 设备树语法概览2.2 Devicetree 格式2.2.1 DTS 文件的格式2.2.2 node 的格式2.2.3 properties 的格式2.3 dts 文件包含 dtsi 文件2.4 常用属性2.4.1 #address-cells、#size-cells2.4.2 compatible2.4.3 model2.4.4 status2.4.5 reg2.4.6 name(过时了,建议不用)2.4.7 device_type(过时了,建议不用)

2020-10-14 17:14:31 81

原创 LED 模板驱动程序的改造:总线设备驱动模型

文章目录1 概述2 代码实现3 代码分析3.1 注意事项1 概述原来的框架:要实现的框架:2 代码实现代码结构如下:board_A_led.c:#include <linux/module.h>#include <linux/fs.h>#include <linux/errno.h>#include <linux/miscdevice.h>#include <linux/kernel.h>#include &lt

2020-10-12 14:37:48 43

原创 驱动进化之路:总线设备驱动模型

文章目录1 驱动编写的3种方法1.1 传统写法1.2 总线设备驱动模型1.3 设备树2 在 Linux 中实现“分离”:Bus/Dev/Drv 模型2.1 模型2.2 driver和device的匹配规则2.3 函数调用关系2.4 常用函数2.5 如何写程序1 驱动编写的3种方法以 LED 驱动为例:1.1 传统写法特点如下:使用哪个引脚,怎么操作引脚,都写死在代码中。最简单,不考虑扩展性,可以快速实现功能。修改引脚时,需要重新编译。1.2 总线设备驱动模型先看一下相关结构体定义:

2020-10-08 15:00:48 48

原创 DualCircleList

文章目录1 双向循环链表的实现1.1 继承层次图1.2 双向循环链表的设计思路2 代码实现3 思考1 双向循环链表的实现直接使用Linux内核链表实现双向循环链表。1.1 继承层次图1.2 双向循环链表的设计思路数据结点之间在逻辑上构成双向循环链表,头结点仅用于结点的定位。实现思路:通过模板定义DualCircleList类,继承自DualLinkList类。在DualCir...

2020-10-08 13:57:01 74

原创 IP协议的输出处理

文章目录1 IP协议的输出处理1.1 原理介绍1.2 代码实现1 IP协议的输出处理1.1 原理介绍IP数据包的封装:IP包头部数据格式(RFC791):1.2 代码实现代码组织如下:xnet_tiny.h中添加如下代码:#define XNET_VERSION_IPV4 4 // IPV4#define XNET_IP_DEFAULT_TTL 64 // 缺省的IP包TTL值

2020-09-29 16:43:38 44

原创 音视频编解码的国际标准

文章目录1 音视频编解码的国际标准1.1 音视频编解码相关的组织1.2 H.265介绍1 音视频编解码的国际标准1.1 音视频编解码相关的组织音视频编解码主要有如下三大组织推动并发展:ITU(国际电信联盟)。ISO/IEC。JVT(Joint Video Team,视频联合工作组)。三十多年以来,世界上主流的视频编码标准,基本上都是它们提出来的:ITU 提出了 H.261、H.262、H.263、H.263+、H.263++,这些统称为 H.26X 系列,主要应用于实时视频通信领域,如

2020-09-29 14:06:11 53

原创 IP协议的输入处理

文章目录1 原理概述2 代码实现1 原理概述先来看一下IP协议所处的位置:IP协议的功能:IP数据包的格式:2 代码实现先来看一下工程组织结构:xnet_tiny.h中添加如下代码:#pragma pack(1)typedef struct _xip_hdr_t { uint8_t hdr_len : 4; // 首部长, 4字节为单位 uint8_t version : 4; // 版本号

2020-09-26 15:04:54 48

原创 offsetof宏和container_of宏

文章目录1 offsetof宏1.1 宏的作用1.2 编译器做了什么1 offsetof宏1.1 宏的作用offsetof用于计算TYPE结构体中MEMBER成员的偏移位置。1.2 编译器做了什么注意: 在操作系统的环境下,读和写0地址的内容都是非法的,会导致程序异常停止。对于编译器来说,它清楚的知道结构体成员变量的偏移地址,它通过结构体变量首地址与偏移量来定位成员变量。所以对于o...

2020-09-26 10:41:54 76

原创 FFMpeg的基本用法

文章目录1 提取音视频流1.1 提取音频流1.2 提取视频流2 截取音视频片段1 提取音视频流1.1 提取音频流ffmpeg431.exe -i ande_302.mp4 -vn -acodec copy -f mp4 -y ande_302-vn.mp41.2 提取视频流ffmpeg431.exe -i ande_302.mp4 -an -vcodec copy -f mp4 -y ande_302-an.mp4选项详解:-i : 指定的文件。-vn:video no。-an:au

2020-09-26 10:36:20 67

原创 驱动设计的思想:面向对象/分层/分离

文章目录1 面向对象2 分层3 分离1 面向对象字符设备驱动程序抽象出一个 file_operations 结构体;我们写的程序针对硬件部分抽象出led_operations 结构体。2 分层上下分层,比如我们前面写的 LED 驱动程序就分为 2 层:① 上层实现硬件无关的操作,比如注册字符设备驱动:leddrv.c。② 下层实现硬件相关的操作,比如 board_A.c 实现单板 A 的 LED 操作。3 分离还能不能改进?分离。在 board_A.c 中,实现了一个led_ope

2020-09-26 10:02:45 43

原创 FFMpeg的基本介绍

文章目录1 FFMpeg的基本概念1.1 FFMpeg是什么1.2 FFmpeg 的组成1.3 FFmpeg 主要功能1 FFMpeg的基本概念1.1 FFMpeg是什么FFmpeg 是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用 LGPL 或 GPL 许可证。它提供了录制、转换以及流化音视频的完整解决方案。FFmpeg 在 Linux 平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括Windows、Mac OS X 等。这个项目最早由 Fabrice

2020-09-25 09:59:24 80

原创 音频的基本概念

文章目录1 音频的基本概念1.1 音频的概念1.2 音频相关的术语1 音频的基本概念1.1 音频的概念音频数据的承载方式最常用的是脉冲编码调制 脉冲编码调制,即 PCM。在自然界中, 声音是连续不断的,是一种模拟信号,那怎样才能把声音保存下来呢?那就是把 声音数字化,即转换为数字信号。我们知道声音是一种波,有自己的 振幅和频率,那么要保存声音,就要保存声音在各个时间点上的振幅。而 数字信号并不能连续保存所有时间点的振幅,事实上,并不需要保存连续的信号,就可以还原到人耳可接受的声音。根据奈奎斯特

2020-09-24 16:35:45 57

原创 视频的基本概念

文章目录1 视频的基本概念1 视频的概念1.2 视频相关的术语1 视频的基本概念1 视频的概念由于人类眼睛的特殊结构,画面快速切换时,画面会有残留( 视觉暂留),感觉起来就是连贯的动作。所以 ,视频就是由一系列图片构成的。视频是什么?视频(Video)泛指将一系列静态影像以电信号的方式加以捕捉、纪录、处理、储存、传送与重现的各种技术。连续的图像变化每秒超过 每秒超过 24 帧(frame,fps)画面以上时,根据 视觉暂留原理,人眼无法辨别单幅的静态画面;看上去是平滑连续的视觉效果,这样连续的

2020-09-24 15:01:43 42

原创 ARP的超时重新请求

文章目录1 原理2 代码实现1 原理问题:ARP表项是否一直有效?实现原理如下:2 代码实现先看下代码组织结构:prot_pcap.c中增加如下代码:/** * 获取自程序启动以来,过去了多长时间 * @return 程序的系统时间 */const xnet_time_t xsys_get_time(void) { static uint32_t pre = 0; // 以下部分仅供调试时使用#if 0 uint32_t c = clock() /

2020-09-23 17:28:25 83

原创 LED驱动硬件操作

文章目录1 LED驱动操作硬件1.1 怎么写 LED 驱动程序?1.2 ioremap函数介绍2 代码实现1 LED驱动操作硬件1.1 怎么写 LED 驱动程序?详细步骤如下:① 看原理图确定引脚,确定引脚输出什么电平才能点亮/熄灭 LED② 看主芯片手册,确定寄存器操作方法:哪些寄存器?哪些位?地址是?③ 编写驱动:先写框架,再写硬件操作的代码注意:在芯片手册中确定的寄存器地址被称为物理地址,在 Linux 内核中无法直接使用。需要使用内核提供的 ioremap 把物理地址映射为虚拟地址,使

2020-09-23 14:53:44 61

原创 DualLinkList

文章目录1 单链表的缺陷![在这里插入图片描述](https://img-blog.csdnimg.cn/2019030510214774.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1Nsb3dJc0Zhc3RMZW1vbg==,siz...

2020-09-22 17:58:57 61

原创 变量初始化

文章目录1 C++11中新增变量初始化方式1 C++11中新增变量初始化方式代码如下:#include <iostream>using namespace std;#define USE /* 测试C++11中的变量初始化 */static void test_var_init(){ int i{ 5 }; cout << i << endl; int j = { 6 }; cout << j << endl;

2020-09-22 11:49:41 33

原创 LED驱动框架

1 LED驱动框架1.1 回顾字符设备驱动程序框架1.2 对于 LED 驱动,我们想要什么样的接口?1.3 LED 驱动要怎么写,才能支持多个板子?分层把驱动拆分为通用的框架(leddrv.c)、具体的硬件操作(board_X.c):以面向对象的思想,改进代码:抽象出一个结构体:每个单板相关的 board_X.c 实现自己的 led_operations 结构体,供上层的 leddrv.c 调用:2 代码实现首先看下文件:led_opr.h:#ifndef _LED_OP

2020-09-22 11:24:39 58

原创 ARP输入处理

文章目录1 ARP输入原理1.1 原理介绍1.2 代码实现1 ARP输入原理1.1 原理介绍收到ARP包时该如何处理?处理流程:实现原理:1.2 代码实现代码结构:xnet_tiny.h添加如下代码:#define XARP_ENTRY_FREE 0 // ARP表项空闲#define XARP_ENTRY_OK 1 // ARP表项解析成功xnet_err_t xarp_make_request(const xip

2020-09-19 17:23:12 227

原创 CircleList

文章目录1 循环链表的实现1.1 什么是循环链表1.2 循环链表的逻辑构成1.3 循环链表的继承层次结构1.4 循环链表的实现思路1.5 循环链表的实现要点2 代码实现1 循环链表的实现1.1 什么是循环链表概念上:任意数据元素都有一个前驱和一个后继。所有的数据元素的关系构成一个逻辑上的环。实现上:循环链表是一种特殊的单链表。尾结点的指针保存了首结点的地址。1.2 循环链...

2020-09-19 14:00:38 98

原创 HTTP协议简介

文章目录1 HTTP协议简介1.1 HTTP协议简介1.2 客户端请求1.3 服务端响应1 HTTP协议简介1.1 HTTP协议简介HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。1.2 客户端请求客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line)、请求头部(header)、空行和请求数据四个部分组成,下图给出了请

2020-09-17 14:43:18 54

原创 无回报ARP的生成

文章目录1 无回报ARP的生成1.1 原理概述1.2 代码实现1 无回报ARP的生成1.1 原理概述1.2 代码实现xnet_tiny.h中添加如下代码:#pragma pack(1)#define XARP_HW_ETHER 0x1 // 以太网#define XARP_REQUEST 0x1 // ARP请求包#define XARP_REPLY 0x2

2020-09-17 14:30:17 49

原创 SharedPointer

文章目录1 继承关系类图![在这里插入图片描述](https://img-blog.csdnimg.cn/20190227085332118.png)2 SharedPointer设计要点3 代码实现1 继承关系类图2 SharedPointer设计要点SharedPointer肯定是类模板,我们需要通过计数机制(ref)标识堆内存:堆内存被指向时:ref++;指针被置空时:ref–...

2020-09-16 14:36:13 126

原创 文件锁

文章目录1 文件锁1.1 文件锁概述1.2 示例代码1 文件锁1.1 文件锁概述并发对文件I/O操作的影响,解决办法?文件锁用法: man 2 fcntl。头文件:#include <unistd.h>#include <fcntl.h>函数定义: int fcntl(int fd, int cmd, ... /* arg */ );参数: cmd 取值 F_GETLK, F_SETLK 和 F_SETLKW ,分别表示获取锁、设置锁和同步设置锁。

2020-09-16 10:29:02 46

原创 ARP初始化

文章目录1 ARP初始化1.1 原理概述1.2 实现原理1.3 代码实现1 ARP初始化1.1 原理概述解决办法:ARP实例:1.2 实现原理需要考虑如下问题:ARP表象定义如下:1.3 代码实现xnet_tiny.h中添加如下代码:#define XNET_IPV4_ADDR_SIZE 4 // IP地址长度/** * IP地址 */typedef union _xipaddr_t { uint8_t array

2020-09-14 16:42:53 42

原创 SmartPointer

文章目录1 继承关系类图2 代码实现1 继承关系类图2 代码实现SmartPointer.h#ifndef SMARTPOINTER_H#define SMARTPOINTER_H#include "pointer.h"namespace LemonLib{template &lt;typename T&gt;class SmartPointer : public Po...

2020-09-14 09:50:41 64

STM32F103C8T6_GRBL 1.1f 移植

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

2019-12-17

0.96LCD显示屏技术资料.zip

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

2019-12-09

30+款液晶数字英文字体打包下载.zip

花了很多天,也花了不少钱从各个网站上收集的液晶字体,非常适合用在LED显示上,现在分享给大家!是个好东西哦

2019-12-07

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

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

2018-11-02

条码和二维码生成的DLL

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

2018-10-29

空空如也

空空如也

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

TA关注的人 TA的粉丝

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