自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 STM32基于CubeMX的HAL库开发

T = (分频值*重装载值)/独立看门狗时钟频率。这里T = 128*1250 / 40,000 = 4 s。独立看门狗的时钟频率可以通过时钟图查看。

2025-01-21 16:13:51 992

原创 嵌入式面试八股文总结(长期更新)

交叉编译指的是在一个平台上编译另一个平台的可执行程序。在Ubuntu上使用交叉编译工具链将.c转化为可执行程序再烧录到ARM开发板上。暂停当前任务,去处理更加紧急的任务。当中断发生时,处理器会停止当前执行的代码,保持现场,并跳转到中断处理函数中去执行,当执行完成后又返回现场继续执行。概念的简单理解:看门狗定时器是一个硬件计计时器,要求系统在规定时间内定期对其进行复位(喂狗),如果没有喂狗,定时器溢出后会触发预定的响应,例如系统复位或重启。作用:防止系统长时间卡死。提高系统可靠性。

2024-07-06 13:21:59 16744 5

原创 C语言typedef与函数指针

本文深入解析C语言中typedef和函数指针的核心概念与应用。首先阐明typedef的本质是创建类型别名,区别于#define的文本替换;其次详解函数指针的声明语法及调用方式。重点展示两者结合如何简化复杂声明,并提供了回调函数、命令模式、策略模式等实际应用场景。文章还包含高级技巧(复杂声明解析、类型安全实践)和常见陷阱(类型匹配、空指针检查),最后通过可扩展模块系统案例演示典型用法。掌握这些技术对理解复杂C代码和设计灵活系统架构至关重要。

2025-11-20 16:02:19 574

原创 C语言复杂类型声明完全解析:从右左原则到工程实践

右左原则变量名 → 向右看 → 向左看 → [重复直到结束] → 得到完整类型从变量名开始解析先向右边看,理解最近的修饰符再向左边看,理解基本类型括号具有最高优先级,遇到括号先解析括号内内容通过右左原则的系统性学习,我们已经掌握了破解任何C语言复杂类型声明的能力。基本原则:从变量名开始,先右后左,括号优先核心要素:理解(指针)、[](数组)、()(函数)的优先级和结合性实践技巧:使用typedef分解复杂声明,用sizeof验证理解工程应用:在回调、命令模式等场景中灵活运用。

2025-11-20 14:57:07 316

原创 嵌入式操作系统进阶C语言

本文深入解析了C语言编译流程、宏应用、内存管理及高级编程技巧。主要内容包括:1.编译四阶段(预处理、编译、汇编、链接)的详细机制及工程实践;2.宏的高级用法与陷阱规避,如条件编译、多语句宏编写等;3.数据类型关键字的底层原理,包括sizeof、char特性及内存对齐;4.函数本质、参数传递机制及面向对象实现方法;5.内存空间分布、操作权限及指针高级应用。通过大量嵌入式开发实例,揭示了C语言底层机制与高效编程的关键技术。

2025-11-20 00:11:58 740

原创 GDB调试指南:从入门到精通Linux程序调试

在程序开发过程中,几乎每个开发者都会遇到程序运行结果与预期不符的情况。这些错误可能简单如变量赋值错误,也可能复杂如多线程竞争条件。而​ 作为Linux环境下最强大的调试工具,能够帮助开发者深入程序内部,观察运行状态,快速定位问题根源。本文将带你系统学习GDB的使用,从基本概念到高级技巧,从简单程序到复杂系统调试,逐步掌握这个强大工具的使用方法。GDB是GNU项目的一部分,是一个功能强大的UNIX/Linux下的命令行调试工具。

2025-11-18 15:49:43 788

原创 Linux驱动开发指南

Linux驱动开发是一个需要持续学习的领域。内核版本在更新,硬件技术在发展,只有不断学习才能保持竞争力。驱动开发的道路虽然充满挑战,但当你看到自己编写的驱动在成千上万的设备上稳定运行时,那种成就感是无与伦比的。希望本文能为你的驱动开发之旅提供清晰的路线图和实用的技术指导。​记住:多动手实践,多看内核源码,多参与社区讨论,这是成长为驱动开发高手的唯一捷径。​​你现在处于驱动开发的哪个阶段?遇到了什么困惑?欢迎在评论区交流!

2025-10-31 17:08:37 1258

原创 嵌入式进阶:C语言内联汇编

本文深入解析嵌入式开发中的内联汇编技术,针对STM32F103C8T6等ARM平台,详细介绍内联汇编的应用场景和实操方法。内容涵盖:内联汇编的必要性(硬件操作、性能优化)、基础语法格式、操作数约束规则,并提供GPIO控制、精确延时、开关中断等实用案例。同时探讨高级技巧(寄存器保护、原子操作)和常见调试方法,对比分析内联汇编与外部汇编的适用场景。强调在保证性能的前提下,应谨慎使用内联汇编并添加详细注释,平衡代码效率与可维护性。

2025-10-18 22:14:50 1141

原创 嵌入式C语言内存优化:从KB到字节的精打细算

根据应用特点设计专用分配器:​TLSF(两级分离拟合)分配器​:适用于实时系统,O(1)时间复杂度,在内存碎片和性能间取得良好平衡。​滑动压缩分配器​:通过移动内存块合并空闲空间,消除碎片,适合生命周期相近的对象。

2025-10-17 23:47:03 676

原创 嵌入式企业面经实战合集(持续更新)

这篇面经实战汇总涵盖了嵌入式开发岗位的核心技术问题,主要包括以下内容: C语言基础:sizeof操作、指针与数组、结构体与联合体、static和volatile关键字的作用及存储位置。 单片机外设:GPIO工作模式、ADC采样、串口/UART/I2C/SPI通信协议及常见问题排查。 操作系统:FreeRTOS任务调度机制、内存管理、中断处理流程及多任务编程注意事项。 项目经验:传感器数据处理、BLE协议栈、嵌入式系统设计优化等实际开发场景。 面试技巧:自我介绍、项目介绍、职业规划等软性问题的应对策略。 文章

2025-10-10 23:57:33 1166

原创 基于AT32的RT-Thread移植

修改board.c中的rt_hw_board_init。如果需要使用RT-Thread的shell命令行调试工具,还需要修改uart_init(void)、rt_hw_console_output、rt_hw_console_getchar这几个函数。SVC_Handler、PendSV_Handler(void)、SysTick_Handler(void)、HardFault_Handler(void),因为这些函数RT-Thread已经帮我们实现好了。把RTT源码添加进keil工程。

2025-10-09 23:21:25 477

原创 基于GD32的RT-Thread移植

注释掉GD32的SVC_Handler、PendSV_Handler(void)、SysTick_Handler(void)、HardFault_Handler(void)直接用CubeMX生成的RT-Thread_Nano源码,复制到自己的GD32F303工程内里。修改board.c中的rt_hw_board_init。把RTT源码添加进keil工程。

2025-10-08 16:47:29 290

原创 基于STM32的RT-Thread移植

本文介绍了在STM32F103ZET6平台上移植RT-Thread Nano的详细步骤。主要内容包括:1)精简源码文件,保留M3架构相关文件;2)通过CubeMX配置硬件(RCC、串口、NVIC等),但不使用其FreeRTOS功能;3)修改工程配置,添加RT-Thread头文件并调整中断处理;4)编写线程控制代码实现LED闪烁功能;5)提供极简移植方案,建议保留必要文件并修改board.c和架构相关文件。整个移植过程注重精简和适配,最终实现了预期的LED任务执行效果。

2025-10-08 00:28:06 351

原创 基于32位MCU的FreeRTOS的移植

本文详细介绍了FreeRTOS在STM32F103ZET6平台上的移植过程。主要包括:1)下载并精简FreeRTOS源码,仅保留必要的Source和portable文件;2)配置Keil工程,添加头文件路径和源码分组;3)修改关键配置文件,包括FreeRTOSConfig.h和中断处理文件;4)通过CubeMX进行基础配置(RCC、串口等);5)编写测试代码,创建两个任务分别控制LED闪烁和串口输出。文章提供了完整的移植步骤和关键代码片段,展示了FreeRTOS的基本任务调度功能,为嵌入式开发者提供了实用的

2025-10-07 13:47:25 216

原创 32 位 MCU LCD 开发完全指南:从硬件到实战的进阶之路

入门阶段(1~2 周):选 “STM32F1 + 2.4 寸 ILI9341 LCD(并行接口)”,按 “硬件连接→FSMC 初始化→LCD 初始化→画点 / 显示文字” 的流程,实现基本显示功能。进阶阶段(2~4 周):移植中文子库,实现图片显示;集成 XPT2046 触摸芯片,实现简单交互;学习 LVGL 的基础使用,搭建包含按钮、进度条的界面。实战阶段(1~2 月):完成一个完整项目(如 “温湿度监控器”),包含 LCD 显示(温湿度、时间)、触摸控制(参数设置)、GUI 界面(菜单切换)。

2025-10-06 23:51:49 719

原创 基于32位MCU的LVGL移植

用编辑器打开,找到对应位置代码,直接替换,在适当修改即可。lvgl文件夹内容就是我们精简后的LVGL源码。直接修改keil工程文件的xml格式,添加到<Group>组中去。这里使用的是8.2版本。往keil工程中添加文件。文件夹,仅保留其中的。文件,修改条件编译指令。将该宏定义从0改为1。添加头文件包含目录。

2025-10-06 15:55:57 380

原创 LVGL 开发指南:从入门到精通的嵌入式 GUI 实战心法

对象创建与布局管理(样式定制(标题大字体)事件处理与数据传递(按钮回调更新多个控件)控件交互(进度条与数值标签同步)将此项目移植到硬件时,只需将中的随机数替换为实际传感器读取逻辑即可。作为资深开发者,我常说:"LVGL 的 ' 术' 是 API,' 道 ' 是资源受限下的优雅妥协。对新手:先掌握 "对象 - 样式 - 事件" 三板斧,用 PC 仿真做出可交互的界面,再深究硬件适配。记住,是 LVGL 的 "心脏",对象树是内存管理的 "保险栓"。

2025-10-05 23:52:15 1602

原创 Qt 开发修炼指南:从入门到通透的实战心法

这些问题我踩过,团队新人也常犯。记住它们,能让你少熬无数个通宵。Qt 的 "术" 是控件、函数、API,查文档就能学会;但 Qt 的 "道" 是信号与槽的解耦思想、对象树的内存管理哲学、元对象系统的灵活性。对新手来说,先掌握 "术"—— 用 Qt Creator 拖控件、写信号与槽,做出能跑的程序,建立信心;再理解 "道"—— 思考为什么 Qt 要这么设计,对比 C 语言的实现方式,体会其优越性。

2025-10-05 23:10:42 876

原创 从 C 到 C++:用 C 语言思维理解面向对象四大特性

将数据和操作数据的方法捆绑在一起,隐藏内部细节,只暴露必要的接口。就像一台电视机,我们不需要知道内部电路如何工作,只需通过按钮(接口)来操作。继承允许我们创建新类(子类)来复用已有类(父类)的代码,子类可以继承父类的属性和方法,并添加自己的特性。就像 "学生" 和 "老师" 都继承了 "人" 的属性(姓名、年龄),但又有各自的特殊属性(学生有分数,老师有工资)。同一操作作用于不同对象,会产生不同的结果。比如 "动物叫" 这个操作,狗会 "汪汪叫",猫会 "喵喵叫"。

2025-10-05 22:02:37 858

原创 ESP32基于esp32 idf开发

每一层目录都有一个CMakeLists.txt配置文件存在。每当添加一个目录时都有对CMakeLIsts.txt文件修改。

2025-10-01 12:19:24 280

原创 HardFault_Handler处理Bug

如果LR寄存器的0xFFFFFFF9,则去查看MSP的地址。然后在MSP地址向下数6个的long地址。0x08开头的就是发生错误的程序地址。HardFault发生时,硬件会自动把一些寄存器值推入栈,我们可以根据栈中保留的数值还原“犯罪现场“HardFault 的本质是 “内核执行过程中检测到异常状态”,具体原因多与。重点关注LR和PC寄存器.日后功力深厚了再更新。

2025-09-29 00:09:26 392

原创 基于MCU的文件系统(持续更新中)

以后有机会就更新。

2025-09-27 16:11:19 419

原创 ZN‘Shell的移植和使用(基于CubeMX+FreeRTOS)

取消生成部分IRQ_handle。因为这一部分已经由FreeRTOS替我们实现。我这里选择放在uart.c中。选择CMSIS_V1版本。

2025-09-24 15:27:54 324

原创 EasyLogger移植(基于CubeMX+FreeRTOS)

注释掉以下宏定义。

2025-09-23 22:35:27 865

原创 嵌入式项目团队开发架构(基于FreeRTOS)

基于一个简单的智能家居项目。

2025-09-23 00:15:14 277

原创 零基础入门Cmake

CMake 是一个跨平台的构建系统生成工具。它本身不直接编译代码,而是通过读取开发者编写的配置文件,自动生成适用于不同平台的构建脚本(如 Linux 的 Makefile、Windows 的 Visual Studio 项目、macOS 的 Xcode 项目等)。

2025-09-10 13:15:36 407

原创 零基础入门makefile

Makefile 是一种用于自动化构建程序的文本文件,它定义了一系列规则来指定如何编译和链接程序。# 定义变量变量名 = 值# 使用变量$(变量名)$@:表示规则中的目标$^:表示规则中的所有依赖$<:表示规则中的第一个依赖CC:默认 C 编译器(通常是 gcc)CFLAGS:C 编译器的选项。

2025-09-10 13:10:30 669

原创 零基础入门AutoSar中的ARXML文件

AUTOSAR(Automotive Open System Architecture)即汽车开放系统架构,是由各大汽车制造商、零部件供应商及软件系统公司联合推出的一种开放式汽车电子软件架构标准。简单来说,AUTOSAR 就像是汽车电子系统的 "通用语言" 和 "设计规范",它让不同厂商的汽车电子组件可以互相兼容,降低了开发难度,提高了软件复用率。ARXML(AUTOSAR XML)是 AUTOSAR 标准规定的配置文件格式,基于 XML(可扩展标记语言)制定。

2025-08-31 23:25:58 1732

原创 git的子模块讲解

它让 “数据图表模板” 成为一个独立的仓库(子模块),3 篇报告(主项目)只需 “链接” 到这个模板的特定版本。假设你在写 3 篇不同的报告(A 报告、B 报告、C 报告),这 3 篇报告都需要用到公司统一的 “数据图表模板”。一个电商平台拆成 “商品模块”“订单模块”“支付模块”,每个模块由不同团队开发(独立仓库),主项目通过子模块把它们组合起来,团队间代码互不干扰。比如公司的 “用户登录组件” 被 10 个业务系统使用,把组件做成子模块,改一次组件,各系统可按需更新,避免 10 个系统重复改代码。

2025-08-31 15:16:53 305

原创 Python脚本入门教程

2025-08-30 11:54:16 128

原创 零基础json入门教程(基于vscode的json配置文件)

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,长得像键值对的集合,用途是存储和传递数据。在 VS Code 中,它常被用来写配置文件(比如调试配置、插件配置等),语法简单且易于阅读。核心特点"键": "值"键和字符串值必须用双引号"")包裹(单引号会报错)用逗号()分隔多个键值对(最后一个键值对后不能加逗号)支持嵌套(对象里放对象 / 数组,数组里放对象 / 值)

2025-08-30 00:11:14 698

原创 SConscript 脚本入门教程

SCons 是一个现代化的构建工具,用于自动化软件构建过程,类似于 Make 但功能更强大、语法更简洁。SConstruct:是 SCons 的主配置文件,通常在项目根目录,相当于 MakefileSConscript:是子配置文件,用于组织大型项目,可被 SConstruct 或其他 SConscript 包含构建过程:将源代码转换为可执行文件的过程(编译、链接等)SCons 使用 Python 语法,因此如果你熟悉 Python,学习 SCons 会更容易。

2025-08-19 23:09:25 1083

原创 新手快速熟悉.map文件

map。

2025-08-19 17:37:28 908

原创 RISC-V汇编入门教程

汇编语言是直接对应 CPU 指令的低级编程语言,每一行汇编代码基本对应一条 CPU 能直接执行的指令。相比 C 语言等高级语言,汇编更贴近硬件,能直接操作 CPU 的寄存器、内存和硬件设备。RISC-V 是一种开源的精简指令集架构(类似 ARM、x86),NA900 是基于 RISC-V 架构的处理器,我们的教学将围绕 RISC-V 的基础指令展开。

2025-08-17 23:53:42 612

原创 ARM汇编代码入门教程

一种主流嵌入式处理器架构(手机、汽车芯片、物联网设备常用),我们以 32 位 ARMv7 架构为例(Cortex-M/R 系列通用)。类比:寄存器就像厨房的 “调料罐”,常用的调料(数据)放在罐子里,炒菜(运算)时直接拿,比从仓库(内存)取快得多。pc(r15):程序计数器(存下一条要执行的指令地址,类似 “当前页码”)。lr(r14):链接寄存器(存函数返回地址,类似 “回家的路牌”);sp(r13):栈指针(指向当前栈顶,类似 “临时工作台”);r0-r3:传递函数参数 / 返回值(类似快递盒);

2025-08-17 21:45:17 1158

原创 Autosar Os新手入门

AUTOSAR OS 按照功能职责可划分为,各模块相互协作,共同实现实时操作系统的完整功能。这些模块在 AUTOSAR 规范中被明确定义,确保不同厂商的 OS 实现具备一致性和兼容性。

2025-08-16 23:49:44 554

原创 RT-Thread标准驱动程序框架

持续更新。

2025-08-04 23:35:52 135

原创 于振南高手C资料笔记

有空就填坑。

2025-07-04 19:25:49 309

原创 RTOS进阶

代码的级别有两种,分别是特权级和用户级。我们通俗点理解,就是特权级代码能做的事情多,因为它有特权,没有限制;而用户级代码,因为少了特权,有些特权级代码能做的事情,它做不了。特权级代码:可以访问所有的地址。用户级代码:某些寄存器不能访问。比如NVIC寄存器和SCB相关寄存器。(针对Cortex-M3、M4)单片机上电后的代码默认就是特权级别。我们平时写的裸机代码,全部默认就是特权级代码,这就是我们上电后就可以进行中断相关配置的原因。

2025-06-27 17:00:09 280 1

原创 适合有C基础后快速上手C++

C++

2025-06-11 16:56:38 733

空空如也

空空如也

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

TA关注的人

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