- 博客(44)
- 收藏
- 关注
原创 C语言可变参数(va_list、va_start、va_end、va_arg)
在C语言中,va_list、va_start、va_end、va_arg这四个宏用于处理可变参数函数,它们构成了C语言可变参数列表的标准实现机制。必须按顺序访问:使用 va_arg 时必须按照参数传递的顺序访问。last_fixed_param:函数中最后一个固定参数的名称。必须配对使用:va_start 和 va_end 必须成对出现。类型匹配:va_arg 中指定的类型必须与实际参数类型一致。作用: 初始化可变参数列表指针,使其指向第一个可变参数。ap:要初始化的 va_list 变量。
2026-03-21 17:08:04
191
原创 【rt-thread】点灯实验和按键输入实验
本文介绍了基于RT-Thread操作系统在STM32F407开发板上实现LED控制和按键检测的方法。首先通过RT-Thread Studio创建工程,配置GPIO引脚(PF9)控制LED灯闪烁。在解决版本兼容问题后,成功实现了LED周期性闪烁功能。接着扩展实现了中断方式的按键检测,通过PE2引脚检测按键按下事件,在中断处理函数中切换LED状态。实验结果表明,该系统能稳定实现LED控制和按键中断响应功能,展示了RT-Thread在嵌入式开发中的基本应用。
2025-12-21 13:55:58
745
原创 【LwIP源码学习8】netbuf源码分析
摘要:netbuf是lwIP中封装网络数据的结构体,包含IP地址、端口号和pbuf链表。本文介绍了netbuf的核心结构及操作函数,包括内存管理(new/delete/alloc/free)、数据引用(ref)、链表操作(chain/next/first)和数据访问(data)等功能。这些函数实现了对网络缓冲区的创建、释放、数据填充和遍历等基础操作,为网络通信提供了更高层次的抽象接口。
2025-11-16 21:00:22
518
原创 【LwIP源码学习6】UDP部分源码分析
本文对lwip协议栈里UDP部分的源码进行分析。将源码中最关键部分提取出来,梳理UDP部分的设计框架。
2025-05-11 09:32:16
2095
原创 【SoC设计指南 基于Arm Cortex-M】学习笔记2——AHB概述
AHB系统在内核时钟HCLK信号驱动下运行,AHB总线上连接的寄存器访问均在AHB的上升沿触发。AHB总线信号中有一个低电平有效的复位信号HRESETn,即HRESETn信号为低电平时,AHB系统立即复位。典型AHB系统主要信号如下:HREADYOUT信号与HREADY信号在不是同一个信号线。
2024-11-22 18:25:40
871
原创 【Linux驱动开发】裸机点亮LED灯实验
本实验使用的是正点原子I.MX6ULL开发版的汇编LED灯实验,通过GPIO1_IO03引脚输出低电平点亮小灯。通过操作寄存器使GPIO1_IO03输出低电平包括以下几步:1、开启时钟。2、设置IO口的复用功能为gpio。3、对IO进行配置,如上下拉、速度等。4、设置GPIO1_IO03为输出。5、向GPIO1的data register中IO03对应位写入0,使得GPIO1_IO03输出低电平。
2024-11-22 18:23:59
1272
原创 某款扫地机器人源码分析1——指令数据解析处理部分
本文对一款基于stm32实现的扫地机器人程序进行分析。扫地机器人通过串口接收或发送数据,数据包括控制端向扫地机器人发送的控制指令,扫地机器人向控制端反馈当前状态等。
2024-11-19 13:27:32
1583
原创 【SoC设计指南 基于Arm Cortex-M】学习笔记1——AMBA
先进微控制器总线架构(Advanced Microcontroller Bus Architecture,AMBA)是用在arm处理器上的片上总线协议规范集。AMBA总线协议规范集包含AHB、APB、AXI等。AHB:先进高性能总线(Advanced High-performance Bus)APB:先进外设总线(Advanced Peripheral Bus)AXI:先进可扩展接口(Advanced eXtensible Interface)
2024-11-10 11:32:17
663
原创 stm32以太网接口:MII和RMII
MII和RMII就是stm32与PHY芯片之间的通信接口,类似于I2C、UART等。stm32以太网模块有专用的DMA控制器,通过AHB接口将以太网内核和存储器相连。数据发送时,先将数据从存储器以DMA传输到TX FIFO中进行缓冲,然后由MAC内核通过MII或RMII接口发送;数据接收时,RX FIFO先通过MII或RMII接收以太网数据帧,再由DMA传输至存储器。
2024-11-10 10:50:12
2347
原创 【开源项目赏析】遥控四旋翼直升机项目——MiniQ
本项目包括遥控器和四旋翼两部分,遥控器是一个安卓app,四旋翼主要包括:蓝牙模块:用于接收遥控器指令。IMU:惯性测量单元(Inertial Measurement Unit),也就是MPU6050,用于获取当前四旋翼状态。电机:通过对其输出PWM信号,控制其转速快慢。
2024-09-02 13:13:36
747
原创 【LwIP源码学习1】LwIP网络接口管理
netif是Lwip抽象出来的网卡,结构体的声明在文件中。Lwip将每个用netif描述的网卡连接成一个链表(单向链表)。以下是在netif.h头文件中定义的一些netif的操作函数操作函数中第一个参数是netif指针,用这种方式达到了C++中类的封装效果,有设计模式中工厂模式的设计思想,也就是该结构体表示对象的数量是不确定的,随时可能变多或者单少,这种情况下可以使用的方式,方便对多个同类对象管理。
2024-08-26 17:15:14
868
原创 【链接、装载与库】动态链接中的延迟绑定(PLT)
动态链接是在运行时将各个模块的代码进行整合,静态链接是在编译时对各个模块的代码进行整合。而运行时整合使得动态链接相对消耗了一些性能,为了减小这点带来的影响,动态链接中引入了延迟绑定(PLT),其基本思想是当函数第一次被用到时才进行绑定(符号查找、重定位等),如果没有用到则不进行绑定,接下来通过一个示例对延迟绑定进行分析。
2024-07-13 14:46:50
1371
原创 Xilinx SDK创建项目时报错“Error generating bsp sources. Please check the SDK Log view for further details.”
Xilinx SDK创建项目时报错“Error generating bsp source. Please check the SDK Log view for further details.”
2024-07-12 13:08:20
1498
原创 【链接、装载与库】动态链接初体验
动态链接基本思想是把程序按照模块拆分成各个相对独立部分,在程序运行时才将他们链接在一起形成一个完整的程序。Linux系统中,动态链接文件以".so"为扩展名,so表示Shared Objects,称为动态共享对象。Windows系统中,动态链接文件以".dll"为扩展名,dll表示Dynamic Linking Library,称为动态链接库。
2024-07-10 15:49:13
533
原创 【Cortex-M3】中断处理时栈空间操作过程分析
中断发生后,压栈行为分两步:第一步:处理器自动压栈“调用者保护寄存器”,顺序为xPSRLRR12R3R2R1R0。第二步:中断服务函数首先压栈LR(这时的LR已经和进入中断前的LR不一样了),然后压栈一些用到的“被调用者保护寄存器”R4-R11。
2024-06-29 11:55:41
2670
2
原创 stm32 485接收数据异常调试过程
stm32f407与传感器通过485总线进行通信,stm32向传感器发送索要数据的指令,传感器本应传回的数据与实际接收到的数据不一致。像是被485芯片修改过一样。
2024-06-13 18:03:05
1701
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅