自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(64)
  • 资源 (13)
  • 收藏
  • 关注

原创 Git高效开发:常用命令速查指南

Git常用命令与操作摘要 本文总结了Git常用命令与操作,包括: 基础配置:用户名、邮箱设置 常用命令:init/clone/status/add/commit/push/pull等 分支管理:创建/切换/合并/删除分支 版本比较:git diff和git log的三点与两点区别 操作记录:git reflog用于查看和恢复本地操作历史 代码整合:merge与rebase的区别及使用场景 版本回退:reset的三种模式(soft/mixed/hard) 选择性提交:cherry-pick应用特定提交 包含示

2025-11-09 20:13:05 854

原创 STM32 UART篇

通用同步异步收发器 USART。串行收发。起始位为低电平 停止位为高电平。

2025-10-04 21:46:32 956 4

原创 GD创建工程的流程

本文介绍了GD32F10x系列MCU的工程创建流程。首先从官网下载固件包,然后建立工程目录结构,包括LIB、CMSIS、HW和USER文件夹,分别存放外设库文件、内核支持文件、中断处理文件和用户代码。重点说明了各目录需要添加的具体文件,以及如何修改中断处理文件gd32f10x_it.c。最后在USER目录创建工程,添加头文件路径和源文件,并配置必要的宏定义。整个流程详细展示了GD32F10x项目的初始化步骤和文件组织结构。

2025-09-24 16:40:20 212

原创 stm32移植elog

本文介绍了EasyLogger(ELog)轻量级日志库的移植和使用方法。主要内容包括:从GitHub获取源码后,将必要文件加入项目;通过配置elog_cfg.h文件禁用颜色、异步输出等功能;实现elog_port.c中的端口接口函数,包括日志输出、锁机制和时间信息获取;修改elog.c中的日志级别显示文本。使用时需初始化elog并设置各日志级别的输出格式,最后通过不同级别的log宏输出日志信息。该日志库适合嵌入式系统使用,支持多种日志级别和格式化输出。

2025-09-24 16:32:27 363

原创 cmake

CMake参数传递与项目配置摘要 CMake提供多种参数传递方式: 编译时通过-D传递变量 使用add_definitions/target_compile_definitions定义宏 设置环境变量 通过configure_file生成配置文件 定义缓存变量(CACHE) 常用方法是通过target_compile_definitions将CMake变量转为C++宏定义。项目配置应包括: 版本要求(cmake_minimum_required) 项目定义(project) 源文件管理 模块化设计(通过in

2025-09-21 18:32:40 211

原创 git学习

这篇文章摘要了Git版本控制系统的核心使用方法和常见场景,包括基础命令、分支管理、冲突解决、远程仓库操作和版本回退技巧。主要内容涵盖:克隆/提交/推送操作、分支创建与合并、解决合并冲突的方法、三种后悔药(amend/revert/reset)、与远程仓库交互的两种方式,以及如何回退到指定commit。特别强调了git commit --amend修改提交信息、git rebase变基操作和git reset三种模式(--soft/--mixed/--hard)的使用场景和区别,并提供了强制推送等实用命令。

2025-09-21 18:29:14 573

原创 GPIO篇

本文介绍了GPIO的输入输出配置及应用。在输出方向中,比较了推挽输出和开漏输出的区别:推挽输出驱动能力强,可直接输出高低电平;而开漏输出需外接上拉电阻,高电平驱动能力弱。输入配置包括浮空、上拉和下拉模式,并给出了按键扫描和中断处理的代码示例。此外还讲解了中断优先级分组、软件触发中断、IO重映射及锁定IO配置的方法。文章通过具体电路和代码,展示了如何利用GPIO控制LED和实现按键中断功能。

2025-09-21 18:24:00 652

原创 准备与时钟篇

在CMSIS中放入cube包中的CMSIS下的include和CMSIS\Device\ST\STM32F1xx下面的include,源文件为CMSIS\Device\ST\STM32F1xx\Source\Templates\arm下的文件和CMSIS\Device\ST\STM32F1xx\Source\Templates下面的system_stm32f1xx.c文件。在工程中添加相关的源文件和头文件的路径即可。functions中包含该文件中给用户使用的函数。USER中创建main.c。

2025-09-21 18:15:35 862

原创 Linux应用编程:定时器

settimer工作机制是,先对it_value倒计时,当it_value为零时触发信号,然后重置为it_interval,继续对it_value倒计时,一直这样循环下去。3、使用 setitimer 时,通知信号的类别不能改变:SIGALARM,SIGPROF 等,而这些都是传统信号,而不是实时信号,因此有 timer overrun 的问题;2、setitmer 计时器时间到达时,只能使用信号方式通知使用 timer 的进程,而 POSIX timer 多种通知方式,比如信号,或者启动线程。

2024-01-12 21:45:41 2361 1

原创 day03_pandas_demo

pandas= panel + data + analysis 面板数据分析panel面板数据-计量经济学 三维数据以numpy为基础,借力numpy模块在计算方面性能高的优势基于matplotlib,能够简便的画图独特的数据结构func:自定义函数axis=0:默认是列,axis=1表示进行行计算# 计算col1和col2列最大值减去最小值的值Pandas基础数据处理Pandas介绍:面板数据 数据处理工具 便捷的数据处理能力。

2023-10-23 19:19:12 442

原创 day02_numpy_demo

Numpy的优势:内存存储风格,ndrray存储相同数据,内存连续存储,底层c语言实现,支持多线程ndarray的属性:shape、dtype、ndim、size、itemsize基本操作:ndarray.方法() np.函数()生成数组的方法:np.ones(shape) np.zeros(shape)从现有数组中生成:np.array() np.copy() np.asarray()生成固定范围的数组:np.linspace(a, b, c) np.arange(a, b, c)

2023-10-22 14:47:03 384

原创 day01_matplotlib_demo

容器层画板层Canvas画布层plt.figure(figsize=(), dpi=)绘画层/坐标轴fig, axes = plt.subplots(nrows=, ncols=, figsize=(). dpi=)辅助显示层修改x,y轴刻度 plt.xticks()添加描述信息 plt.xlabel() plt.ylabel() plt.title()添加网格 plt.grid()显示图例 plt.legend()图像层,可以设置图像颜色、风格、标签。

2023-10-22 14:44:14 789

原创 FreeRTOS(以STM32F1系列为例子)

API 函数的参数uxPriority为创建的任务赋予了一个初始优先级。这个侁先级可以在调度器启动后调用API 函数进行修改。文件中设定的编译时配置常量的值,即是最多可具有的优先级数目。FreeRTOS本身并没有限定这个常量的最大值,但这个值越大,则内核花销的内存空间就越多。所以总是建议将此常量设为能够用到的最小值。低优先级号表示任务的优先级低,优先级号 0 表示最低优先级。有效的优先级号范围从 0 到。如果被选中的优先级上具有不止一个任务,调度器会让这些任务轮流执行。

2023-09-30 20:23:06 1852

原创 SQLite3 操作命令以及c/c++编程API和例子

。。导出完整的数据库在一个文本文件中:。所有的SQL语句都是使用分号结尾,不区分大小写,两个减号“--”代表注释。

2023-09-11 19:18:27 1128

原创 Linux Shell 脚本语法以及常用命令

Linux Shell 脚本语法以及常用命令

2023-09-05 10:44:12 1356

原创 Linux网络编程Socket通信6-Libevent移植与使用

对I/O事件、信号和定时事件提供统一的处理。事件驱动、高性能、轻量级、专注于网络、跨平台、支持多种I/O多路复用技术、支持I/O,定时器和信号事件、注册事件优先级。bufferevent 是 libevent 中的一个事件缓冲 IO,内部实现了基本 socket recv/send 操作 ,用户只需要调用 bufferevent 的 API 即可实现数据的读写。创建好libevent_base根节点后,需要等待事件的产生,也就是等待想要等待的事件的激活,在libevent中提供了对应的接口,类似。

2023-08-30 20:13:48 584

原创 Linux网络编程Socket通信5-UDP/domain

unix domain socket 本地套接字通信,全双工。套接字用文件来标识。这个文件在绑定之前是不能存在的。对于文件客户端可以使用隐式绑定,但是服务器不可以。

2023-08-09 10:57:38 378

原创 Linux网络编程Socket通信4-poll/epoll/reator/threadpoll

select 跨平台, poll 没有1024文件描述符的限制,缺点也很明显,每次监听都需要将监听到的信息从应用层拷贝到内存,返回变化的文件描述符的个数,具体那个文件描述符需要遍历,大量并发、少量活跃效率比较低。创建一定数量的线程,和一个任务队列,线程池中的线程不停的去任务队列中取任务,又任务到来直接往任务队列中添加。epoll 优点:没有1024文件描述符的限制,下次监听不需要将需要监听的文件描述符从应用层再次拷贝到内核,返回的是已经变化的文件描述符,不需要遍历,大量并发,少量活跃效率高。

2023-08-09 10:53:40 408

原创 json解析

开源网址:https://sourceforge.net/projects/cjson/优点在于,即使 json 文件出现错误,还是可以读取出其他的内容。两个文件拷贝到自己的项目中即可,在。花括号表示对象,使用。下面都是可以使用的。

2023-06-17 14:50:20 1283

原创 linux beep 实验

linux 蜂鸣器实验、使用设备树、gpio、pinctl子系统实现

2023-05-11 15:51:44 351

原创 linux 并发与竞争 原子操作、自旋锁、信号量、互斥体

并发访问带来的问题就是竞争。对于临界区必须保证一次只有一个线程访问,也就是要保证临界区是原子访问的。我们要保护的是多个线程都会访问的共享数据。一般像全局变量,设备结构体这些肯定是要保护的,至于其他的数据就要根据实际的驱动程序而定。

2023-05-11 15:48:52 583

原创 linux pinctrl 和 gpio 子系统 LED驱动

借助 pinctrl 和 gpio 子系统来简化 GPIO 驱动开发。

2023-05-11 15:41:14 799

原创 linux 设备树下的led驱动(寄存器)

①、在文件中创建相应的设备节点。②、编写驱动程序,获取设备树中的相关属性值。③、使用获取到的有关属性值来初始化 LED 所使用的 GPIO。

2023-05-11 15:36:00 350

原创 linux 设备树详解

描述设备树的文件叫做,这个 DTS 文件采用树形结构描述板级设备,也就是开发板上的设备信息,比如CPU数量、 内存基地址、IIC接口上接了哪些设备、SPI接口上接了哪些设备等等。树的主干就是系统总线,IIC 控制器、GPIO 控制器、SPI 控制器等都是接到系统主线上的分支。DTS 文件的主要功能就是按照上图所示的结构来描述板子上的设备信息。SOC厂商有多种开发板,将这些共同的信息提取出来作为一个通用的文件,其他的.dts 文件直接引用这个通用文件即可,这个通用文件就是.dtsi。

2023-05-11 15:30:31 1813 1

原创 嵌入式日志库ulog的使用和解析

time(& tt);// 打开文件my_test.txt 这里文件可以跟改为时间 fprintf(fp , "%s [%s]: %s\n" , get_time , // user defined function ulog_level_name(severity) , msg);执行后,文件中的内容类似以下,这个格式是按照自己喜好在日志函数中自己编写。

2023-04-19 19:44:08 6364 2

原创 Linux 字符设备驱动(新)

和这两个函数是老版本驱动使用的函数,现在新的字符设备驱动已经不再使用这两个函数,而是使用Linux内核推荐的新字符设备驱动API函数。

2023-04-12 08:51:01 346 1

原创 Linux 字符设备驱动(旧)

字符设备是 Linux 驱动中最基本的一类设备驱动,字符设备就是一个一个字节,按照字节流进行读写操作的设备,读写数据是分先后顺序的。比如我们最常见的点灯、按键、IIC、SPI,LCD 等等都是字符设备,这些设备的驱动就叫做字符设备驱动。

2023-04-12 08:49:01 175

原创 Linux内核编译

编译完成以后就会在这个目录下生成一个叫做zImage的文件,zImage 就是我们要用的Linux镜像文件。另外也会在下生成很多.dtb文件,这些.dtb就是设备树文件。

2023-04-09 13:48:43 1170

原创 uboot图形化配置及其原理

可以参考linux内核源码中的①、在主界面中添加一个名为“My test menu”,此菜单内部有一个配置项。②、配置项为“MY_TESTCONFIG”,此配置项处于菜单“My test menu”中。③、配置项的为变量类型为 bool,默认值为 y。④、配置项菜单名字为“This is my test config”

2023-03-31 19:37:40 905

原创 uboot顶层Makefile分析

编译后生成的目录结构其中的目录结构解释。

2023-03-31 15:55:39 838

原创 uboot编译-下载-命令

倒计时的时候按下键盘上的回车键,默认是 3 秒倒计时,在 3 秒倒计时结束以后如果没有按下回车键的话 uboot 就会使用默认参数来启动 Linux 内核。用于直接对 DRAM 进行读写操作的,常用的内存操作命令有 md、nm、 mm、mw、cp 和 cmp。设置tftp文件夹,,其名字分为“boot”和“cmd”,也就是“引导”和“命令”,说明这个环境变量保存着引导命令,其实就是。首先ubuntu中需要安装好nfs,并且新建nfs使用目录,将所有需要使用nfs访问的文件放到该目录下。

2023-03-31 14:40:21 1041

原创 linux网络编程socket通信3-select

缺点:文件描述符1024限制,受到FD_SETSIZE的限制、只是返回文件描述符的个数,具体那个需要遍历。多路IO复用:内核监听多个文件描述符的属性(读和写缓冲区)变化,poll、epoll、select。应用层通过内核select监听各个文件描述符,对于应用层的文件描述符集合我们最好需要备份一下,如果有某个文件的读缓冲区发生了变化,那么这个时候就可以读了,将这个事件告知我们的应用层。使用数组保存监听lfd后,Accept产生的cfd,在遍历监听该数组即可。之前的文件描述符合集。

2023-03-20 09:43:34 239

原创 linux网络编程socket通信2

原理:原函数和包裹函数的函数名差异只有首字母大写,这是因为man page对字母大小写不敏感,同名的包裹函数一样可以跳转至man page , 新包裹需要检查返回值的函数,让代码不那么肥胖。在接收和发送数据时个人设计一个守护进程(线程),定时发送Heart-Beat包,客户端/服务器收到该小包后,立刻返回相应的包即可检测对方是否实时在线。为了实时检测查询的链接状态,常用的方法就是加入心跳机制。

2023-03-03 21:01:37 567

原创 c语言对xls文件的操作

1、xls文件中每个格子之间的间距就是一个tab键,也就是。这些可以将一个xls文件使用记事本打开便可以一目了然。2、xls文件的行和行之间是使用换行的,也就是。

2023-02-01 22:02:21 1688 1

原创 linux mysql基本查询语句、表连接、where子句(第三天)

左外连接的结果集 = 内连接的结果集 + 左表中匹配不上的记录。右外连接的结果集 = 内连接的结果集 + 右表中匹配不上的记录。使用where子句实现三表之间的连接 使用and进行连接。作用: 根据条件表达式从数据源中筛选出符合条件的记录。需求:列出学生的信息,包括学号、姓名和班级名称。语法:逻辑表达式1 and 逻辑表达式2。语法:逻辑表达式1 or 逻辑表达式2。判断一个表达式的值是否出现在列表中。判断表达式的值是否在给定的闭区间。判断表达式的值是否符合给定的模式。:匹配任意长度的任意字符,

2023-02-01 11:20:05 437

原创 linux ubunut vimrc配置

进入vim编辑模式,删除全部,将下面内容给复制进去,保存即可。

2023-01-31 09:03:07 247

原创 Linux网络编程socket通信1

三次握手:​ 主动发起连接请求端,发送 SYN 标志位,请求建立连接。携带序号号、数据字节数(0)、滑动窗口大小。​ 被动接受连接请求端,发送 ACK 标志位,同时携带 SYN 请求标志位。携带序号、确认序号、数据字节数(0)、滑动窗口大小。​ 主动发起连接请求端,发送 ACK 标志位,应答服务器连接请求。携带确认序号。四次挥手:​ 主动关闭连接请求端, 发送 FIN 标志位。​ 被动关闭连接请求端, 应答 ACK 标志位。----- 半关闭完成。​ 被动关闭连接请求端, 发送 FIN 标志位。

2023-01-29 16:23:55 365

原创 linux MySql选课系统数据库 DML操作(第二天)

修改数据库的默认编码为。

2023-01-22 22:12:38 820

原创 linux MySql 基础知识(第一天)

是在关系数据库上执行数据操作、检索以及维护所使用的标准语言。查询数据、操纵数据、定义数据、控制数据,所有关系型数据库都是用相似的语言。创建的时候是要先创建主表,然后在创建从表。删除表的时候就必须要先删除从表在删除主表。其中的length表示该小数的最大位数。precision表示精度设置。注意上面的-p和密码之间是没有空格的。数据最大位数为5,小数点后面保留5位。从表中的班号就要来自于主表中的班号。

2023-01-18 16:21:21 148

原创 linux网络编程基础知识

地址和端口号,不知道目的主机的硬件地址, 而数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃。数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,最后将应用层数据交给应用程序处理。源地址和目的地址是指网卡的硬件地址(也叫MAC地址),长度是48位,是在网卡出厂时固化的。的主机的硬件地址是多少”,并将这个请求广播到本地网段(以太网帧首部的硬件地址填。传输控制协议是一种面向连接的、可靠的、基于字节流的传输层通信协议。

2023-01-15 19:25:46 284

各种滤波器的C语言实现,有FIR的低通、高通、带通、带阻等,卡尔曼滤波器.rar

各种滤波器的C语言实现,有FIR的低通、高通、带通、带阻等,卡尔曼滤波器

2021-01-22

APM32-Keil-pack.zip

APM32-Keil-pack、AMP32-keil对应的软件包,直接双击安装

2021-01-22

MM32-Keil-pack.zip

MM32-Keil-pack.zip,MM32单片机对应Keil软件的安装包,直接双击安装

2021-01-22

stm8s和stm8l和stm32f1和stm32f4x_dsp的官方固件库.zip

stm8s和stm8l和stm32f1和stm32f4x_dsp的官方固件库,官网下载太慢

2021-04-17

STM32 USB虚拟串口驱动.zip

USB虚拟串口驱动

2021-02-05

STM32-Keil-pack.zip

STM32-Keil-pack,STM32对应的安装包

2021-01-22

GIT录制软件.7z

里面包含GitCam 和licecap两个GIT录制软件,操作简单

2021-02-19

多通道ADC转换.zip

多通道ADC转换,学习来源b站:陆小果哥哥 /*GPIO 管脚的配置 选用 ADC 的通道 0   1   2   3 8   9   10   11   12   13   14  15, 分别对应的管脚为 PA0  PA1 PA2   PA3 PB0  PB1  PC0  PC1  PC2  PC3  PC4  PC5

2021-02-05

PID(比例积分微分算法).zip

pid算法学习笔记,以及源码,和我的代码

2021-02-05

onewire_DS18B20.zip

单总线DS18B20,多个传感器挂接单个IO口,读取温度,解放io口,假设需要多个DS18B20测量不同处温度,io口不足,可以使用一个io口便可以读取多个的温度。每个DS18B20的出厂id不同。

2021-02-05

匿名四轴上位机.zip

匿名四轴上位机,软件功能非常强大,有兴趣玩四轴的人,用这个软件,可以帮助你调试代码。

2021-02-05

PCtoLCD2002完美版.zip

字模工具、PCtoLCD2002完美版.zip

2021-01-22

java api中文/英文

java api中文/英文,免费下

2020-10-24

空空如也

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

TA关注的人

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