- 博客(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 1776
原创 简单时间协议SNTP及转化时间戳程序
工作原理SNTP协议采用客户/服务器工作方式,服务器通过接收GPS信号或自带的原子钟作为系统的时间基准,客户机通过定期访问服务器提供的时间服务获得准确的时间信息,并调整自己的系统时钟,达到网络时间同步的目的。 系统时钟同步的工作过程如下:Device A发送一个NTP报文给Device B,该报文带有它离开Device A时的时间戳,该时间戳为10:00:00am(T1)。当此...
2020-01-15 17:20:41 1757 2
原创 web server (2) ------post数据接收
上一篇讲到简单的web server,控灯是靠网页的动作action来进行操作的,主要是应用的HTTP的get 请求方法,如果你需要传输数据get请求方法似乎就不够用了,所以换成post请求传输数据。传输少量数据并没有什么问题,但要是大量数据需要对LWIP的函数进行深挖才能进行大量数据的全部解析,本人在解析了几K数据之后wireshark,再大的数据仍然接收不了,且解析数据包复杂繁琐,所以放弃这个...
2020-01-15 09:45:52 713
原创 C语言编写web server
大部分的web server都是用JAVA、JS做的,查找了许多资料github上也只有寥寥数篇的几篇帖子,能用的真不多。后来经同事帮助在《嵌入式网络那些事STM32物联实战》这本书上找到了基于协议栈LWIP的web server,建立服务器需要对HTTP协议、html网页有所了解,这样更利于设计代码完善功能(公司要求功能简单点灯、OTA升级、PWM波形输出、mesh网络配置)。githu...
2020-01-14 10:34:06 3931
原创 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 190
原创 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 1925
原创 哈希表
哈希表Hash Table哈希表(散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。优点:一对一的查找效率很高;缺点:一个关键字可能对应多个散列地址;需要查找一个范围时,效果不好。散列冲突:不同的关键字经过散列函数的计算得到了相同的散列...
2018-10-19 01:23:47 101
原创 类成员函数的重载、覆盖和隐藏(遮蔽)的区别
a.成员函数被重载的特征:(1)相同的范围(在同一个类中);(2)函数名字相同;(3)参数不同;(4)virtual 关键字可有可无。 b.覆盖是指派生类函数覆盖基类函数,特征是:(1)不同的范围(分别位于派生类与基类);(2)函数名字相同;(3)参数相同;(4)基类函数必须有virtual 关键字。 c.“隐藏”是指派生类的函数屏蔽了与其同名的基类...
2018-10-15 19:45:28 601
原创 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 692
原创 左右法则
必须从变量名开始,而不是从最内部的括号例如:int * ( * ( *fp) (int ) ) [10];从变量名开始 fpl 右看什么也没有,碰到),往左看碰到*-------一个指针 跳出括号,碰到(int)---------一个带一个int参数的函数 向左看,发现* ----------------(函数)返回一个指针 跳出括号,向右看,碰到【10】 ------...
2018-10-13 23:46:19 193
原创 信号
每个进程收到的所有信号,都是由内核负责发送的,内核处理 信号的处理方式执行默认操作 终止进程 终止进程且core文件 忽略 暂停 继续 忽略信号 捕捉信号信号来源:硬件来源,软件来源查询signal信号man 7 signal 特殊信号:9)SIGKILL/19)SIGSTOP 不允许捕捉和忽略...
2018-10-06 13:19:52 121
原创 C++设计模式(单例模式,工厂模式)
开放封闭原则:类的改动是通过增加代码进行的,而不是修改源代码#include <iostream> using namespace std; /*class BankWorker{public:void SaveMoney(){cout << "存款业务办理" << endl;} void GetMoney()...
2018-10-04 23:28:51 465
原创 函数模板和类模板(C++)
所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表。这个通用函数就称为函数模板。 函数模板和普通函数的区别: 函数模板不允许自动类型转化,普通函数能够进行自动类型转换 函数模板和普通函数在一起调用的规则:1 函数模板可以像普通函数一样被重载 2 C++编译器优先考虑普通函数 3 如果函数模板可以产生一个更好的匹配,那么选择...
2018-10-04 21:58:41 169
原创 TCP UDP
TCPTCP协议(Transmission Control Protocol 传输控制协议)为应用层提供可靠的、面向连接的和基于流(stream)的服务。TCP协议使用超时重传、数据确认等方式来确保数据包被正确的发送到目的端,因此TCP服务是可靠地。使用TCP协议通信的双方必须先建立TCP连接,并在内核中为该连接维持一些必要的数据结构。通信结束时,双方必须关闭连接以释放这些内核资源。TCP协议...
2018-10-04 15:38:36 129
原创 进程与线城的区别
操作系统中线程和进程的概念 现在的操作系统是多任务操作系统。多线程是实现多任务的一种方式。进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。比如在Windows系统中,一个运行的exe就是一个进程。进程的特点: 动态特征 进程具有生命周期,由创建而产生,由调度而运行,由得不到资源而阻塞,由撤消而消亡。 ...
2018-10-04 15:30:44 346
原创 Linux常用API
1、open()头文件:#include <unistd.h>函数原型: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 4498
原创 链表通讯录 3.0
相比之前增加了保存功能 信息不丢失 删除修改也许保存#include<stdio.h>#include<stdlib.h>#include<string.h>#define N 50#define M 50#define SIZE 3#define FAILURE 10000#define SUCCESS 10001#...
2018-08-16 10:20:43 219
原创 8月7 链表通讯录
基本功能已实现,排序功能暂未完善 ,仍有问题#include<stdio.h>#include<stdlib.h>#include<string.h>#define N 50#define M 50#define SIZE 3#define FAILURE 10000#define SUCCESS 10001#define ...
2018-08-12 19:36:32 132
原创 8月10 队列实现杨辉三角 二叉树 链式队列
#include<stdio.h>#include<stdlib.h>#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 379
原创 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 201
原创 8月6 双向循环链表 栈初学(顺序)
注释部分为双向链表 与 双向循环链表区别此程序为完整双向循环链表#include<stdlib.h>#include"Linklist.h"int Linkinit(Node **l) { *l = (Node *)malloc(sizeof(Node)*1); if(NULL == *l) { return FAILURE; ...
2018-08-06 21:32:38 264
原创 8月5 单链表复习
#include<stdio.h>#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 126
原创 8月3 顺序表代码
初始化,插入,求长度,判断是否为空,获取元素,遍历,定位删除,定位,clear,destroy,插入排序SequenceList.c#include "SequenceList.h"#include<stdlib.h>int SequenceInit(SeList *l){ if(NULL == l) { return FAILURE...
2018-08-04 00:01:58 95
原创 8月1 结构体内存 自学数据结构入门
总之结构体对齐可以总结为三个基本原则:数据成员对齐规则:结构体的数据成员中,第一个成员从offset为0的地址开始,以后每一个成员存储的起始位置为该成员大小的整数倍 结构体作为成员: 如果一个结构体1作为另一个结构体2的数据成员,则在结构体2中结构体1要从1内部成员最大的整数倍地址开始存储。 结构体的总大小(sizeof): 为该结构体内部最大基本类型的整数倍,不足的要补齐,而不是简单的所...
2018-08-01 21:20:57 132
原创 7月30 通讯录完善
#include<stdio.h>#include<string.h>#include<stdlib.h>#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 200
原创 7月29 结构体 指针
指针实现strcmp函数功能#include<stdio.h>#include<string.h>#include<stdlib.h>int mystrcmp(const char *str,const char *ptr){ int i = 0; while(*(str + i) != '\0'&&*(ptr + ...
2018-07-30 15:05:26 109
原创 7月28 指针训练
请编写一个C函数,该函数可以实现将一个整数转为任意进制的字符串输出#include<stdio.h>#include<string.h>#include<stdlib.h>int main(){ printf("input a string:\n"); char *str =(char *)malloc(sizeof(char)*6...
2018-07-28 21:14:08 109
原创 7月27 指针
简单字符串与指针#include<stdio.h>#include<string.h>#include<stdlib.h>void Memoryinit(char **str){ *str = (char *)malloc(sizeof(char)*64);}int main(){ char *ptr = NULL; ...
2018-07-28 15:50:27 108
原创 7月26 指针 数组通讯录简单版
题目: 输入一个字符串,同时输入帧头和帧尾(可以是多个字符),将该字符串中合法的帧识别出来.提示:帧头和帧尾分别是head和tail 字符串”asdheadhauboisoktail”中headhauboisoktail是合法帧#include<stdio.h>#include<string.h>#include<stdlib.h>int...
2018-07-26 21:07:24 187
原创 7月25 指针
数组元素和指针 数组的指针是指数组的起始地址,数组元素的指针是数组元素的地址。例如: int a[10]; /*定义a为包含10个整型数据的数组*/ int *p; /*定义p为指向整型变量的指针*/ p=&a[0]; 把a[0]元素的地址赋给指针变量p,也就是说,p指向a数组的第0号元素。字...
2018-07-25 20:20:57 103
原创 7月24日志 函数 字符串数组
调用函数的步骤 1.通过函数名找到函数的入口地址(函数名就是地址) 2.给形参分配空间 3.传值(把实参传给形参)(值传递,地址传递) 4.执行函数体 5.返回 6.释放(栈)空间 ★★★最重要,最容易遗忘register int a = 1; 定义一个寄存器变量 a存在寄存器里 & 取地址符号只能取内存里面的extern 声明一个外部变量 不会分配内存static 修...
2018-07-24 20:02:10 123
原创 7月23日志 数组与函数
冒泡函数 #include<stdio.h>void sr(int a[],int l){ int i; for(i=0;i<l;i++) { scanf("%d",&a[i]); }}void change(int a[],int l ){ int i,j,tmp; for(i=0;i...
2018-07-23 21:31:10 96
原创 7月22日志
今日学习内容:1、趣味一百道的第2-7题。 2、课堂练习的第1、2、3题。今日完成情况:第一项完成,其他还未完成今日遇到的问题:求素数问题代码不知哪出了问题,输不出正确答案,还有一些题目因为开学典礼表演耽搁了,利用之后的时间赶上进度 ...
2018-07-23 08:53:12 128
原创 7月21日志
类型强制转换运算符“(类型)” 消除从大到小的警告 l = (long)i; 可以通过“(类型)表达式”的方式把表达式的值转为任意类型 强转时,你必须知道你在做什么 强转与指针,并称C语言两大神器,用好了可以呼风唤雨,用坏了就损兵折将今天学习了C语言,并在这之上有其提高,以前学过一些,听的不算吃力,巩固了以前的知识...
2018-07-22 00:00:52 110
原创 7月20日志
今天学习了gdb调试和shell的编写,遇到细节问题,主要是要注意空格和替代符号使用不规范这些语法问题。有些代码还没来得及巩固,明天继续,自我评价良好,还是要自我消化实践...
2018-07-20 22:59:28 115
原创 7月19日志
任务:1.学习Linux系统安全命令 2.学习Linux常用工具今日任务完成情况:vim编辑器插入模式,命令模式,底行模式3个模式下的指令熟悉并操作,gcc工具指令基本了解自我评价:感觉良好,上课少走神繁琐难点: #/make命令和Makefile文件。Makefile 核心:target(目标):dependency(依赖) ...
2018-07-19 19:35:25 156
原创 7月18日志
今天复习昨天课上的内容,整理了笔记,在电脑上敲击代码实践操作,验证理论,继续完成老师留下的任务今日情况良好,感觉还是要实践操作,困难问题积极提问解决...
2018-07-18 21:35:28 123
原创 7月17日志
集训第一天,LINUX部分目录结构,热键,用户类管理类命令,基本了解,之前有一定的基础,一些指令比较熟悉今日完成情况:良好疑惑:指令的目录和文件部分,会有些混淆 ...
2018-07-17 19:58:51 108
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人