自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 资源 (1)
  • 收藏
  • 关注

原创 使用ESP-01S通过AT指令连上MQTT服务器

ESP-01S通过AT指令连上与MQTT服务器通信

2022-04-04 18:28:49 10997 3

原创 Linux驱动开发流程

实现一个嵌入式Linux设备驱动程序的大致流程如下:(1) 查看原理图,理解设备的工作原理。(2) 定义主设备号。设备由一个主设备号和一个次设备号来标识。主设备号唯一标识了设备类型,即设备驱动程序类型,它是块设备表或字符设备表中设备表项的索引。次设备号仅由设备驱动程序解释,区分被一个设备驱动控制下的某个独立的设备。(3)实现初始化函数。在驱动程序中实现驱动的注册和卸载。(4)设计所要实现的文件操作,定义file–operations结构。(5)实现所需的文件操作调用,如read,write等。(

2021-11-04 10:38:12 2374

原创 SQLite数据库入门笔记

SQLite3入门笔记Linux下SQLite数据库的安装SQLite3基本命令SQLite3 C语言编程接口Linux下SQLite数据库的安装方法一:SQLite官网下载。从源代码区下载 sqlite-autoconf-*.tar.gz安装方法:$ tar xvzf sqlite-autoconf-3071502.tar.gz$ cd sqlite-autoconf-3071502$ ./configure --prefix=/usr/local$ make$ make install

2021-10-17 23:11:47 279

原创 数组的一些问题

题目解析:a是一个二维数组,p是一个指针函数,指向有3个int型元素的数组。p = a,a作左值表示a[0]的地址,即&a[0],所以p = a也可以写成p = &a[0]。答案解析:A、*(p=2),意思是将2这个地址赋值给指针p,之后解引用p取值,p=2类型不匹配,错。B、(p+1)+2,意思是指针p+3,指向a[3],数组的第一维只有2,指针p指向了未知空间,错。C、p[1]+1,p[]是一个一级指针,p[1] = *(p+1)。意思是p先指向下一个,即a[1],解引用是a.

2021-09-18 14:30:25 134

原创 单链表常用算法(创建节点、插入链表、遍历、删除、反转)

单链表常用算法创建节点插入链表头插法尾插法遍历链表删除节点链表反转创建节点// 创建一个节点,data为一个节点的有效数据struct node *creat_node(int data){ struct node *p = (struct node *)malloc(1*NODE_LEN); if(NULL == p){ printf("fail to malloc.\n"); return NULL; } memset(p, 0, NODE_LEN); p->data

2021-09-09 11:16:41 348

原创 嵌入式软件笔试常见编程题汇总

嵌入式软件笔试常见编程题汇总

2021-09-08 23:44:17 6623 3

原创 STM32使用SysTick精准延时

STM32使用SysTick精准延时前言        SysTick—系统定时器是属于 CM3 内核中的一个外设,内嵌在 NVIC 中。系统定时器是一个 24bit 的向下递减的计数器,计数器每计数一次的时间为 1/SYSCLK,一般我们设置系统时钟 SYSCLK 等于 72M。当重装载数值寄存器的值递减到 0 的时候,系统定时器就产生一次中断,以此循环往复。     &

2021-03-29 16:44:47 704

原创 UDP编程示例(sendto、bind、recvfrom)

一、示例1: 往网络调试助手发送信息#include <sys/types.h>#include <sys/socket.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <netinet/in.h>#include <arpa/inet.h>#include <unistd.h>#define N 128

2021-03-13 15:58:15 749 1

原创 Linux多线程编程(pthread_creat、pthread_exit、pthread_join、pthread_detach)

Linux多线程编程前言一、线程创建( pthread_creat() )二、线程退出( pthread_exit() )三、线程等待( pthread_join() )四、线程分离( pthread_detach() )五、互斥锁前言一、线程创建( pthread_creat() )#include <stdio.h>#include <pthread.h>#include <stdlib.h>#include <unistd.h>//i

2021-03-13 13:50:28 1174 1

原创 C语言 数组表示方法与区分

C语言 数组表示方法与区分#include <stdio.h>int main(){ int a[5] = {1,2,3,4,5}; int *p = &a[0]; int (*pa)[5] = &a; 定义数组指针,指向数组a int i; for(i = 0; i < 5; i++){ //数组下标法 printf("%d ",a[i]); } printf("\n"); f

2021-02-16 15:42:58 2056

原创 C语言 用指针数组实现字符串的排序

C语言 用指针数组实现字符串的排序#include <stdio.h>#include <stdlib.h>#include <string.h>void sort(char *s[], int len){ int i,j; char *temp = (char *)malloc(sizeof(char) * 30); for(i = 0; i < len-1; i++){ for(j = 0; j < le

2021-02-16 15:40:30 5144 1

原创 C语言 冒泡排序(回调函数法)

冒泡排序(C语言)#include <stdio.h>int small_big(int x, int y){ return (x > y) ? 1 : 0;}int big_small(int x, int y){ return (x < y) ? 1 : 0;}void sort(int cmd[], int len, int (*p)(int, int)) { //函数指针,指向b

2021-02-15 21:47:49 214

原创 进程间通信(管道、消息队列、共享内存)

进程间通信前言一、管道Ⅰ、无名管道Ⅱ、命名管道 FIFO二、消息队列三、共享内存前言进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams等。其中 Socket和Streams支持不同主机上的两个进程IPC。一、管道Ⅰ、无名管道1、简介:管道,通常指无名管道,是 UNIX 系统IPC最古老的形式。2、特点:①它是半双工的(即数

2021-02-09 12:25:22 236

原创 Linux进程基础知识(fork、vfork、exec族函数、system、popen

进程基础知识及Linux进程间通信前言一、进程的创建1、fork()2、vfork()3、模拟服务器---客户端二、使用步骤1.引入库2.读入数据总结前言1、进程拿来干嘛?     创建多个进程是任务分解时行之有效的方法。如,网络服务器进程可在监听客户端请求的同时,为处理每个请求而创立一个新的进程,同时,服务器进程会继续监听更多的客户端连接请求。2、进程与程序的区别?     进程是一个可执行

2021-02-04 00:15:38 645

原创 Linux文件编程

Linux文件编程前言一、打开文件:open二、往文件写内容:write三、读取文件内容:read四、小项目实践1、实现cp指令前言文件描述符:内核(kernel)利用文件描述符来访问文件。文件描述符是非负整数。打开现存文件或新建文件时,操作系统在内存构建一些数据结构来表示这个动态文件,然后内核会向进程返回一个文件描述符。读写文件需要使用文件描述符来指定待读写的文件。文件描述符的作用域是当前进程,出了这个进程,文件描述符就没有意义。以下是本篇文章正文内容,下面案例可供参考一、打开文件:op

2021-02-01 21:13:20 123

原创 Linux基本常用命令

Linux常用操作文件常用操作显示当前路径:pwd列出目录信息:ls常用后缀:-a, -l创建目录:mkdir常用后缀:-p目录跳转:cd常用后缀:cd .. ,cd ~创建空文件:touch拷贝:cp常用后缀:-r删除:rm移动(剪切):mv查看内容:cat常用后缀:-n分屏查看内容:less显示头部内容:head显示尾部内容:tail常用后缀:-n 5,-f输出重定向:>追加内容:>>软链接:ln查看历史命令:history文件常用操作显示当前路径:pwd列出目录信息:

2021-01-30 22:06:12 98

原创 STM32库函数开发跑马灯

库函数开发跑马灯GPIO库函数初始化函数void GPIO_Init()读取输入电平函数uint8_t GPIP_ReadInputDataBit()uint16_t GPIO_ReadInputData()读取输出电平函数uint8_t GPIP_ReadOutputDataBit()uint16_t GPIO_ReadOutputData()设置电平函数void GPIO_SetBits()v...

2020-04-02 21:02:36 766

原创 Keil 5 MDK的STM32使用

新建工程模板新建工程加入库文件将编译所产生的文件放到某个目录中将头文件路径告诉MDK添加一个全局的宏定义新建工程选择好要保存的文件夹,再选择精英版选择STM32F103ZE系列加入库文件①右键Target②修改工程目录③双击USER,分别添加文件至工程中将编译所产生的文件放到某个目录中点击魔术棒,点击output选项卡,点击select…,选中目标文件。将头文件路径告诉M...

2020-04-01 21:40:54 1016

原创 CSDN写Blog方法

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Ma...

2020-04-01 20:40:15 280

基于STM32F103ZET6的DHT11代码(自己写的亲测有效)

基于STM32F103ZET6的DHT11代码 (自己写的亲测有效) DHT11数据端口接STM32的PG11引脚

2022-07-31

空空如也

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

TA关注的人

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