自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 固件开发岗算法

背景:嵌入式固件岗,偏爱手写库函数、位运算、数组基础算法。

2026-11-01 16:36:16 108

原创 三方组件-easylogger 01

// .h文件elog.helog_cfg.h​// .c文件elog_port.celog_utils.celog.celog_async.c:(串口不会在这初始化)ElogErrCode elog_port_init(void){ return ELOG_NO_ERR;} :(啥也不用干)void elog_port_deinit(void){​} :(调用自身的串口发送函数)void elog_port_output(const char *log,

2026-09-06 09:30:23 193

原创 C语言-指针 11

指针跟指针进行减操作(间隔步长 获取地址值的差值 / 指针所指向数据类型的字节数) 步长:指针移动一次,走了多少个字节,取决于指针所指向的数据类型 char : 1 int : 4 double : 8。-->所以不同类型的指针互相赋值,虽然俩个不同类型的指针所保存的地址是一样的,但由于所指向的数据类型的不同,会造成通过同一地址解引用出来的数据不同。数组和指针 数组指针:指向数组的指针 数组指针作用:方便操作数组中的各个数据 利用指针遍历数组,遍历数组的目的是获取到数组中的每个元素。int ** pp;

2026-09-01 15:53:27 185

原创 C语言-字符串 10

普通字符:数字(1,7,8),英文(a,b,G),英文符号(, @ # $) 中文:中国,小日子 空格:是char类型的字符 数字:是char类型字符,不是int类型的整数 转义的内容: \n :换行符 \t :制表符 " " :双引号 \ :反斜杠。printf("%c\n", *p)(获取到字符串内每个字符) //循环体语句。底层存储细节:以{'a', 'b', 'c', '\0'}字符数组形式存储在只读常量区。底层存储细节:以{'a', 'b', 'c', '\0'}字符数组形式存储。

2026-08-31 09:34:24 208

原创 C语言-联合体 09

所有成员变量使用同一块内存空间,联合体总内存为以最大成员长度为准,同时受内存对齐(最大数据类型的整数倍)的影响。一次只能给一个成员变量赋值,因为第二次赋值会覆盖原有的数据。一个变量会出现多种数据类型。

2026-08-31 09:33:21 174

原创 C语言-结构体 08

规则: 结构体成员变量的地址得是自身数据类型所占用字节的整数倍;结构体占用总字节数是自身最大成员变量数据类型所占用字节数的整数倍;结构体成员变量结构体,这个成员变量结构体起始地址得和自身成员变量数据类型所占用最大字节数对齐;.name = "ksh", //初始化列表,编译器会从.name这个地址开始,写入"ksh"这个字符串,但普通赋值语句(yy_teacher.name = "ksh";//对象实例化/申明结构体变量并进行初始化。} people_t;

2026-08-31 09:31:33 174

原创 C语言-数组 07

数组长度省略: 大括号内元素的个数就是数组长度 数组长度未省略: 大括号内元素的个数 <= 数组长度 (未填充的部分填充默认值:整数0、小数0.0 、 字符'\0' 、字符串NULL)//structArr[i]: printf("学生名字为:%s, 学生年龄为:%d\n", structArr[i].name, structArr[i].age);与取地址运算符结合:&arr(地址是数组的首地址,步长是数组的总长度) 数组退化:arr(地址是数组的首地址,步长是指针所指向的数据类型)i < 数组长度;

2026-08-31 09:30:44 178

原创 C语言-函数 06

如果函数内传入的是结构体,函数的形参来暂存传入的结构体,相当于定义了一个新结构体,函数内修改这个新结构体,并不会影响调用处实参结构体,并且函数结束后,这个新结构体就消失了;如果传入的是结构体指针,那么就会把想修改结构体的地址,传入函数,函数内通过地址,就可以去修改结构体。返回值 函数名 参数(函数定义小括号内的参数叫形参,函数调用小括号内的参数叫实参) 函数体。程序中独立的功能 反复书写的代码,又不确定什么时候会用到的代码带包起来。函数干这件事情需要说明 -> 形参。这个函数是干什么的 -> 函数体。

2026-08-31 09:30:05 221

原创 C语言-流程控制语句 05

1。

2026-08-29 20:37:45 232

原创 STM32-RCC 14

作用:给内核外的外设提供时钟配置:main函数之前,还会执行一个SystemInit函数,用于配置系统时钟树配置流程:系统时钟先为内部时钟8MHZ,后切换为外部时钟72MHZ现实问题:stm32f103c8t6外部晶振出问题,系统时钟就无法切换到72MHZ,就会以内部8MHZ时钟运行,那么时间就会慢大概10倍。

2026-08-25 10:37:51 249

原创 STM32-NVIC 13

内核外设。

2026-08-25 10:36:51 202

原创 STM32-AFIO 12

AFIO作用:GPIO引脚复用 函数:GPIO_PinAFConfig 入参:GPIO GPIO_PinSourcex 复用对象 返回值:无调用示例:GPIO引脚复用重映射复用功能TIM2_REMAP[1:0]=00(没有重映像)TIM2_REMAP[1:0]=01(部分重映像1)TIM2_REMAP[1:0]=10(部分重映像2)TIM2_REMAP[1:0]=11(完全重映像)PA0PA15PA0PA15TIM2_CH2PA1PB3PA1PB3TIM2_CH3。

2026-08-24 08:59:51 228

原创 STM32-FLASH 11

FLASH前置常见16进制对应大小 0x400 1kbFLASH包括程序存储器,系统存储器,选项字节,通过闪存存储器接口(外设)可对程序存储器和选项字节进行擦除和编程FLASH组成 0x0800 0000 程序存储器flash 用于存储c语言代码 解锁后可读可写 0x1FFF F000 系统存储器 用于存储BootLoader 、芯片电子签名,用于串口下载 只读 0x1FFF F800 选项字节。

2026-08-24 08:58:11 242

原创 STM32-看门狗 10

看门狗前置监控程序运行状态,程序出现卡死或跑飞的现象,看门狗会复位程序工作逻辑: 本质是一个向下计数定时器,一定时间内,程序没有执行喂狗重置计数器,看门狗硬件电路就会产生自动复位信号看门狗分类 独立看门狗(IWDG):依靠LSI工作,即使主时钟发生故障或停止,IWDG 依然能继续工作,这也是它被称为系统“最后一道防线”的原因。对时间精度要求低,只有喂狗最晚界限窗口看门狗(WWDG):使用APB1系统时钟,有喂狗最早与最晚界限,要求看门狗在精确计时窗口起作用。

2026-08-23 17:16:02 236

原创 STM32-PWR 09

PWR前置模拟电路供电 引脚:VDDA(正极) VSSA(负极) 区域:A/D转换器 温度传感器 复位模块 PLL锁相环AD转换器参考电压供电引脚:Vref+与Vref- 内部已经接到 VDDA与VSSA数字电路供电 引脚:VDD GND 区域:I/O电路 待机电路(唤醒逻辑 IWDG)1.8V供电区域: 由来:数字电路供电通过电压调节器降至1.8V 区域:CPU核心存储器 外设注意外设通过IO转到3.3v与外界交流 外设以1.8V运行降低功耗。

2026-08-23 17:15:18 242

原创 FreeRTOS-内存管理 05

c库malloc与free不适配原因 无线程安全相关机制,多个任务同时获取一块内存,导致内存资源错乱 运行时间不确定 内存碎片化:被申请的内存空间前后不连续了线程与通信机制创建方法 *动态方法创建: 自动从FreeRTOS管理的内存堆中申请创建对象所需的内存,并且在对象删除后;可将这块内存释放回FreeRTOS管理的内存堆*静态方法创建: 需用户提供各种内存空问,并且使用静态方式占用的内存空间一般固定下来了,任务、队列等被删除后;这些被占用的内存空间一般没有其他用途。

2026-08-22 22:16:12 170

原创 FreeRTOS-Tickless低功耗 04

对比裸机低功耗模式 Tickless低功耗,涉及到线程的保护 Tickless低功耗,对应裸机低功耗模式中的睡眠模式通过调用WFI指令实现睡眠模式使用时机 系统大部分运行时间,给了空闲任务,为了降低功耗,又不影响程序运行;在空闲任务执行期间进入低功耗模式,应用任务运行期间退出低功耗模式使用方法 将滴答定时器的中断周期修改为低功耗运行时间,退出低功耗后补上系统时钟节拍。

2026-08-22 22:15:26 178

原创 STM32-RTC 08

Unix时间戳 从UTC/GMT的伦敦时间1970年1月1日0时0分0秒开始所经过的秒数,不考虑闰秒时间标准GMT/UTC GMT:把地球自转一周的时间间隔等分为24小时一天,作为时间标准 UTC:它规定铯133原子基态的两个超精细能级间在零磁场下跃迁辐射9,192,631,770周所持续的时间为1秒,将此作为时间基准。纠偏:当原子钟计时一天的时间与地球自转一周的时间相差超过0.9秒时(地球越转越慢),UTC会执行闰秒(多走1s)来保证其计时与地球自转的协调一致注意。

2026-08-21 16:22:33 190

原创 STM32-BKP 07

用于存储用户应用程序数据,当VDD电源被切断时,仍由VBAT维持供电;系统在待机模式下被唤醒,系统复位或电源复位,BKP内数据不会被清除倾入检测 配置TAMPER引脚上升沿触发或下降沿触发,清除BKP内保存的数据容量 20字节:10个DR寄存器(中小容量产品) 84字节:42个DR寄存器(大容量/互联型产品)使用 其他外设:开启时钟 BKP外设:开始PWR BKP时钟,PWR使能BKP访问。

2026-08-21 16:21:29 160

原创 STM32-DMA 04

DMA前置计算机系统组成部分:运算器 控制器 存储器 输入设备与输出设备注意CPU:运算器+控制器 存储器:SRAM与FLASH总线矩阵 主设备:cpu DMA 从设备:存储器 外设寄存器 作用:连接芯片内部的所有主设备和所有从设备,使主设备得以访问从设备 规则:CPU和DMA同时请求访问同一个目标,比如SRAM时,总线矩阵的仲裁器会决定谁先使用这条路径,避免撞车系统总线 内容:AHB APB1 APB2 作用:cpu进行外设寄存器的读写DMA定义。

2026-08-20 15:18:00 184

原创 STM32-ADC 03

ADC前置模拟与数字: ADC输入电压范围:0~3.3v 12位ADC输出数字范围:0~4095将引脚上连续变化的模拟电压,转换为内存中存储的数字变量stm32f103c8t6资源: ADC1 ADC2 每个ADC有很多个通道工作模式: 12位逐次逼近型ADC分辨率 Vref / 2的adc位数次方ADC通道: 规则组:16个ADC转换通道,但规则通道数据寄存器只能存放1个转换结果 配合DMA 注入组:4个ADC转换通道,有4个注入通道数据寄存器能存放4个转换结果。

2026-08-20 14:53:40 164

原创 STM32-TIM 02

对输入的时钟进行计数,并在计数值达到设定值时触发中断时基单元:16位计数器,预分频器,自动重装寄存器分类:高级定时器 通用定时器 基本定时器计数模式 向上计数模式:cnt == arr溢出 向下计数: cnt = arr -> 0 溢出 中央对齐模式:cnt == arr,cnt = arr -> 0注意中央对齐模式先向上计数,再向下计数。

2026-08-19 17:53:58 224

原创 STM32-EXTI 01

中断系统:管理和执行中断的逻辑结构众多能产生中断的外设之一,指定GPIO口的电平信号发生变化时,EXTI立即向NVIC发出中断申请,经NVIC裁决后即可中断CPU主程序,使CPU执行EXTI对应的中断服务函数支持触发方式:上升沿/下降沿通道数:16个GPIO_Pin注意通道数:16个GPIO_Pin --> 相同的Pin不能同时触发中断外部中断触发时外部的响应方式: CPU中断响应 其他外设事件响应。

2026-08-19 16:51:07 165

原创 C-常量 05

常量类型 说明 举例 整型常量 正数、负数、0 18、19 实型常量 所有带小数点的数字 1.93、18.2 字符常量 英文单引号引起来的字母、数字、英文符号 'A'、'C' 字符串常量 英文双引号引起来 "123"输出语句:printf(参数1, 参数2);参数1:输出内容的最终样式,以字符串形式体现 参数2:填补的内容与占位符一一对应。printf("今天是星期%d", week);程序执行过程中,其值不能发生改变的数据。

2026-08-16 10:22:54 202

原创 C-运算符 04

&:从左到右,只要左边的一个为假,后面的所有都不会起作用了 ||:从左到右,只要左边的一个为真,后面的所有都不会起作用了。== a == b 判断a是否等于b 成立1(真),不成立0(错)直接赋值: = 加后赋值: += 减后赋值: -= 乘后赋值: *= 取余赋值: %=定义: 把一个取值范围小的,赋值给取值范围大的,就会进行隐式转换。定义:把取值范围大的,赋值给取值范围小的,就需要进行强制转换。>= a >= b 判断a是否大等于b。

2026-08-16 10:21:35 230

原创 stm32-I2C 06

需求: 实现单片机读写外部模块寄存器的功能I2C定义:引脚线: 时钟线:SCL 数据线:SDA工作模式: 同步半双工stm32f103c8t6资源 I2C1 I2C2配置: SCL与SDA复用引脚,都配置成开漏输出模式通信速率 标志:100KHZ 高速:400KHZ协议帧格式 指定地址写:起始 7位从机地址1位写位 1位应答位 8位寄存器地址 1位应答位 写入1字节数据 1位应答位 结束 指定地址读:起始 7位从机地址1位写位 1位应答位 8位寄存器地址 1位应答位 起始 7位从机地址1位。

2026-08-14 11:58:03 192

原创 STM32-USART 05

发送接送 双工:可发送,可接送 单工:仅支持发送与接送的一种 全双工:同时进行发送与接收 半双工:同一时刻进行发送或者接收同步异步 同步:时钟 异步:波特率电平特性 单端信号:引脚高低电平相对于GND 差分信号:俩引脚电压差电平标准 定义:数据1和数据0的表达方式,是传输线缆中人为规定的电压与数据的对应关系 标准: TTL电平:+3.3V或+5V表示1,0V表示0 RS232电平:-3~-15V表示1,+3~+15表示0 RS485电平:俩线压差+2~+6V表示1,-2~-6V表示0注意。

2026-08-14 11:56:41 246

原创 C-标识符 03

代码中我们所有自己起的名字,比如变量名,数组名,函数名。

2026-08-10 21:23:10 161

原创 FreeRTOS-软件定时器 03

从指定时刻开始,经过一个指定时间,触发一个超时事件,用户可自定义定时器周期芯片本身自带的定时器模块,硬件定时器的精度很高,每次时间到达之后会自动触发一个中断,用户在中断服务函数中处理信息。

2026-08-10 21:21:18 185

原创 FreeRTOS-线程ISR通信 02

全局变量也能实现任务与任务,中断与任务之间的数据交流数据无保护,导致数据不安全,多个任务同时对改变量操作时,数据易受损任务读写队列都会进入临界区关中断,防止其他任务打断,是个原子操作。

2026-08-09 08:57:38 182

原创 FreeRTOS-线程与ISR 01

v:返回值类型void,无返回值。

2026-08-09 08:56:43 204

原创 C-变量 02

**char[] / char\*** (字符串) | `%s` || **数据类型 (Data Type)** | **占位符** || **unsigned long long** (无符号长长整型) | `%llu` || **hexadecimal** (十六进制无符号整型) | `%x` (小写) / `%X` (大写) |

2026-08-08 18:03:11 197

原创 C-关键字 01

sizeof(arr) = 5 * 4 = 20 // 元素个数 × 单个元素大小。6.枚举:sizeof(enum xxx) 等于int大小(一般 4 字节);sizeof(str) = 4 // a b c + 末尾'\0'结束符。strlen(str) = 3 // 只算有效字符,不含结束符。// a 不会自增,仅编译期判断类型。// 等价于 int *arr,64位下结果为8。sizeof(p) // 8(64位指针)sizeof(arr) // 6(含\0)

2026-08-08 18:02:20 196

原创 C语言面经(更新中)

对于 CPU 来说,它。

2026-06-11 00:41:29 255

原创 1.嵌入式项目后期难维护的原因与改进措施

为了节省资源不断牺牲架构设计,最终导致系统难以维护。验证成本高 → 猜测式修复 → 补丁堆积 → 可维护性下降全局状态缺乏统一管理,最终导致状态耦合和时序问题失控。工具链会过时,文档会失效,知识会流失。记录设计决策,而不仅仅是代码行为。所有状态修改必须经过统一入口。不仅保存源码,更要保存能编译源码的环境。软件不会永生,适时重构和重写是正常工程行为。嵌入式项目难维护的根本原因:资源约束调试成本高状态耦合工具链衰变知识流失应对原则:记录为什么统一状态管理固化开发环境及时重构。

2026-06-07 16:39:41 349

原创 2. 嵌入式软件架构到底在解决什么?

问题解决方案🔴 复杂度失控模块化+分层+接口隔离🔵 硬件变化HAL抽象层🟡 实时性矛盾前后台 / 时间触发 / RTOS🟣 状态爆炸FSM状态机常见小架构:事件驱动+消息队列,RingBuffer,参数中心化。

2026-06-07 16:35:57 508

空空如也

空空如也

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

TA关注的人

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