- 博客(86)
- 收藏
- 关注
原创 TinyXML2的一些用法
功能:获取当前元素的下一个同级元素。功能:获取元素的第一个子元素。返回值:指向文本内容的字符串指针,如果没有文本内容返回 nullptr。返回值:指向下一个同级元素的指针,如果没有找到返回 nullptr。返回值:指向属性值的字符串指针,如果属性不存在返回 nullptr。返回值:指向第一个子元素的指针,如果没有找到返回 nullptr。返回值:指向根元素的指针,如果没有根元素返回 nullptr。参数:name 是可选参数,表示同级元素的名称。参数:name 是可选参数,表示子元素的名称。
2024-12-02 22:44:31
1387
原创 文件比较和文件流
seekg() 函数用于设置输入流的读取位置,属于 istream 类。peek() 函数用于查看输入流中的下一个字符,但不从流中提取它。diff 的输出结果以 行号 和 更改说明 表示。
2024-12-01 22:38:37
1467
原创 UART协议
异步通信:UART不需要时钟信号来同步发送和接收设备,而是通过预定的波特率来控制数据传输速度。全双工通信:UART支持同时发送和接收数据。UART通信通常主要依赖三根线。
2024-10-19 17:32:40
1152
原创 I2C和SPI协议
I²C 和 SPI 都是常用的串行通信协议。I²C 通过两条线(SDA 和 SCL)进行双向通信,支持多主多从架构,具有总线仲裁机制,常用于短距离设备间的数据传输。SPI 使用多条线(MOSI、MISO、SCK、CS),支持全双工高速通信,适合需要快速通信的场景,如存储器和显示器。
2024-10-19 00:19:50
1125
原创 Linux下CMake入门
CMake 的一个优势在于它能够支持多平台和多编译器。你可以通过 CMake 生成 Visual Studio、Xcode 工程文件,或者为其他平台生成 Makefile。CMake 的基本流程。
2024-10-13 23:42:26
644
原创 Linux下GCC入门
交叉编译指在一个平台上编译生成可以在另一个平台上运行的程序。GCC 可以进行交叉编译,尤其在嵌入式开发中非常常用。在编译大型项目时,可以使用 -j 选项来加速编译过程。该选项指定并行编译时使用的线程数。
2024-10-13 20:57:51
1085
原创 驱动知识点归纳一
内核模块是指可以动态加载到操作系统内核中的代码块,通常是为了扩展内核的功能而使用的。它们是Linux内核的重要组成部分,允许用户在不需要重新编译整个内核的情况下,向内核添加功能,或者卸载不再需要的功能。用途:设备驱动程序,文件系统支持,网络协议栈设备注册 → 设备添加到设备列表中。驱动注册 → 驱动程序添加到驱动列表中。设备与驱动匹配 → 匹配成功后,调用 probe 函数进行设备初始化。设备驱动加载完成 → 设备驱动开始与硬件设备交互。
2024-10-12 14:56:53
672
原创 ARM综合编程--LED--ADC--UART--中断--PWM综合示例按键和旋钮控制音乐
包括歌曲和音符数组。定义控制LED灯和按键的GPIO地址(这里你需要提供准确的硬件位置信息)。定义用于ADC旋钮调节音量的变量。// 全局变量定义// 两只老虎// 生日快乐// abcdefg// 祝你平安// 音符对应的频率表// 当前播放的歌曲索引// 当前音符位置// LED 和按键的 GPIO 地址(根据你的实际硬件位置调整)volatile// 全局变量定义 char song0 [ ] = {// 两只老虎 char song1 [ ] = {
2024-10-11 14:56:51
638
原创 ARM编程四--->中断编写流程
all:# 使用交叉编译器编译 start.S 汇编文件,生成目标文件 start.o。# -fno-builtin: 禁用内置函数,避免使用 GCC 的内置库函数。# -nostdinc: 不使用标准的 include 头文件,适合裸机编程。# -c: 只编译,不链接。# -o start.o: 输出目标文件名为 start.o。# 使用交叉编译器编译 main.c C 源文件,生成目标文件 main.o。# 其参数与前一个命令相同,只是编译的文件不同(C 文件而非汇编文件)。
2024-10-11 10:43:31
1115
原创 ARM知识点三和串口代码的编写流程
串口(Serial)是一种常见的通信方式,它通过串行传输数据,即一次一位地发送或接收数据。- 外设板: 外设板通常包含了许多外部设备,这些设备通过各种接口与核心板的 CPU 连接,用于扩展系统的功能。str 指令:CPU 使用 str(store register)指令,将寄存器的数据写回存储器或外设的寄存器中。- 核心板:能让CPU正常运行的最小系统,主要组件:CPU,flash,RAM,电源,串口,晶振。- 核心板和外设板通过接口(如 GPIO、I2C、SPI、UART 等)进行连接和通信。
2024-10-11 00:15:28
1137
原创 系统移植四和制作RAMDisk 文件系统
制作 RAMDisk 文件系统:通过 dd 命令创建 RAMDisk 镜像文件,并格式化为 ext2 文件系统。将已测试好的根文件系统复制到 RAMDisk 中,并压缩镜像为 ramdisk.gz。配置内核支持 RAMDisk:使用 make menuconfig 配置内核以支持 RAMDisk,并设置默认的 RAM 磁盘大小。重新编译内核并将内核和 RAMDisk 镜像上传至 /tftpboot,方便后续通过 U-Boot 启动。
2024-10-10 16:19:29
1687
原创 系统移植三
系统启动:系统加载内核,内核初始化硬件设备,并启动第一个用户进程 init。读取 inittab 文件:init 进程读取 /etc/inittab 文件,执行里面定义的初始化任务。执行 rcS 脚本:init 进程执行 /etc/init.d/rcS 脚本,完成系统的初始化操作,包括挂载文件系统、启动关键服务等。用户程序启动:通过将自定义程序加入 /etc/init.d/rcS 脚本的尾部,系统在启动时会自动运行该程序。
2024-10-10 15:01:45
1182
原创 系统移植二和网卡移植实验和私有驱动LED的移植
驱动文件的集成:通过修改 Kconfig 和 Makefile 文件,将驱动集成到内核中,并在 menuconfig 中显示配置项。驱动的编译方式:可以选择将驱动编译到内核中(内建)或编译为模块(动态加载)。模块的灵活性更高,便于在需要时加载。测试程序的编译与执行:通过交叉编译工具编译应用程序,并将其放置到目标文件系统中,用于与驱动通信。设备节点:通过 mknod 创建字符设备节点,作为应用程序与驱动的通信接口。
2024-10-10 13:12:58
767
原创 系统移植一
U-Boot(Universal Bootloader)是一款广泛用于嵌入式系统中的开源 Bootloader,支持多种 CPU 架构,如 ARM、PowerPC、x86、MIPS 等。它体积小、功能强大,广泛用于嵌入式系统启动和调试。U-Boot 与其他 Bootloader 的对比:BIOS(通常用于 PC):大约 300MB,功能强大,带有图形用户界面。Recovery 模式(用于 Android):大约 3.5MB,功能一般,界面较为简单。
2024-10-10 00:47:48
1403
原创 ARM硬件知识补充
保护电路:在电路中,二极管可以作为保护元件,例如用于防止反向电压损坏敏感元件。常见的有续流二极管,它用于保护感性负载(如继电器或电机)中的电子元件,防止反向感应电动势造成的损坏。三极管还具有稳压功能,可以用于稳定电压。通过调整三极管的工作状态,可以使电路的输出电压保持稳定。单向导通:二极管具有正向导通和反向截止的特性,电流只能从正极(阳极)流向负极(阴极),因此它可以用于防止电流逆向流动,保护电路。稳压:**稳压二极管(齐纳二极管)**在反向击穿时,可以维持恒定的电压输出,用于电源稳压。
2024-09-29 17:57:00
780
原创 Linux下驱动开发实例
它是一种 6 轴运动传感器,能够同时测量设备的加速度和角速度,因此广泛应用于姿态检测、航向控制、运动追踪等领域。这个驱动程序是一个用于 Linux 内核的简单平台设备驱动,目的是控制 GPIO(通用输入输出)引脚上的设备,比如一个 LED。它的功能主要包括初始化设备、配置 GPIO 引脚、中断处理,以及清理和释放资源。代码实现了一个 MPU6050 I2C 设备的 Linux 驱动程序,用于与 MPU6050 加速度计和陀螺仪传感器进行通信。Linux I2C 核心 API。
2024-09-29 17:24:20
1875
原创 Linux下的驱动开发二
用于全局管理驱动程序的状态和资源。在驱动开发中,有时需要一个全局的数据结构来保存设备的状态、驱动配置、缓存、锁等信息,这样不同的驱动程序函数可以通过该结构体访问和修改共享的资源。作用统一管理驱动状态: 全局结构体通常保存驱动程序的各种状态信息。例如,设备的注册信息、分配的内存、硬件寄存器映射等都可以保存在这个结构体中。共享资源: 驱动程序通常会有多个函数被内核调用,比如初始化函数、读写函数、中断处理函数等。使用全局结构体,可以让这些函数方便地共享和访问同样的数据或资源。
2024-09-27 16:55:18
1139
原创 Linux下的驱动开发一
模块许可证声明(MODULE_LICENSE):指定模块的许可证类型,通常为"GPL"(GNU General Public License),表明模块可以与内核兼容,否则内核可能拒绝加载非GPL的模块。模块初始化函数(module_init):这是内核加载模块时调用的函数,用来初始化模块,注册设备驱动或其他功能。通常通过module_init()宏指定初始化函数。模块退出函数(module_exit):这是在卸载模块时调用的函数,用于清理资源、注销设备驱动等。
2024-09-27 12:59:57
1330
原创 面试知识点总结篇四
组成,每个字节由两个十六进制数字(0-9,A-F)表示,共有12个十六进制数字,如06-EA-56-3B-4F-4D。32位和64位是常见的字长,64位系统能够处理更大的数据量和内存地址。为网络层提供服务:无确认的无连接服务、有确认的无连接服务、有确认的面向连接服务。主要功能:端到端通信、复用和分用、差错检测、流量控制、拥塞控制(仅限TCP)端口号:端口号长度为16bit,能够表示65536(216)个不同的端口号。构成超网:将多个子网聚合成一个较大的子网,叫做构成超网,或路由聚合。码分多址(CDMA)
2024-09-25 17:44:49
1109
原创 面试知识点总结篇二
临界区是指在并发编程中,多个线程或进程访问共享资源时,可能导致数据不一致的代码区域。由于这些资源(如变量、数据结构或设备)只能被一个线程或进程在同一时间安全地访问,因此临界区需要通过同步机制来控制访问。
2024-09-23 21:16:30
1018
原创 面试知识点总结篇一
运算符重载(Operator Overloading)是面向对象编程中的一种技术,它允许程序员重新定义或扩展已有的运算符(如 +、-、*、/ 等)在自定义类或对象上的行为。public:// 重载加法运算符(+)// 使用重载的 + 运算符// 输出 4 + 6ireturn 0;嵌入式系统是一种专门为执行特定任务或功能设计的计算机系统,通常嵌入到更大的设备或系统中。嵌入式系统的特点包括资源有限、对实时性的要求高、功耗低以及高度定制化。僵尸进程是指一个已经终止但仍然存在。
2024-09-23 15:33:16
2379
原创 STM32使用 :串口的接收与发送
通常将 printf 函数的输出重定向到 UART,这样你可以使用 printf 在终端上输出调试信息。需要实现 __io_putchar 函数来将字符发送到 UART。对USART1模式设置为Asynchronous,即为异步通信方式,当然你也可以在这里设置串口的具体参数。设置RCC的high SPeed CLock的模式为Crystal/Ceramic。UART1挂载到APB2总线上,设置APB2为64MHZ即可。实际上是对__io_putchar的改写。www.mcuisp.com下载即可。
2024-09-11 19:37:00
1151
原创 STM32时钟配置图详解
System Clock Mux:选择系统主时钟(SYSCLK)的源。可以选择HSI、HSE或PLL。图中选用了PLL时钟。RTC(Real-Time Clock):实时时钟,用于时间管理,通常连接在低速时钟(LSI或LSE)上。AHB总线通常用于高速外设和DMA控制器,负责连接核心系统、存储器以及外设。CRC:循环冗余校验(CRC)计算单元,用于数据完整性校验。
2024-09-10 20:01:48
1512
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人