![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C
文章平均质量分 62
liefyuan
一招鲜吃变天!
展开
-
Makefile笔记(一)makefile基础
文章目录一、Makefile的规则二、示例一、Makefile的规则在讲述这个 Makefile 之前,还是让我们先来粗略地看一看 Makefile 的规则。target ... : prerequisites ... command......target 也就是一个目标文件,可以是 Object File,也可以是执行文件。还可以是一个标签(Label),对于标签这种特性,在后续的“伪目标”章节中会有叙述。prerequisites 就是,要生成那个 target 所需要的文件或原创 2021-03-30 23:23:59 · 681 阅读 · 0 评论 -
【Makefile】常用的Makefile
【代码】常用的Makefile内容。原创 2023-12-22 11:16:42 · 467 阅读 · 0 评论 -
【cmake/makefile】C程序编译过程分析
Windows下常用IDE来编译,Linux下直接使用gcc来编译,编译过程是Linux嵌入式编程的基础,也是嵌入式高频基础面试问题。原创 2024-01-19 14:51:32 · 448 阅读 · 0 评论 -
【C语言】重新封装printf
重新封装一下打印接口,真的很方便。原创 2023-11-24 17:17:59 · 487 阅读 · 0 评论 -
【C语言】使用函数指针实现状态机软件框架
函数返回值类型 (* 指针变量名) (函数参数列表);原创 2023-05-06 15:01:19 · 372 阅读 · 0 评论 -
CMake构建
文章目录CMake是用来干啥的?Ubuntu安装CMake一、CMake构建的简单使用:Helloworld二、CMake构建:多源文件初级:少数源文件 add_executable()进阶:更多源文件 aux_source_directory() 或 set()三、CMake构建:多目录多源文件新命令:include_directories()四、CMake构建:正规组织结构方式一:两个CMakeLists.txt方式二:一个CMakeLists.txt五、CMake构建:编译动态库和静态库六、CMake转载 2021-11-08 00:41:47 · 2170 阅读 · 1 评论 -
GitHub上一位老外的嵌入式C编码规范
文章目录最重要的一条规则一般规则注释函数变量结构、枚举类型定义复合语句分支语句宏和预处理指令文档头/源文件英文原文:https://github.com/MaJerle/c-code-style#structures-enumerations-typedefs译文来源:嵌入式大杂烩最重要的一条规则编写代码时最重要的一条规则是:检查周围的代码并尝试模仿它。作为维护人员,如果收到的补丁明显与周围代码的编码风格不同,这是令人沮丧的。这是不尊重人的,就像某人穿着泥泞的鞋子走进一间一尘不染的房子。因此,无翻译 2021-04-20 00:59:44 · 791 阅读 · 0 评论 -
10种常用的软件滤波方法及示例程序
一、限幅滤波法A、方法:根据经验判断,确定两次采样允许的最大偏差值(设为A)每次检测到新值时判断:如果本次值与上次值之差<=A,则本次值有效如果本次值与上次值之差>A,则本次值无效,放弃本次值,用上次值代替本次值B、优点:能有效克服因偶然因素引起的脉冲干扰C、缺点:无法抑制那种周期性的干扰平滑度差二、中位值滤波法A、方法:连续采样N次(N取奇数)把N次采样值...原创 2020-02-19 00:10:22 · 1616 阅读 · 0 评论 -
#define宏的高级用法
一 、宏的定义与撤销 #普通宏定义 #define PI 3.14 //编译阶段替换掉宏 #define T1 3+4 //容易产生歧义 #define T2 (3+4) //添加括号后,语义清楚 float r = 1.0; float area = PI * r * r; int a = 2* T1 ...转载 2019-10-18 14:35:00 · 1370 阅读 · 0 评论 -
C语言实现快速傅里叶变换的算法
快速傅立叶/余弦/正弦变换尺寸:一个数据长度:2的幂抽取:频率基数:4,2函数:cdft:复数离散傅立叶变换rdft:实离散傅里叶变换ddct:离散余弦变换ddst:离散正弦变换dfct:RDFT(实对称DFT)的余弦变换dfst:RDFT(实反对称DFT)的正弦变换函数原型:void cdft(int, int, double *, int *, double *); ...原创 2019-10-16 19:32:38 · 3453 阅读 · 1 评论 -
Qt--基于UDP的网络广播
用户数据报协议(User Data Protocol,UDP)是一种简单轻量级、不可靠、面向数据报、无连接的传输协议,可以应用在可靠性不是十分重要的场合,如短消息、广播信息等。 UDP客户端向UDP服务器发送一定长度的请求报文,报文大小的限制于各系统的协议实现有关,但不得超过其下层IP协议规定的64KB;UDP服务器同样以报文形式作出响应。如果服务器未收到此请求,客户端进行重发,因此报文的传输是不转载 2016-10-26 21:55:42 · 683 阅读 · 0 评论 -
ESP8266--学习笔记(二)扫描、连接WiFi
经过上次的HelloWorld,我们知道了其实ESP8266其实是里面有个单片机的模块,我的操作其实就是操作里面的单片机,因为是单片机所以里面会有各种内置的外设,而我们的重点是使用WiFi,所以就直接操作WIFI了。扫描WiFi、连接 还是在app文件夹下面新建一个user_main.c文件,并写好void user_init(){} //入口函数原创 2017-03-16 00:46:35 · 18809 阅读 · 0 评论 -
ESP8266--学习笔记(四)TCP通信--TCP-Client
TCP Client模式ESP8266工作在station模式下,需确认ESP8266已经连接AP(路由器)并分配到IP地址,启用client连接ESP8266工作在soft-AP模式下,需确认连接ESP8266的设备已被分配到IP地址,启用client连接 ESP8266 TCP Client模式配置流程依据协议初始化espconn参数注册连接成功的回调函数和连接失败重连的回调函数(es原创 2017-03-17 20:59:35 · 23467 阅读 · 4 评论 -
ESP8266--学习笔记(六)Http请求
在ESP8266 TCPserver基础之上,可以开发ESP8266进行Http的连接。原创 2017-03-18 16:17:10 · 5845 阅读 · 1 评论 -
Linux--网络编程(一)网络介绍
TCP/IP网络简介Linux中TCP/IP网络结构套接字接口Socket编程 网络字节 数据报通信流程(UDP通信)UDP编程API UDP编程实例 网络简介 TCP/IP参考协议模型 OSI参考模型 两种参考模型的对应关系———————————————————————————— TCP/IP实际上是一个一起工作的通信家族,为网际数据通信提供通路。为了方便,将TCP/IP协议原创 2017-03-18 18:06:37 · 529 阅读 · 0 评论 -
Linux--网络编程(二)UDP编程
UDP编程 数据报通信;对于数据报通信的服务器端来说,它不必再在一个端口上侦听,以等待建立连接,而只需生成一个端口描述符,并且把这个端口描述符绑定到本地地址上就可以了。UDP网络编程具体的操作流程为: socket() 使用系统调用socket()来获得文件描述符,该调用的声明格式为:#include <sys/types.h>#include <sys/socket.h>int socke原创 2017-03-19 17:10:35 · 586 阅读 · 0 评论 -
Linux--C语言操作数据库(一)插入数据
各种渠道去找有关于使用C语言操作数据库的资料,好辛苦,弄出来了!数据库部分首先创建一张表create table children(childno int not null unique,fname varchar(20),age int); 然后插入一组数据insert into children values(1,'yuanlief',23); 查询select *from children原创 2017-03-19 23:25:29 · 4898 阅读 · 0 评论 -
Linux--网络编程(三)TCP编程
数据流通信 数据流套接口是可靠的面向连接的通信数据流。如果套接口中以“1,2”的顺序放入两数据,它们在另一端也会以“1,2”的顺序到达,它们也可以被认为是无错误的传输。TCP编程流程函数介绍socket() 使用系统调用socket()来获取文件描述符,该调用的声明格式如下:#include <sys/types.h>#include <sys/socket.h>int socket(int d原创 2017-03-19 20:17:33 · 415 阅读 · 0 评论 -
Linux--UDPsocket传输图片
服务器端#include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <unistd.h> #include <errno.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/原创 2017-04-06 22:21:28 · 2229 阅读 · 1 评论 -
ESP8266--学习笔记(七)UART转发
因为需要使用串口发送数据,而又决定自己写固件,所以就需要完成一项功能:ESP接收串口传来的数据,并判断将接收的串口数据转发出去 ESP8266给串口发送数据很容易uart_sendString("串口发送数据");usrt0_sendStr("\r\n Hello World\r\n");os_printf("发送数据成功!!\r\n"); 这些语句都可以使用串口发送数据,但是串口接收数据就原创 2017-03-21 20:59:14 · 13509 阅读 · 5 评论 -
Linux--UDP编程-linux-server-windows-client
UDP信息传输Linux服务器/************linux-udp-image-server*****************//*** 这是一个linux 服务器端程序,不停的接收数据并显示出来*/#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <unistd.h>#in原创 2017-04-07 22:28:55 · 352 阅读 · 0 评论 -
Windows--TCPSocket打开图片传输图片
服务器端#include <stdio.h> #include <winsock2.h> #include <winsock2.h> #define SERVER_PORT 9210 //侦听端口 #pragma comment(lib,"ws2_32.lib") struct Data //数据包 { int length; char receivemessa原创 2017-04-07 22:30:51 · 1426 阅读 · 0 评论 -
ESP8266--学习笔记(八)-由AT固件源码分析一
怎么说呢,其实学习ESP8266的资料还是挺少的,但是可以找得到一些固件源码;而我们作为初学者,这些源码真的是不可多得的资料。当我想实现一些功能的时候,其实是可以用一系列的AT指令来完成的。于是我就想,既然AT指令可以做到,那么我可以参考AT指令的机制来写一个符合自己要求的固件啊! 于是乎通过AT固件启示,我完成了这样一个程序框架。user_main.cmy_wifi.cmy_wifi.h原创 2017-03-22 23:41:21 · 2803 阅读 · 0 评论 -
ESP8266--学习笔记(五)TCP通信--TCP-Server
TCP Server模式ESP8266 工作在station模式下,需确认ESP8266已经分配到IP地址,在启用server侦听ESP8266 工作在Soft-AP 模式下,可以直接启动server侦听TCP Server模式配置流程:根据工作协议初始化espconn参数注册连接成功的回调函数和连接失败重新连接的回调函数(espconn_regist_connectcb和espconn_原创 2017-03-18 01:12:34 · 30387 阅读 · 7 评论 -
ESP8266--学习笔记(八)串口源码分析
我一直对ESP8266的串口传输的机制很好奇,没办法只得好好分析源码了。 ESP8266的中断系统是必须要了解的。我分析的源代码是分配有任务的,所以在任务函数中是无法看到中断的。我的分析如下: 代码实现如下:串口接收中断处理函数LOCAL voiduart0_rx_intr_handler(void *para){ uint8 uart_no = UART0;//UartDev.buff原创 2017-03-23 20:21:46 · 9575 阅读 · 2 评论 -
ESP8266--学习笔记(八)中断(一)GPIO中断
ESP8266有四个种中断:GPIO中断定时器中断 串口中断 SPI中断 ——————————————————-GPIO中断配置相关IO口映射中断回调函数 关闭GPIO中断 将GPIO设置为输入模式 将GPIO口设置成普通IO口且作为pin引脚 设置中断触发方式 打开GPIO中断原创 2017-03-24 13:05:38 · 6796 阅读 · 1 评论 -
ESP8266--学习笔记(十一)任务
ESP8266当前支持3个系统级的任务,优先级分别为0/1/2,SDK任务函数比较简单,用system_os_task创建任务,system_os_post发送消息原创 2017-03-24 16:27:51 · 2595 阅读 · 0 评论 -
VisualStudio2015--错误记录总结
之前在GitHub上下载了一个开源工程,是用C语言写的需要编译静态库什么的以及生成一个exe文件。我用的是VisualStudio2015遇到了很多麻烦,一点经验都没有,所以记录了一下最终编译成功的这个过程。 我编译的是jmpeg工程,网上还有一个哥们和我的遭遇一样http://www.cnblogs.com/ubosm/p/5444919.html1.没有在配置里面添加包含头文件的目录错误 C原创 2017-04-14 12:59:39 · 1821 阅读 · 0 评论 -
树莓派3--学习笔记5-mjpg视频流监控 (二)
项目源码分析参考博客:http://blog.csdn.net/pengrui18/article/details/8146814 参考博客:http://www.360doc.com/content/12/0706/10/9305922_222567049.shtml GitHub项目地址:https://github.com/jacksonliam/mjpg-streamerMJPG的介绍:原创 2017-04-14 14:44:10 · 1293 阅读 · 0 评论 -
C语言--字符串操作函数
参考博客:http://www.jb51.net/article/37410.htm一、字符串操作strcpy(p, p1) 复制字符串strncpy(p, p1, n) 复制指定长度字符串strcat(p, p1) 附加字符串strncat(p, p1, n) 附加指定长度字符串strlen(p) 取字符串长度strcmp(p, p1) 比较字符串strcasecmp忽略大小写比较字原创 2017-04-30 10:27:31 · 433 阅读 · 0 评论 -
Linux--TCPsocket传输图片
服务器端/* server端代码:接受Client端发送过来的一个图片 */#include <sys/socket.h>#include <sys/types.h>#include <stdlib.h>#include <stdio.h>#include <string.h>#include <unistd.h>#include <error.h>#inc原创 2017-04-06 01:32:17 · 3950 阅读 · 0 评论 -
C语言--格式化输入/输出函数(printf/scanf,fprintf/fscanf,sprintf,sscanf)
1、printf/scanf函数说明printf()将输出按指定格式放置在标准输出流stdout上,函数声明如下:int printf(const char *,...);scanf()可以从标准的输入流stdin中按指定的格式读取数据,函数声明如下:int scanf(const char *,...);printf()函数和scanf()函数均为可变参数函数,printf()函数返回值为输出的信原创 2017-05-01 01:05:20 · 2614 阅读 · 0 评论 -
Linux--网络编程-常见服务器模型
1、UDP循环服务器 UDP循环服务器的实现非常简单,UDP服务器每次从套接字上读取一个客户端的请求进行处理,然后将结果返回客户端,可以用下面的算法来实现。soket(...);bind(...);while(1){ recvfrom(...); process(...); sendto(...);} 因为UDP是非面向连接的,因此没有一个客户端可以一直占用服务端,只原创 2017-04-19 00:13:27 · 981 阅读 · 0 评论 -
Linux--UDPsocket文件传输
服务器端#include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <unistd.h> #include <errno.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/原创 2017-04-06 20:26:29 · 541 阅读 · 0 评论 -
Android--推送机制实现原理(四)-自己实现推送功能--心跳包
客户端、长连接和心跳包参考博客:http://blog.csdn.net/zh724738989/article/details/42007099客户端服务器端C代码(0.01版):/**************服务器端程序***************/#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <stri原创 2017-04-22 15:51:26 · 998 阅读 · 0 评论 -
Linux--进程间通信(一)-管道(pipe)通信
1、管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。 2、有名管道 (named pipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。 这个例子是,父进程创建子进程,父进程向子进程通过管道发送一个字符串,子进程读取该字符串显示并倒序后发送到父进程,父进程读取该倒序后的字符串并打印原创 2017-04-24 16:54:56 · 713 阅读 · 0 评论 -
Linux--进程间通信(二)-命名管道(pipe)通信
server.cclient.cpipelib.h编译命令:gcc -o server server.c pipelib.h编译命令:gcc -o client client.c pipelib.h运行命令:./server运行命令:./client.cserver.c#include "pipelib.h"#include <stdio.h>#include <string.h>原创 2017-04-24 19:29:22 · 434 阅读 · 0 评论 -
Linux--进程间通信-共享内存-信号量
shm_write.c#include <stdio.h>#include <sys/types.h>#include <sys/ipc.h>#include <sys/shm.h>#include <sys/sem.h>#include <errno.h>#define MAX_LEN 512struct shm_def{ char buf[MAX_LEN];};uni原创 2017-04-24 19:55:40 · 527 阅读 · 0 评论 -
C语言--工具函数(一)--字符数组中插入字符串
一、指定位置插入一个字符#include "stdafx.h"#include<stdio.h>#include<stdlib.h>#include<string.h>#define N 100char query[] = "insert into babyData values(,'yuanlifu',37.5,0,22,0,55,0,10,0,12,0,23,0,now());";voi转载 2017-04-24 23:59:56 · 11895 阅读 · 0 评论 -
C语言--函数指针学习
事件机制函数回调函数无参数:#include <stdio.h>void hello(){ printf("Hello World\n");}int main(){ void(*fp)() = &hello; fp(); return 0;}输出Hello World函数带参数:#include "stdio"void hello(int i,int b,ch原创 2017-05-07 11:32:58 · 592 阅读 · 0 评论