- 博客(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
原创 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网络编程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 并发与竞争 原子操作、自旋锁、信号量、互斥体
并发访问带来的问题就是竞争。对于临界区必须保证一次只有一个线程访问,也就是要保证临界区是原子访问的。我们要保护的是多个线程都会访问的共享数据。一般像全局变量,设备结构体这些肯定是要保护的,至于其他的数据就要根据实际的驱动程序而定。
2023-05-11 15:48:52
583
原创 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编译-下载-命令
倒计时的时候按下键盘上的回车键,默认是 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网络编程socket通信1
三次握手: 主动发起连接请求端,发送 SYN 标志位,请求建立连接。携带序号号、数据字节数(0)、滑动窗口大小。 被动接受连接请求端,发送 ACK 标志位,同时携带 SYN 请求标志位。携带序号、确认序号、数据字节数(0)、滑动窗口大小。 主动发起连接请求端,发送 ACK 标志位,应答服务器连接请求。携带确认序号。四次挥手: 主动关闭连接请求端, 发送 FIN 标志位。 被动关闭连接请求端, 应答 ACK 标志位。----- 半关闭完成。 被动关闭连接请求端, 发送 FIN 标志位。
2023-01-29 16:23:55
365
原创 linux MySql 基础知识(第一天)
是在关系数据库上执行数据操作、检索以及维护所使用的标准语言。查询数据、操纵数据、定义数据、控制数据,所有关系型数据库都是用相似的语言。创建的时候是要先创建主表,然后在创建从表。删除表的时候就必须要先删除从表在删除主表。其中的length表示该小数的最大位数。precision表示精度设置。注意上面的-p和密码之间是没有空格的。数据最大位数为5,小数点后面保留5位。从表中的班号就要来自于主表中的班号。
2023-01-18 16:21:21
148
原创 linux网络编程基础知识
地址和端口号,不知道目的主机的硬件地址, 而数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃。数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,最后将应用层数据交给应用程序处理。源地址和目的地址是指网卡的硬件地址(也叫MAC地址),长度是48位,是在网卡出厂时固化的。的主机的硬件地址是多少”,并将这个请求广播到本地网段(以太网帧首部的硬件地址填。传输控制协议是一种面向连接的、可靠的、基于字节流的传输层通信协议。
2023-01-15 19:25:46
284
多通道ADC转换.zip
2021-02-05
onewire_DS18B20.zip
2021-02-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅