hexo插入数学公式
hexo插入数学公式安装hexo-math
1npm install hexo-math --save
站点配置文件下添加:
12math: engine: 'mathjax'
主题配置文件下修改:
1234567math: enable: true engine: mathjaxmathjax: enable: true per_page: false
在需要公式的文章开头添加:
1mathjax: true
通信协议
通信协议IIC概念IIC,一种串行数据总线,只有两根信号线,一根双向数据线SDA,一根时钟线SCL。数据线位宽为1bit,因而IIC传输数据时是一个bit一个bit来传输的。IIC的两根线上可以挂靠多个设备,我们把其中控制时钟线的设备叫做主设备,其他的是从设备。每个IIC设备都有个固话的地址,主设备根据此地址值来确定要通信的从设备。IIC只有两个信号线: 一条是双向的串行数据线SDA,一条是串行时钟线SCL
SDA (Serial data) 是数据线,D代表Data也就是数据,Send Data 也就是用来传输数据的
SCL (Serial clock line) 是时钟线,C代表Clock 也就是时钟 也就是控制数据发送的时序的
协议层IIC在传输数据过程中共有3种类型信号,开始信号、停止信号、ACK信号。
开始:SCL保持高电平,SDA由高到低,表明一个开始信号。
停止:SCL保持高电平,SDA由低到高,表明一个停止信号。
ACK:单片机发完8bit数据后不再驱动总线,SDA和SCL的硬件设计都有上拉电阻,会把SDA变成高电平。在第8个bit,外接IIC设备 ...
队列
数据结构之队列定义队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。先进先出(First In First Out)的线性表,简称FIFO。允许插入的一端称为队尾,允许删除的一端称为队头。
循环队列为充分利用向量空间,克服”假溢出”现象的方法是:将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量。存储在其中的队列称为循环队列(Circular Queue)。循环队列是把顺序队列首尾相连,把存储队列元素的表从逻辑上看成一个环,成为循环队列。
数据结构123456struct buffer{ uint8_t in; // 写入位置 uint8_t out; // 读出位置 uint8_t my_buff[BUFF_MAX_SIZE]; // 数据域};
队列判满123456bool is_buffer_full(struct buffer *buf){ if(((buf->in+1) % BUFF_MAX_SIZE) == buf->out) return true; // 已满 ret ...
堆栈
堆栈前言在理解堆(Heap)和栈(Stack)这两个概念时,需要放到具体的场景,因为在不同的场景下,堆和栈代表了两种不同的含义。
两种数据结构
内存管理方式
数据结构栈的定义栈(Stack): 只允许在一端进行插入或删除的线性表。栈顶(TOP): 线性表允许进行插入或删除的那一端。栈底(Bottom): 固定的,不允许进行插入或删除的另一端。空栈: 不含任何元素的空表。栈又称为后进先出(Last In First Out)的线性表,简称LIFO结构
栈的结构#define MAXSIZE 50 // 栈中元素的最大个数
typedef struct{
int data[MAXSIZE];
int top; //用于栈顶指针
}Stack;
初始化void InitStack(Stack *S){
S->top = -1; //初始化栈顶指针
}
判栈空bool StackEmpty(Stack S){
if(S.top == -1){
re ...
hexo常用指令
hexo常用指令hexo clean/hexo cl清除缓存文件和已经生成的静态文件
hexo g生成网站静态文件到默认设置的 public 文件夹
hexo s启动本地服务器,用于预览主题。默认地址: http://localhost:4000/对 Hexo 根目录 _config.yml 的修改,需要重启本地服务器后才能预览效果。
hexo d自动生成网站静态文件,并部署到设定的仓库。
hexo new post “post_name”新建一个标题为 post_name 的页面。
hexo cl && hexo g && hexo s
ESP32上的面向对象(1)
ESP32上的面向对象(1)初识OOPOOP (Object Oriented Programming)是面向对象编程。其具有三大特性:
封装隐藏对象的属性和实现细节,仅对外提供公共访问方式,将变化隔离,便于使用,提高复用性和安全性。
继承子类可继承其父级类中的属性和方法,并可以添加新的属性和方法或者对部分属性和方法进行重写。继承增加了代码的可重用性。
多态子类继承了来自父级类中的属性和方法,并对其中部分方法进行重写。于是多个子类中虽然都具有同一个方法,但是这些子类实例化的对象调用这些相同的方法后却可以获得完全不同的结果,这种性质就是多态。多态性增强了软件的灵活性。
类的定义C++中使用关键字 class 来定义类,其基本形式如下:
1234567class 类名{ public: //公共的行为或属性 private: //私有的行为或属性};
private 表示该部分内容是私密的, 不能被外部所访问或调用, 只能被本类内部访问; 而 public 表示公开的属性和方法, 外界可以直接访问或者调用。一般来说类的属性成 ...
ESP32上的面向对象(2)
ESP32上的面向对象(2)继承继承机制是面向对象程序设计中使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能。这样产生的新类,称派生类(或子类),被继承的类称基类(或父类)。
类的权限一共有3种访问权限,分别是public、private和protected。
12345678910111213class DevBoard { public: int flash; DevBoard() { flash = 1024; ram = 256; cpuCore = 1; }; private: int ram; protected: int cpuCore;};
可以对这三种控制权限总结如下表:
访问权限
public
protected
private
对本类
可见
可见
可见
对子类
可见
可见
不可见
对外部调用方
可见
不可见
不可见
继承的格式1class 新类的名字:继承方式 继承类的名字{};
以上面的 DevBoard 为例:
1234 ...
ESP32上的FreeRTOS学习
ESP32上的FreeRTOS学习(1)任务基本概念在任何时刻,只有一个任务得到运行,FreeRTOS调度器决定运行哪个任务。调度器会通过不断的启动、停止每一个任务,从而在宏观上看起来所有的任务都在同时执行。每个FreeRTOS任务都需要有自己的栈空间。当任务切换时,它的执行环境会被保存到该任务的栈空间中,这样当任务再次运行时,就能从栈中正确的恢复上次的运行环境。
任务状态FreeRTOS任务分为四种状态:
运行 (Running)当一个任务正在运行时,那么就说这个任务处于运行态,处于运行态的任务就是当前正在使用处理器的任务。如果使用的是单核处理器的话那么不管在任何时刻永远都只有一个任务处于运行态。
就绪 (Ready)该任务在就绪列表中, 就绪的任务已经具备执行的能力,只等待调度器进行调度,新创建的任务会初始化为就绪态。
阻塞 (Blocked)如果当前任务正在等待某个时序或外部中断,我们就说这个任务处于阻塞状态,该任务不在就绪列表中。包含任务被挂起、任务被延时、任务正在等待信号量、读写队列或者等待读写事件等。
挂起 (Suspended)当任务有较长的时间不 ...
链表
数据结构之链表初识链表链表是一种物理存储上非连续,数据元素的逻辑顺序通过链表中的指针链接次序,实现的一种线性存储结构。链表由一系列节点组成,节点在运行时动态生成,每个节点包括两个部分,一个是存储数据元素的数据域,另一个是存储下一个节点地址的指针域。
链表与数组区别
链表
数组
有相同数据类型的有续集,其中每个元素使用指针链接
相似数据类型的数据集合
链表不允许随机访问,元素只能被有序或顺序访问
数组元素可以使用数组索引随机访问
元素可能存储在内存的任意地方,链表创建一个指针指向相应的数据
数组的数据元素在内存中连续储存
链表的插入和删除操作非常快,时间为O(1)
插入和删除操作非常耗时,时间为O(n),因为元素的内存地址是连续和固定的
链表的内存分配是动态的,在运行时动态分配
数组的内存是静态分配的,在编译期间完成
链表的大小随着元素的插入或删除变化
数组的大小必须在数组的声明或初始化的时候指定
数组优缺点
优点
随机访问性比较强,可以通过下标进行快速定位。
查找速度快
缺点
插入和删除的效率低,需要移动其他元素。
可能会造成内存的浪费,因为内 ...