- 博客(34)
- 收藏
- 关注
原创 C语言模拟面向对象编程方法之多态
C++多态是面向对象编程的核心特性,分为编译时多态(函数重载)和运行时多态(虚函数)。它通过统一接口实现不同行为,提高代码灵活性和可扩展性。文中展示了图形类层次结构,通过虚函数实现多态计算面积和周长。C语言虽不直接支持多态,但可通过函数指针和结构体模拟虚函数表来实现类似效果。多态特性为设计模式如工厂模式奠定基础,是面向对象编程的重要工具。
2025-10-07 16:55:52
644
原创 C语言模拟面向对象编程方法之继承
继承是面向对象编程的三大特性之一,它允许我们依据另一个类来定义一个类,使得创建和维护应用程序变得更加容易。通过继承,子类可以获得父类的属性和方法,同时可以添加自己特有的属性和方法提高代码复用性:子类可以直接使用父类的功能提高代码扩展性:子类可以在父类基础上进行扩展建立类之间的层次关系:体现现实世界中的"is-a"关系公有继承(public):父类的公有和保护成员在子类中保持原有访问级别保护继承(protected):父类的公有和保护成员在子类中变为保护级别。
2025-10-07 16:44:59
922
1
原创 C语言模拟面向对象编程方法之封装
封装是面向对象编程的三大特性之一,它将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互将属性和行为作为一个整体,表现生活中的事物将属性和行为加以权限控制将所有成员属性设置为私有,可以自己控制读写权限对于写权限,我们可以检测数据的有效性// stm32f4xx_hal_gpio.h - 公共接口/*!< 指定要配置的GPIO引脚 *//*!< 指定GPIO引脚的操作模式 *//*!< 指定GPIO引脚的上拉/下拉 *//*!
2025-10-07 16:34:35
641
原创 C语言模拟面向对象编程方法之this指针
在嵌入式开发领域,使用C语言模拟面向对象编程非常普遍。本文介绍了如何使用C语言模拟面向对象C++中的this指针,并搭配实际嵌入式开发应用实际使用案例
2025-10-04 17:08:10
596
原创 ARM架构与常用ARM汇编指令介绍
Q:为什么需要学习汇编语言?A:C语言->编译器->机器码(汇编就是机器码的注释)展开能力,C语言与汇编的后沟就是编译器,C语言是高级语言编程工具,汇编语言是结果判断结果是否符合预期?学会看反汇编如何控制结果符合预期?学会一定的C语言语法以及编译器的工作特性编译器往往会根据他们的想法对我们的程序作出一定的优化,一般情况下这个优化是不会出什么问题的,但是一旦优化结果图理我们预期我们需要找出这个其中的问题原因就需要学习一定的的汇编语言,
2025-09-20 11:50:53
962
原创 STM32CubeMX提供的FreeRTOS接口抽象封装名与原生FreeRTOS函数名对照
详细介绍了STM32CubeMX提供的FreeRTOS接口抽象封装名与原生FreeRTOS函数名对照
2025-08-25 11:45:48
1055
原创 嵌入式系统中mcu寄存器分类划分
在32位单片机(尤其是基于ARM Cortex-M系列内核的)中,寄存器的种类可以按照其“行为模式”和“功能”来进行分类。
2025-08-23 11:20:11
1000
原创 分散加载文件与attribute关键字使用说明
详细讲解在 ARM 编译器(尤其是 ARM Compiler 5 和 6,以及基于 Clang 的版本)的分散加载(Scatter Loading)文件中,如何使用 attribute 语法指定变量函数C文件的链接地址。
2025-08-21 20:58:25
787
原创 Keil 微库(MicroLib)深度解析
Keil 微库是 ARM 公司专门为嵌入式系统设计的高度优化的精简版 C 标准库,相比完整标准库,它具有以下核心优势,但是同时它会带来的工程代码对编译器的耦合性
2025-08-14 10:28:41
1084
原创 位置无关码(PIC)详解
位置无关码(Position-Independent Code, PIC)是指编译后的机器代码在内存中任意地址加载执行时,无需修改内部地址引用仍能正确运行。
2025-08-12 10:58:23
532
原创 STM32Cubemax配置串口----解析hal库串口应用的所有配置与代码说明
STM32Cubemax配置串口----解析hal库串口应用的所有配置与代码说明,包括hal库接收中断,空闲中断,DMA空闲中断,阻塞式接收的配置讲解与代码解读
2025-08-04 16:41:03
925
原创 STM32cubemax常用配置界面介绍
选项作用推荐方案Debug选择调试方式低功耗唤醒使能按需启用HAL_Delay()时钟源SysTick选项作用推荐方案主系统时钟源RTC时钟源RTC应用启用时钟输出功能按需启用I2S外部时钟I2S音频应用启用模块推荐配置库文件管理文件生成启用独立外设文件 + Keep User CodeHAL设置启用Free pins as analog + Enable Full Assert用户脚本默认不配置代码模板默认模板。
2025-08-03 21:27:08
750
原创 单片机启动文件介绍
中断向量表定义导出向量表起始地址导出向量表结束地址导出向量表大小;内核异常中断 --------------------------------------------------0x00: 主堆栈指针(MSP初始值)0x04: 复位中断0x08: 不可屏蔽中断0x0C: 硬件错误中断0x10: 内存管理错误0x14: 总线错误中断0x18: 用法错误中断DCD 0;0x1C: 保留DCD 0;0x20: 保留DCD 0;0x24: 保留DCD 0;0x28: 保留。
2025-07-28 10:38:31
452
原创 CMbacktrace使用与原理说明
HardFault 是 ARM Cortex-M 系列处理器中的一种异常类型,属于硬件故障异常。当系统发生严重错误(如非法内存访问、未定义指令执行、除零操作等)且无法被其他异常处理程序捕获时,会触发 HardFault。它是优先级最高的异常之一,通常用于调试和错误恢复。
2025-07-24 20:24:04
1458
原创 新建一个单片机基础工程——芯片Flash烧录算法问题解决
选择对应的芯片设备,如果没有需要去芯片供应官网或者ARM官网,或者淘宝开发板客服。eg:GD32G553 Cortex—M33内核不支持AC5,仅支持AC6。有些芯片内核比较新,老的编译器版本可能不支持。keil提供组件版本说明,一般不修改。添加进keil工程与与对应工程文件夹。
2025-07-20 20:37:33
349
原创 移植CMBacktrace使用记录——解决AC6编译器报错
这是宏定义分支选项目的,与编译器版本有关分支逻辑说明编译器版本编译器6无宏定义分支对应。
2025-07-16 21:52:19
345
原创 PID调试过程中的问题
在调试过程中我将KI初始化为0.01,这个时候发现增量式PID不再存在积分分量,我检查代码发现逻辑没有问题,最后发现,我输入的实际值与理想值差值刚好为·12,12*0.01<1,赋值给Speed.IOut数据类型为整形刚好舍去了,所以积分部分一直是0.,最后警醒自己当调试PID输出数据与理想的偏差过大时,可以考虑数据类型的问题,也警醒了我下次编写PID代码时数据类型最好考虑清楚,移植代码时最容易·出现这种情况。今天在调试PID的过程中,出现了一个问题,本次调试的是增量式PID,先看数据定义与代码。
2024-06-11 20:08:57
262
原创 FreeRTOS列表与列表项的介绍
第五行的值就是链表的内容了,在这里是任务,所以说存放的就是任务控制块,笔者在这里认为他应该和任务句柄类似。每个任务都有自己的信息和特点,而任务句柄数据结构本质其实是一个指针,它指向这个任务包含任务特点的首地址,在我们使用创建任务时,传入创建任务函数的其实是任务句柄的地址,说明要改变任务句柄的指向,即给这个指针赋值。我们在之前的任务分类中介绍过任务的分类,挂起,运行,阻塞,就绪这四个任务状态。采用的就是列表,说是说列表,其实采用的就是数据结构中带头双向循环链表,不过这个哨兵节点变成尾节点。
2024-01-28 13:29:30
474
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅