- 博客(48)
- 收藏
- 关注
原创 【持续更新】shell脚本 + Linux命令
在Linux终端运行的shell命令,实际上是ELF可执行文件,不在终端输入“ ./xxx ” 就能直接运行可执行文件,是因为“ ./xxx ” 被链接包装过,就像xx.exe应用程序链接桌面,在桌面上可以直接进入xx.exe。“ ./xxx ”中的 “ ./ ” 是指路径,让解释器去找,告诉解释器“ 要执行的文件在当前路径”,解释器就不会去系统路径找。在脚本文件的第一行的 “ #!Makefile中的 “ $( ) ” 取变量的值。shell中的 “ ${ } ” 取变量的值。
2026-11-03 23:52:29
152
原创 【积分饱和】PID,积分项算法控制限幅
/ 更新积分项// q/d轴积分项 += ((输出值 - 预测值)* Current_PI_B + Ki*误差) * 周期时间。
2026-11-03 01:42:38
271
原创 【电学基础】
库仑定律 :真空中两个静止点电荷之间的相互作用力,与它们的电荷量的乘积成正比,与它们的距离的二次方成反比,作用力的方向在它们的连线上。这种电荷之间的相互作用力叫作静电力或库仑力。k是比例系数,叫作静电力常量r是它们的距离。
2026-09-10 18:49:08
230
原创 【Review_C++】【WrittenTest】
给已知的变量取一个别名,内存不会再为该引用分配新的内存空间,节省内存空间。2.指针会分配指针的空间, 引用是一个别名不分配空间。1.指针是间接访问数据 , 引用是直接访问。作用:解决开发过程中变量名冲突的问题。类(封装,继承,多态)
2026-08-18 14:40:32
170
原创 【REVIEW_C】【持续更新】
按上述计算,常数128经过转补码写入,再读出补码,1000 0000补码 -- 属于数据类型中非常特殊的存在,可以计算是 -0,但是0不分正负,所以 把-0的位置用-128进行替换。回答:二进制可以分正负,在二进制数的前面添加1bit,作为符号位,并且bit=0,用于表示二进制数为正数,bit=1,用于表示二进制数为负数。假设E是一个变量名,*&E ==> &E先结合,得到了变量的地址 , *(&E)可以得到该地址下的值,变量名本身就表示地址下的数值。
2026-08-17 16:09:57
161
原创 【持续更新_WrittenTest】
有两台计算机A、B,其中A的IP地址设置为10.10.1.1/24,B的IP地址设置为192.168.1.1/24,A和B经过一台二层交换机相连,发现A和B之间ping不通,为什么ping不同?在 C 语言中,**赋值运算符(`=`)的左操作数必须是可修改的左值(lvalue)**,即具有明确内存地址的变量或表达式。`a + 7` 是一个**计算结果(右值)**,它没有内存地址,**不能作为赋值的目标**(不能放在 `=` 的左边)。- 依次打印 `2` 和 `3`,最终输出 `23`。
2026-08-11 17:46:12
227
原创 【网络通信】不同主机通信、socket、IP地址
A类地址的网络编号占7bit(范围是0~127),也就是说理论上支持128个A类网络,而每个A类网络中IP地址的本地地址占3个字段(24bit),所以每个A类网络理论上可以连接224个主机,也就是说A类网络的IP地址的范围是 0.0.0.0 ~ 127.255.255.255。可以看到IP协议标准中对B类地址的网络编号分配了16bit,其中最高的2bit固定为10,所以按照点分十进制的表示方式,B类网络的IP地址的网络编号范围是128.0 ~ 191.255,也就是理论上最多支持16384个B类网络。
2026-08-10 18:38:48
195
原创 【PID设计思路】
/获取霍尔编码器的边沿数量,用来作为速度或位置。这里的速度和位置没有指定单位,而是用数字来表示一个程度。由于四个麦轮虽然相同的PWM调控,但是受到各种因素导致无法直行、转弯的旋转角太大,并且希望小车在爬坡的时候保持速度不变。{ // 编码器正向输出 }{ // 编码器反向输出 }要在原本的项目上新增PID控速。对电机控制,定速控制。
2026-07-01 23:40:21
239
原创 【TIM_IC】定时器TIM的输入捕获——TIM_IC时钟树、TIM_IC测量频率和占空比、PWMI、编码器接口、编码器接口测速和测位置
定时器TIM的输入捕获——Tim_IC时钟树、Tim_IC测量频率和占空比、PWMI、编码器接口、编码器接口测速和测位置
2026-07-01 01:27:17
371
原创 【keil5报错修复】Symbol **** multiply defined(by **.o and **.o)问题分析与解决
这样各模块在编译的时候,就知道“有这么个变量,但它的空间不在我这里”,链接的时候,这个变量虽然出现在所有包含这个头文件的模块里,但只有一个模块是它的真身所在。所以在编译阶段:这两个源文件都为同名变量“int u3”分配了空间,USART.c给函数TestTask分配了空间。此时两个模块中都有叫“int u3”的变量,于是报错:变量重复定义。编译阶段把所有源文件编成模块,给模块中的每个变量和函数分配空间。声明是不分配空间的,而是得到遇到真正的定义在分配空间。extern:用来声明外部变量,是声明,不是定义。
2026-05-23 15:30:44
177
原创 【stm32_9.2】FreeRTOS的任务管理:任务策略,调度器启用,任务创建、删除、挂起、恢复
FreeRTOS的任务管理:任务策略,调度器启用,任务创建、删除、挂起、恢复
2026-05-15 16:04:37
576
原创 【stm32_9.1】RTOS的概念、种类对比,FressRTOS的概述、FressRTOS的源码结构、FressRTOS的源码移植
RTOS的概念、种类对比,FressRTOS的概述、FressRTOS的源码结构、FressRTOS的源码移植
2026-05-13 23:58:32
591
原创 【stm32_8】IIC内部集成电路——IIC的时序、利用IO口模拟IIC的时序、IIC通信器件的读写使用、半导体存储器的基本概述
IIC内部集成电路——IIC的时序、利用IO口模拟IIC的时序、IIC通信器件的读写使用、半导体存储器的基本概述
2026-05-12 16:42:43
632
原创 【C语言】类型提升和ASCii
/修改此处即可解决乱码问题“GPIO_ReadInputDataBit()"函数的返回值类型是uint_8。可能ret = 00 或者 ret = 01 ,对应的字符是nul 和 soh。ASCII 1 是一个控制字符,名为SOH,在标准终端上通常不可见,不会显示任何可显示的字符,可能表现为一个空白或一个特殊符号(由终端决定)。
2026-05-08 03:06:26
362
原创 【SENSOR】HC_SR04超声波测距模块
(3)有信号返回,通过 IO口 ECHO 输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。计算高电平时间的方法 2 :用基本定时器 —— 在高电平到来时,开启定时器;(1)采用 IO 口 TRIG 触发测距,给最少 10us 的高电平信呈。(2)模块自动发送 8 个 40khz 的方波,自动检测是否有信号返回;计算高电平时间的方法 1 :在判断高电平的循环里,延时并计数。在高电平到来时,开启定时器;当ECHO引脚接收到高电平,开始计算高电平持续的时间。1 :在判断高电平的循环里,延时并计数。
2026-05-03 01:44:52
386
原创 【stm32_6.1】串行异步接口USART,串口的原理和应用
单片机和计算机进行串口通信,则需要注意串口的电平协议,单片机采用的是TTL电平,而计算机采用的RS232电平,所以单片机需要和计算机通信,则需要增加如MAX232电平转换芯片进行电气转换。在串口通信中,如果设置好了通信的字符格式,还需要通信双方约定好通信速率,也就是单位时间内传输的有效二进制数的个数,所以也被称为波特率(bps baud pre second)。如果使用软件(程序/设计算法的方式)实现,会增大CPU的负担(本来CPU传数据就行,现还得转数据),通常使用硬件(串口)实现。
2026-04-30 01:52:21
596
原创 MSB最高有效位、LSB最低有效位
就像反着念:“3...2...1”。对方如果知道你是反着念的,他会把第一个听到的“3”当成个位,第二个“2”当成十位,第三个“1”当成百位,重新组合成“123”。对方按顺序听,第一位是“1”(百位),第二位是“2”(十位),第三位是“3”(个位),最终得到“123”。LSB将 “ 收到的第一位 ” 放在bit0 (把收到的第一位“8”放在bit0) : 1 2 3 4 5 6 7 8。MSB将 “ 收到的第一位 ” 放在bit7 :1 2 3 4 5 6 7 8。
2026-04-29 18:21:59
321
原创 【stm32_7】定时器的原理与应用、基本定时器、通用定时器、PWM、模拟脉冲信号的宽度、利用PWM控制外设、逻辑分析仪的使用
定时器的原理与应用、基本定时器实现延时、通用定时器、PWM、模拟脉冲信号的宽度、利用PWM控制外设、逻辑分析仪的使用
2026-04-29 16:10:03
725
1
原创 【stm32_5】Systick嘀嗒定时器、解析时钟源、分析时钟树、应用Systick设计延时
一般情况下一款MCU有多种时钟源时钟源用于提供时钟信号时钟源分为两类每种时钟源的频率各不相同。内部时钟源外部时钟源结论:不清楚时钟源的频率,就无法计算总线的频率(因为总线的频率也是靠时钟源提供),从而无法计算挂载在总线下外设的频率。定时器属于外设,外设在总线身上, 总线的频率由时钟源提供。
2026-04-12 19:38:52
686
原创 【stm32_4】异常/中断、嵌套向量中断器NVIC、边缘检测器EXTI
中断描述,NVIC概述和使用,阐释EXTI的原理、框图解析,应用NVIC和EXTI完成程序设计
2026-04-11 15:39:21
411
原创 【stm32_3】嵌入式软件系统架构
轮询式系统 : 在裸机开发的程序运行时,先对所有的硬件进行初始化,然后在主程序中写一个死循环,顺序地处理各种事件。int main()//1. 对所有的硬件进行初始化(LED、BEEP、KEY......)//2.进入死循环while(1){ //点灯//警报//按键。
2026-04-05 00:11:07
274
原创 【stm32_2.2】【快速入门】对GPIO解析、外设的初始化和配置、细节分析GPIO
GPIO指的是对芯片的某个引脚进行高低电平的输出(输出),以及可以去检测某个引脚的电平状态(输入)。一般电平采用都是TTL电平信号,TTL电平信号规定:+5V等价于逻辑“1”,0V等价于逻辑“0”。电平其实有一个电平范围:>2.4V就表示高电平,<0.4V就表示低电平。寄存器由若干触发器组成。二值信号不仅需要进行算术运算和逻辑运算,还经常需要将这些信号和运算结果保存起来。为此 ====>需要使用具有记忆功能的基本逻辑单元。能够存储1位二值信号的基本单元电路统称为触发器。双稳态。
2026-03-29 12:39:58
522
原创 【stm32_2.1】【快速入门】自举模式、Flash闪存、LED点灯——对二极管PN结解析
MCU名称处理器主频168MHz闪存容量512KB静态随机访问存储器SRAM192KBMCU引脚数量144pin。
2026-03-23 23:39:09
106
原创 【进程间通信_4】消息队列:生成IPC对象的键值、创建消息队列、访问(发送、读取)消息队列、控制消息队列
如果消息正文的大小大于用户设置的缓存大小,则根据msgflg是否为MSG_NOERROR进行判断,如果msgflg设置为MSG_NOERROR ,则可以读取对应字节的消息,如果msgflg没有设置,则无法读取消息并报错。如果该标志设置为IPC_NOWAIT,则表示不阻塞,此时如果待写入的消息的长度大于消息队列剩余空间,则直接返回并报错。:传入一个key_t类型的值,该值指的是要创建的消息队列的key键值,key也称为密钥。proj_id的低8位+ 设备编号的低8位+ inode编号的低16位。
2026-03-20 18:26:37
413
原创 【stm32_1】集成开发环境的搭建 + KEIL5使用STM32标准固件库源码建立M4工程模板
比如指定5.26版本,https://armkeil.blob.core.windows.net/eval/MDK526.EXE。
2026-03-16 00:21:17
495
原创 【进程间通信_3】产生信号、处理信号、信号属性、信号挂起
这些宏定义都被定义在signal.h头文件中,头文件的路径:/usr/include/x86_64-linux-gnu/asm/signal.h。
2026-03-12 22:23:40
468
原创 【进程间通信_2】管道通信——匿名管道、有名管道
管道通信,顾名思义,管道是单向的——管道是采用半双工通信的(同一时刻只能完成发送数据或者接收数据)。匿名管道的特点是没有名称,所以用户无法使用open来创建和打开,但是匿名管道进行数据读写的方式和普通文件一样,都是支持read()/write()操作的。匿名管道在Linux系统下属于文件,但是匿名管道没有名称。有名管道,也可以称为命名管道、具名管道等。有名管道有自己的文件名,可以被open,同样也支持read/write访问。管道文件不是普通文件,由于管道的特性,所以。
2026-03-08 19:51:57
452
原创 【base64编码】原理+自主实现
数据储存在电脑中,是按照字节来存储的,一个字节8个bit。base64编码,每3个8位明文数据为一组,取这3个字数据的ASCII码,然后以6位为一组组成4个新的数据。
2026-01-24 15:01:27
375
原创 【目录检索】opendir / readdir / getcwd / chdir / stat / rewinddir...
/文件的索引节点号,用于唯一标识文件。//目录项在目录文件中的偏移量。//文件的类型(如普通文件、目录、符号链接等)/* 文件的模式,包括文件类型和权限。/* 文件内容对应的块数量, */ino_t st_ino;/* 文件的大小(字节数)。/* 文件内容对应的块大小。/* 所有者的用户ID *//* 文件的链接数: *//* 所有者的组ID */dev_t st_rdev;
2026-01-24 12:29:08
648
原创 【常用库函数】【C语言】
2.当参数位置传入的为NULL指针时会报错,当参数位置传入的为空字符串时,返回值为0;5.当字符串的数字大小超过了整型数字的取值范围时,返回时会变为整型数据的最大或最小值;6.当字符串中的数字有非10进制字符隔断时,atoi函数会直接返回当前位置前面的数字;如果找到,则返回指向该位置的指针;该函数返回转换后的长整数,如果没有执行有效的转换,则返回零。在第一次调用时,传入要分割的字符串;该函数返回一个指向最终的目标字符串 dest 的指针。该函数返回一个指向最终的目标字符串 dest 的指针。
2025-09-18 14:40:05
1089
原创 【向lcd屏幕写入中文】【“font.h“】【C语言】自用
参数七:一行显示字体的最大宽度,默认为: 0 (例如:字体大小为32,假设设置为64则一行显示两个字体,就换行显示)math.h不属于C的标准库,要用额外的命令链接上包含math.h的库。描述字体轮廓 ==> 使用是数学公式设计 ==> 编译的时候要。参数三:当前屏幕的色素 例如:32位-》4。参数三:当前屏幕的色素 例如:32位-》4。参数三:字体的位置 X轴。参数四:字体的位置 Y轴。参数一:LCD映射后的首地址。参数二:字体框的显示位置。参数五:设置好的字体输出框。
2025-09-05 15:44:29
1225
原创 【程序设计:往log.txt日志中写入格式化的时间】【C语言】自用
程序设计:获取当前系统时间,把时间转换为特定格式”yy年mm月dd日 星期x tt:mm:ss”,并每隔1s写入到本地磁盘中一个叫做log.txt的文本中,如果文本不存在则创建。思路://1.打开log.txt//2.调用time函数//3.把time函数返回值写入log.txt//4.关闭文件。
2025-09-02 23:44:16
719
原创 【解压图片显示到lcd】【 在lcd上播放gif】【C语言】自用
@file name : 解压图片显示到lcd 和 在lcd上播放gif* @brief : 解压图片显示到lcd 和 在lcd上播放gif//映射 全局变量//成功返回1,失败返回0////return 0;////////,并把图像信息和解码对象进行关联,通过解码对象对jpg图片进行解码//*///,调用函数之后开始解码,可以得到图像宽、图像高等信息//计算一行的大小////开始设计一个循环,在循环中每次读取1行的图像数据,并写入到LCD中。
2025-08-31 17:58:08
858
原创 【链式栈_C语言】创建空链表、创建新结点、入栈Push、出栈Pop、遍历链表
以链表作为基础实现栈空间把链表头部作为栈顶,方便数据的插入和删除(),链式栈相当于是一个单向不循环的链表。
2025-08-10 22:23:49
275
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅