自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 收藏
  • 关注

原创 EPS32 ILI9341 初次接触彩屏

ESP的sdk外设spi中有lcd的例程,先是借鉴了网上的#define LCD_HOST HSPI_HOST#define DMA_CHAN 2/* SPI Master example This example code is in the Public Domain (or CC0 licensed, at your option.) Unless required by applicable law or agreed to in writing, this

2022-04-22 14:37:33 1665

原创 简单时间协议SNTP及转化时间戳程序

工作原理SNTP协议采用客户/服务器工作方式,服务器通过接收GPS信号或自带的原子钟作为系统的时间基准,客户机通过定期访问服务器提供的时间服务获得准确的时间信息,并调整自己的系统时钟,达到网络时间同步的目的。 系统时钟同步的工作过程如下:Device A发送一个NTP报文给Device B,该报文带有它离开Device A时的时间戳,该时间戳为10:00:00am(T1)。当此...

2020-01-15 17:20:41 1580 2

原创 web server (2) ------post数据接收

上一篇讲到简单的web server,控灯是靠网页的动作action来进行操作的,主要是应用的HTTP的get 请求方法,如果你需要传输数据get请求方法似乎就不够用了,所以换成post请求传输数据。传输少量数据并没有什么问题,但要是大量数据需要对LWIP的函数进行深挖才能进行大量数据的全部解析,本人在解析了几K数据之后wireshark,再大的数据仍然接收不了,且解析数据包复杂繁琐,所以放弃这个...

2020-01-15 09:45:52 672

原创 C语言编写web server

大部分的web server都是用JAVA、JS做的,查找了许多资料github上也只有寥寥数篇的几篇帖子,能用的真不多。后来经同事帮助在《嵌入式网络那些事STM32物联实战》这本书上找到了基于协议栈LWIP的web server,建立服务器需要对HTTP协议、html网页有所了解,这样更利于设计代码完善功能(公司要求功能简单点灯、OTA升级、PWM波形输出、mesh网络配置)。githu...

2020-01-14 10:34:06 3774

原创 C语言编程实现函数atoi

#include <stdio.h>#include <stdlib.h>#include <string.h>int my_atoi(const char* pstr) { int num = 0; int flag = 1; if( pstr == NULL) { return 0; } if(*p...

2020-01-09 09:45:19 177

原创 C语言字符串转十六进制数例如“2a”转换成0x2a

参与公司的web server项目时,在与网页的信息处理中,要将12个字节的字符串例如“012a3b4d5e6f”,转换为十六进制数0x01,0x2a,0x3b,0x4d,0x5e,0x6f#define uint8_t unsigned char#define BUILD_UINT8(loByte, hiByte ) \ ((uint8_t)(((loByte) & 0x...

2020-01-08 16:36:43 1804

原创 哈希表

哈希表Hash Table哈希表(散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。优点:一对一的查找效率很高;缺点:一个关键字可能对应多个散列地址;需要查找一个范围时,效果不好。散列冲突:不同的关键字经过散列函数的计算得到了相同的散列...

2018-10-19 01:23:47 86

原创 类成员函数的重载、覆盖和隐藏(遮蔽)的区别

a.成员函数被重载的特征:(1)相同的范围(在同一个类中);(2)函数名字相同;(3)参数不同;(4)virtual 关键字可有可无。 b.覆盖是指派生类函数覆盖基类函数,特征是:(1)不同的范围(分别位于派生类与基类);(2)函数名字相同;(3)参数相同;(4)基类函数必须有virtual 关键字。 c.“隐藏”是指派生类的函数屏蔽了与其同名的基类...

2018-10-15 19:45:28 577

原创 C与C++区别

联系:C++是C的超集,兼容大部分C的语法的结构区别:C是面向过程的语言,C++是面对对象的语言C和C++动态管理内存的方法不一样,C是使用malloc/free函数,而C++除此之外还有new/delete关键字C++中有引用,而C没有C++支持函数重载,而C不支持函数重载,而C++支持重载的依仗就在于C++的名字修饰与C不同接下来就不得不谈到C中的struct和C+...

2018-10-14 21:08:32 624

原创 左右法则

必须从变量名开始,而不是从最内部的括号例如:int * ( * ( *fp) (int ) ) [10];从变量名开始     fpl 右看什么也没有,碰到),往左看碰到*-------一个指针 跳出括号,碰到(int)---------一个带一个int参数的函数 向左看,发现* ----------------(函数)返回一个指针 跳出括号,向右看,碰到【10】 ------...

2018-10-13 23:46:19 165

原创 信号

每个进程收到的所有信号,都是由内核负责发送的,内核处理 信号的处理方式执行默认操作 终止进程 终止进程且core文件 忽略 暂停 继续 忽略信号 捕捉信号信号来源:硬件来源,软件来源查询signal信号man 7 signal 特殊信号:9)SIGKILL/19)SIGSTOP 不允许捕捉和忽略...

2018-10-06 13:19:52 108

原创 C++设计模式(单例模式,工厂模式)

开放封闭原则:类的改动是通过增加代码进行的,而不是修改源代码#include &lt;iostream&gt; using namespace std; /*class BankWorker{public:void SaveMoney(){cout &lt;&lt; "存款业务办理" &lt;&lt; endl;} void GetMoney()...

2018-10-04 23:28:51 449

原创 函数模板和类模板(C++)

所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表。这个通用函数就称为函数模板。 函数模板和普通函数的区别: 函数模板不允许自动类型转化,普通函数能够进行自动类型转换 函数模板和普通函数在一起调用的规则:1 函数模板可以像普通函数一样被重载   2 C++编译器优先考虑普通函数   3 如果函数模板可以产生一个更好的匹配,那么选择...

2018-10-04 21:58:41 158

原创 TCP UDP

TCPTCP协议(Transmission Control Protocol 传输控制协议)为应用层提供可靠的、面向连接的和基于流(stream)的服务。TCP协议使用超时重传、数据确认等方式来确保数据包被正确的发送到目的端,因此TCP服务是可靠地。使用TCP协议通信的双方必须先建立TCP连接,并在内核中为该连接维持一些必要的数据结构。通信结束时,双方必须关闭连接以释放这些内核资源。TCP协议...

2018-10-04 15:38:36 108

原创 进程与线城的区别

 操作系统中线程和进程的概念     现在的操作系统是多任务操作系统。多线程是实现多任务的一种方式。进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。比如在Windows系统中,一个运行的exe就是一个进程。进程的特点:    动态特征    进程具有生命周期,由创建而产生,由调度而运行,由得不到资源而阻塞,由撤消而消亡。  ...

2018-10-04 15:30:44 323

原创 Linux常用API

1、open()头文件:#include &lt;unistd.h&gt;函数原型:int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode);函数说明:flags打开文件方式 mode创建文件夹的权限返回值:成功返回文件描述符,失败返...

2018-10-03 13:51:36 4443

原创 链表通讯录 3.0

 相比之前增加了保存功能  信息不丢失  删除修改也许保存#include&lt;stdio.h&gt;#include&lt;stdlib.h&gt;#include&lt;string.h&gt;#define N 50#define M 50#define SIZE 3#define FAILURE 10000#define SUCCESS 10001#...

2018-08-16 10:20:43 206

原创 8月7 链表通讯录

基本功能已实现,排序功能暂未完善 ,仍有问题#include&lt;stdio.h&gt;#include&lt;stdlib.h&gt;#include&lt;string.h&gt;#define N 50#define M 50#define SIZE 3#define FAILURE 10000#define SUCCESS 10001#define ...

2018-08-12 19:36:32 122

原创 8月10 队列实现杨辉三角 二叉树 链式队列

#include&lt;stdio.h&gt;#include&lt;stdlib.h&gt;#include"queue.h"void Traverse(Queue q){ int i; for(i = q.front;i != q.rear ;i++) { if(q.data[i] != 0) { pri...

2018-08-10 21:18:26 352

原创 8月8 链表栈 栈实现计算器 队列

栈 #ifndef _STACK_H#define _STACK_H#define SUCCESS 10000#define FAILURE 10001#define TRUE 10002#define FALSE 10003typedef int ElemType;struct node{ int data; struct node *next;}...

2018-08-09 10:37:11 186

原创 8月6 双向循环链表 栈初学(顺序)

 注释部分为双向链表 与 双向循环链表区别此程序为完整双向循环链表#include&lt;stdlib.h&gt;#include"Linklist.h"int Linkinit(Node **l) { *l = (Node *)malloc(sizeof(Node)*1); if(NULL == *l) { return FAILURE; ...

2018-08-06 21:32:38 245

原创 8月5 单链表复习

#include&lt;stdio.h&gt;#include"Linklist.h"void print(ElemType e){ printf("%d",e);}int equal(ElemType e1, ElemType e2){ return (e1 == e2) ? TRUE : FALSE;}int main(){ srand(time(NULL)); i...

2018-08-06 20:01:56 114

原创 8月3 顺序表代码

 初始化,插入,求长度,判断是否为空,获取元素,遍历,定位删除,定位,clear,destroy,插入排序SequenceList.c#include "SequenceList.h"#include&lt;stdlib.h&gt;int SequenceInit(SeList *l){ if(NULL == l) { return FAILURE...

2018-08-04 00:01:58 85

原创 8月1 结构体内存 自学数据结构入门

总之结构体对齐可以总结为三个基本原则:数据成员对齐规则:结构体的数据成员中,第一个成员从offset为0的地址开始,以后每一个成员存储的起始位置为该成员大小的整数倍 结构体作为成员: 如果一个结构体1作为另一个结构体2的数据成员,则在结构体2中结构体1要从1内部成员最大的整数倍地址开始存储。 结构体的总大小(sizeof): 为该结构体内部最大基本类型的整数倍,不足的要补齐,而不是简单的所...

2018-08-01 21:20:57 118

原创 7月30 通讯录完善

#include&lt;stdio.h&gt;#include&lt;string.h&gt;#include&lt;stdlib.h&gt;#define N 50#define M 50#define SIZE 1000struct student{ int id; char name[N]; char tel[N];};typedef struc...

2018-07-30 15:07:28 185

原创 7月29 结构体 指针

指针实现strcmp函数功能#include&lt;stdio.h&gt;#include&lt;string.h&gt;#include&lt;stdlib.h&gt;int mystrcmp(const char *str,const char *ptr){ int i = 0; while(*(str + i) != '\0'&amp;&amp;*(ptr + ...

2018-07-30 15:05:26 97

原创 7月28 指针训练

请编写一个C函数,该函数可以实现将一个整数转为任意进制的字符串输出#include&lt;stdio.h&gt;#include&lt;string.h&gt;#include&lt;stdlib.h&gt;int main(){ printf("input a string:\n"); char *str =(char *)malloc(sizeof(char)*6...

2018-07-28 21:14:08 95

原创 7月27 指针

 简单字符串与指针#include&lt;stdio.h&gt;#include&lt;string.h&gt;#include&lt;stdlib.h&gt;void Memoryinit(char **str){ *str = (char *)malloc(sizeof(char)*64);}int main(){ char *ptr = NULL; ...

2018-07-28 15:50:27 94

原创 7月26 指针 数组通讯录简单版

 题目: 输入一个字符串,同时输入帧头和帧尾(可以是多个字符),将该字符串中合法的帧识别出来.提示:帧头和帧尾分别是head和tail  字符串”asdheadhauboisoktail”中headhauboisoktail是合法帧#include&lt;stdio.h&gt;#include&lt;string.h&gt;#include&lt;stdlib.h&gt;int...

2018-07-26 21:07:24 169

原创 7月25 指针

 数组元素和指针    数组的指针是指数组的起始地址,数组元素的指针是数组元素的地址。例如:     int a[10];     /*定义a为包含10个整型数据的数组*/     int *p;            /*定义p为指向整型变量的指针*/     p=&amp;a[0];         把a[0]元素的地址赋给指针变量p,也就是说,p指向a数组的第0号元素。字...

2018-07-25 20:20:57 89

原创 7月24日志 函数 字符串数组

 调用函数的步骤 1.通过函数名找到函数的入口地址(函数名就是地址) 2.给形参分配空间 3.传值(把实参传给形参)(值传递,地址传递) 4.执行函数体 5.返回 6.释放(栈)空间 ★★★最重要,最容易遗忘register int a = 1;  定义一个寄存器变量 a存在寄存器里 &amp; 取地址符号只能取内存里面的extern  声明一个外部变量  不会分配内存static 修...

2018-07-24 20:02:10 110

原创 7月23日志 数组与函数

冒泡函数 #include&lt;stdio.h&gt;void sr(int a[],int l){ int i; for(i=0;i&lt;l;i++) { scanf("%d",&amp;a[i]); }}void change(int a[],int l ){ int i,j,tmp; for(i=0;i...

2018-07-23 21:31:10 84

原创 7月22日志

今日学习内容:1、趣味一百道的第2-7题。                            2、课堂练习的第1、2、3题。今日完成情况:第一项完成,其他还未完成今日遇到的问题:求素数问题代码不知哪出了问题,输不出正确答案,还有一些题目因为开学典礼表演耽搁了,利用之后的时间赶上进度 ...

2018-07-23 08:53:12 105

原创 7月21日志

类型强制转换运算符“(类型)” 消除从大到小的警告 l = (long)i; 可以通过“(类型)表达式”的方式把表达式的值转为任意类型 强转时,你必须知道你在做什么 强转与指针,并称C语言两大神器,用好了可以呼风唤雨,用坏了就损兵折将今天学习了C语言,并在这之上有其提高,以前学过一些,听的不算吃力,巩固了以前的知识...

2018-07-22 00:00:52 96

原创 7月20日志

今天学习了gdb调试和shell的编写,遇到细节问题,主要是要注意空格和替代符号使用不规范这些语法问题。有些代码还没来得及巩固,明天继续,自我评价良好,还是要自我消化实践...

2018-07-20 22:59:28 99

原创 7月19日志

任务:1.学习Linux系统安全命令           2.学习Linux常用工具今日任务完成情况:vim编辑器插入模式,命令模式,底行模式3个模式下的指令熟悉并操作,gcc工具指令基本了解自我评价:感觉良好,上课少走神繁琐难点: #/make命令和Makefile文件。Makefile 核心:target(目标):dependency(依赖)              ...

2018-07-19 19:35:25 143

原创 7月18日志

今天复习昨天课上的内容,整理了笔记,在电脑上敲击代码实践操作,验证理论,继续完成老师留下的任务今日情况良好,感觉还是要实践操作,困难问题积极提问解决...

2018-07-18 21:35:28 109

原创 7月17日志

 集训第一天,LINUX部分目录结构,热键,用户类管理类命令,基本了解,之前有一定的基础,一些指令比较熟悉今日完成情况:良好疑惑:指令的目录和文件部分,会有些混淆  ...

2018-07-17 19:58:51 97

空空如也

空空如也

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

TA关注的人

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