自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 V4L2应用层开发

【代码】V4L2应用层开发。

2023-11-30 17:58:29 49

原创 驱动的调试

上述例子中宏 KERN_DEBUG 和后面的 ”” 之间没有逗号,因为宏实际是字符串,在编译时会由编译器将它和后面的文本拼接在一起。查看系统使用的日志等级信息通常情况下,上述命令会输出 7 4 1 7这四个数字依次对应 console_loglevel,default_message_loglevel,minimum_console_loglevel,default_console_loglevel。:控制台使用的日志级别;:调用 printk() 未指定日志级别时使用的日志级别;

2023-11-03 18:16:18 97

原创 FreeRTOS相关API函数

FreeRTOS相关API函数

2023-08-21 13:30:02 446

原创 C语言中运算符的优先级

C语言中运算符的优先级表

2023-05-04 16:19:50 66

原创 大数的阶乘

写一段程序,输入正整数n(n<100),输出的阶乘。提示:注意数值溢出。#include<stdio.h>#define MAX 10000int main(){ int n; while (scanf("%d",&n) != EOF) { int a[MAX]; a[1] = 1; //从a[1]开始 int p= 1; //p 表示位数,刚开始只有一位a[1] 且 a[1] = 1,不能为0,0

2022-04-09 00:00:22 632

原创 Linux驱动编译问题

记录下在学习Linux驱动的时候遇到的问题:编译驱动遇到这样的报错:error: expected declaration specifiers or ‘…’ before string constantwarning: data definition has no type or storage classwarning: type defaults to ‘int’ in declaration of ‘MODULE_LICEVSE’warning: function declaration

2022-03-05 20:46:18 2067 2

原创 二叉树的三种遍历,最简便的记忆方法

前序遍历先访问根结点,然后前序遍历左子树,再前序遍历右子树在这里我用最小完全二叉树表示最简单明了:中序遍历中序遍历跟结点的左子树,然后是访问根结点,最后遍历右子树。还是按照最小完全二叉树来表示:后序遍历从左到右先叶子后结点的方式遍历访问左右子树,最后访问根结点。在这里我依旧使用最小完全二叉树来表示:最后,依照最小完全二叉树图我们得出总结:前序遍历:213中序遍历:123后序遍历:132...

2022-02-28 16:18:11 422

原创 Linux进程的零基础学习笔记

进程的由来程序进程查看进程之间的关系操作系统如何区分进程创建一个新进程fork函数fork函数特性fork函数要点总结子进程的偷梁换柱exec函数族要点总结进程的由来程序静态文件进程运行着的实体查看进程之间的关系pstree操作系统如何区分进程PID:进程的身份证创建一个新进程fork函数头文件:#include <unistd.h>函数原型:pid_t fork(void);返回值:成功:0或其他正整数失败:-1fork函数特性执行

2022-02-12 12:21:31 435

原创 htons(), htonl(), ntohs(), ntohl()

在网络编程中,往往会遇到字节的网络顺序和主机顺序的问题。我们先来了解下字节的网络顺序和主机顺序:网络字节序与主机字节序主机字节序:就是我们平常说的大端和小端模式,不同的CPU有不同的字节序类型,这些字节序是指整数在内存中保存的顺序,这个叫做主机序。引用标准的Big-Endian和Little-Endian的定义如下:  a) Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。  b) Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存

2021-08-31 10:19:42 686

原创 git拉取远程分支到本地

初始化本地仓库git init与远程仓库建立连接git remote add origin https://gitee.com/xxx/yyy.githttps之后的为仓库链接拉取远程分支到本地git fetch origin bran(bran为远程仓库的分支名)在本地创建分支bran并切换到该分支git checkout -b bran(本地分支名称) origin/bran(远程分支名称)把远程分支上的内容全部拉取到本地git pull origin .

2021-08-10 10:47:11 118

转载 git简单教程

git - 简明指南安装创建新仓库检出仓库工作流推送改动分支更新与合并标签替换本地改动实用小贴士安装下载 git OSX 版下载 git Windows 版下载 git Linux 版创建新仓库创建新文件夹,打开,然后执行git init以创建新的 git 仓库。检出仓库执行如下命令以创建一个本地仓库的克隆版本:git clone /path/to/repository如果是远端服务器上的仓库,你的命令会是这个样子:git clone username@host:/path/t

2021-07-28 17:06:24 148

原创 ASCII码表

2021-06-07 17:25:01 847

原创 FSMC —— 扩展外部 SRAN!

1. SRAM 控制原理  STM32控制器芯片内部有一定大小的SRAM及FLASH作为内存和程序存储空间,但当程序较大,内存和程序空间不足时,就需要在STM32芯片的外部扩展存储器了。  扩展内存时一般使用SRAM和SDRAM存储器,但STM32F1系列的芯片不支持扩展SDRAM(STM32F429系列支持),它仅支持使用FSMC外设扩展SRAM,我们以 SRAM为例讲解如何为STM32扩展内存。由于引脚数量的限制,只有STM32F103ZE或以上型号的芯片才可以扩展外部SRAM。  2. SR

2021-05-19 17:32:55 664

转载 GPIO的工作模式

GPIO:就是一个引脚作为输入或者输出。GPIO的八种工作模式:输入输出是相对于CPU,四种输入、四种输出模式及四种输出最大速度输入:外部数据输入到开发板输出:开发板的数据输出到外部设备1. GPIO_Mode_AIN 模拟输入将IO口作为模拟输入接口,输入的可能是变化的值,接收外部的模拟信号输入2. GPIO_Mode_IN_FLOATING 浮空输入复位上电的时候,引脚不确定电平的高低3. GPIO_Mode_IPD 下拉输入将IO口作为通用输入接口,只能输入0或者1,强制下拉,一

2021-05-12 18:45:24 3515

原创 C语言中“#、##、##__VA_ARGS__”的用法

#:把参数名转为字符串#include <stdio.h>#define prin(x) printf("%s=%d",#x,x)int main(){ int i = 9; prin(i); return 0;}运行结果:##:用来连接两个子串#include <stdio.h>#define prin(x) print##x()void printA(){ printf("这是printA()函数");}void printB(

2021-05-12 17:47:15 774

原创 I2C协议

I2C物理层I2C通讯设备之间的常用连接方式它的物理层有如下特点:(1) 它是一个支持设备的总线。“总线”指多个设备共用的信号线。在一个I2C通讯总线中,可连接多个I2C通讯设备,支持多个通讯主机及多个通讯从机。(2) 一个I2C总线只使用两条总线线路,一条双向串行数据线(SDA) ,一条串行时钟线 (SCL)。数据线即用来表示数据,时钟线用于数据收发同步。(3) 每个连接到总线的设备都有一个独立的地址,主机可以利用这个地址进行不同设备之间的访问。(4) 总线通过上拉电阻接到电源。当I2C设备

2021-04-30 00:44:48 1343 1

原创 SPI 协议

SPI的应用SPI(Serial Peripheral Interface)协议是由摩托罗拉公司提出的通讯协议,即串行外围设备接口,是一种高速全双工的通信总线。SPI总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息。SPI总线可直接与各个厂家生产的多种标准外围器件相连,包括FLASH、RAM、网络控制器、LCD显示驱动器、A/D转换器和MCU等。接口MOSI (Master Output, Slave Input)主设备输出/从设备输入引脚。主机的数据从这条信

2021-04-29 21:20:58 509

原创 电平标准(RS232 \ RS485 \ TTL)对比

通讯标准5V TTLRS-232RS-485电平标准(发送端)逻辑 1:2.4V ~ 5V 逻辑 0:0 ~ 0.5V逻辑 1:-15V ~ -3V 逻辑 0:+3V ~ +15V逻辑 1:-6V ~ -2V 逻辑 0:+2V ~ +6V传输方式计算机处理器控制的设备内部各部分之间通信的标准技术。采用不平衡传输方式,即所谓单端通讯采用平衡传输,即差分传输方式(使用两根线的电压差表示数据)传输距离适合本地设备之间的通信,传输距离一般不超过20m。传输...

2021-04-29 15:58:13 1250

原创 C语言位操作

C 语言中提供了 &(与)、|(或)、^(异或)、~(取反)、>>(右移)、<<(左移)6 种位操作符。pqp&qp|qp^q00000010111001111110假设如果 A = 60,且 B = 13,现在以二进制格式表示,它们如下所示:A = 0011 1100B = 0000 1101下表显示了 C 语言支持的位运算符。运算符实例&(与)

2021-04-24 15:05:57 120

原创 FLASH的存储特性

在写入数据之前必须先擦除擦除时会把数据全置为 1写入数据时只能把为 1 的数据位改为 0擦除时必须按最小单位来擦除(一般为扇区)

2021-04-16 22:01:51 397

原创 比特率与波特率

Bitrate——比特率:每秒钟传输的二进制位数,单位为比特每秒(bit/s)。Baudrate——波特率:表示每秒钟传输的码元个数。区别:①当码元为 1 位二进制数时,两者是一样的。②当码元为 2 位及以上二进制数时,两者不一样。...

2021-04-02 00:12:17 213

原创 翻转一个数

十进制数的翻转将 123 翻转后为 321 ;将 -123 翻转后为 -321 ;#include <stdio.h>int main(){ int n = 123; int m = 0; while(n != 0) { m = m * 10 + n % 10; //取出 n 的个位数,并加上 m * 10 n = n / 10; //去除 n 的个位数 } printf("%d",n); return 0;}二进制的翻转输入:00000010

2021-03-29 15:16:38 128

原创 STM32固件库文件分析

汇编编写的启动文件startup_stm32f10x_hd.s: 设置堆栈指针、设置 PC 指针、初始化中断向量表、配置系统时钟、调用 C 库函数 _main 最终去到 C 的世界。时钟配置文件system_stm32f10x.c:把外部时钟 HSE = 8M,经过 PLL 倍频为 72M。外设相关的stm32f10x.h:实现了内核之外的外设的寄存器映射。xxx:GPIO、USRAT、I2C、SPI、FSMC。stm32f10x_xx.c:外设的驱动函数库文件。stm32f10..

2021-03-26 16:46:26 152

原创 寄存器置 0 或 1 的问题

设 GPIO 为一个 8 位寄存器,其值为:10010100①现要将它的第 3 位(从右开始,第 0 位起始),置为 1 ,并保持其他位不变。GPIO |= (1<<3); //置 GPIO_3 为 1原理是 1 左移3位,再或上 GPIO。②现要将它的第 2 位,置为 0,并保持其他位不变。GPIO &= ~(1<<2); //置 GPIO_2 为 0原理是先将 1 左移 2 位,再进行取反,最后再与上 GPIO。.

2021-03-26 11:21:15 2960

原创 C语言char数组的初始化

字符数组的定义与初始化:char a[ 5 ] = { ’ a ', ’ b ', ’ c ', ’ d ’ };注意:大小为 n 的字符数组,最多能赋值 n - 1 个字符。若超过 n - 1 个,则会直接报错;若是少于 n - 1 个,则其余的自动赋为空字符 ‘ \0 ’ 。若在定义数组时赋值为空,即:char a[ 5 ] = { ’ \0 ’ }; 其实这样赋值只是把第 1 个元素赋值为 ‘ \0 ’,后面的都默认用 ‘ \0 ’ 填充。而若在定义数组时,char a[ 5 ] = {

2021-03-16 16:51:55 20192 1

原创 C语言中传递二维数组

第一种方法:#include <stdio.h>void pri(int n,int a[ ][3]){ for(int i = 0; i < n; i++) for(int j = 0; j < n; j++) printf("a[%d][%d] = %d\n", i, j, a[i][j]);}int main(){ int a[3][3] = {1,2,3, 4,5,6, 7,8,9}; pri(3,a); ret

2021-03-15 10:02:42 578

原创 零矩阵

编写一种算法,若M × N矩阵中某个元素为0,则将其所在的行与列清零。例:输入:1 1 11 0 11 1 1输出:1 0 10 0 01 0 1我的思路是先将数组中的所有 0 找出,并且通过使用矩阵本身来存储需要清零的行与列的数据。#include<stdio.h>void setZeroes(int** matrix, int line, int column){ int i,j,x; for(i=0;i<line;i++) {

2021-03-14 15:41:54 1568

原创 关于M*M矩阵旋转的问题

下面是一个3*3的矩阵,经过90度旋转,得到:1 2 3 7 4 14 5 6 ——> 8 5 27 8 9 9 6 3第 1 种方法:使用辅助数组我们只看第1行的旋转:1 2 3 。。1。。。 ——> 。。2。。。 。。3可以看出第 1 行的元素旋转后,出现在倒数第 1 列的位置。并且第 1 行的第 x 个元素旋转后,出现在倒数第 1 列的第 x 个位置。再来看第 2 行的元素,旋转后,出现在倒数第 2 列的位置上。。。。 。4 。4 5

2021-03-14 15:19:13 149

原创 C语言中函数返回数组的问题

今天遇到一个自定义函数返回数组的情况,下面用一个很简单的事例演示:#include<stdio.h>#include<string.h>char* a(char* x){ char y[strlen(x)]; strncpy(y,x,strlen(x)-1); //将x数组的前strlen(}

2021-03-13 16:05:46 324

原创 C语言中int类型与char类型相互转换的问题

char类型转化成int类型char a = '9';int b;b = a - '0'; //b = 9int类型转化成char类型int a = 9;char b;b = a + '0'; //b = '9'

2021-03-13 15:35:51 409

基于STM32的智慧门禁系统

智慧门禁系统有密码、指纹和门禁卡三种开锁方式,分别通过矩阵按键、指纹模块和RFID 模块实现,可通过按键选择优先开锁方式,且可断电记忆。通过 ESP8266 模块联网获取时间信息,由 OLED 显示时间、锁状态和设置界面等。设置界面中可对三种开锁方式增删改查,数据保存在外部 flash 中,可断电记忆。 有录制的视频演示:【基于stm32的智慧门禁系统】 https://www.bilibili.com/video/BV1W94y1z7Q3/?share_source=copy_web&vd_source=92d92620752bc85843913874208c5b12

2023-10-30

空空如也

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

TA关注的人

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