自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 玳瑁的嵌入式日记---1014(驱动)

随机访问volatile,因此编译器不能对该变量的读写操作进行优化(如缓存到寄存器、重排指令顺序等),必须每次都直接从内存中读取或写入。

2025-10-14 19:42:48 408

原创 玳瑁的嵌入式日记 --------API总结

【代码】玳瑁的嵌入式日记 --------API总结。

2025-10-08 20:18:35 1125

原创 玳瑁的嵌入式日记---0929(ARM--ADC)

ADC 是Analog-to-Digital Converter(模数转换器)的缩写,是一种核心电子器件,作用是将自然界中连续变化的模拟信号(如温度传感器输出的电压、麦克风采集的声音信号、光敏电阻的电流等)转换为计算机 / 数字电路可处理的离散数字信号(即由 0 和 1 组成的二进制代码)。1.ADC概念(1)ADC(Analog-to-Digital Converter):模拟到数字转换器它是一种电子设备或模块,用于将连续变化的模拟信号转换为离散的数字信号。

2025-09-29 19:20:35 699

原创 玳瑁的嵌入式日记---0928(ARM--I2C)

Start信号 → 7位从地址+1位读写位 → 从设备ACK → 8位数据 → ACK(循环) → Stop信号。

2025-09-28 19:12:34 1464

原创 玳瑁的嵌入式日记---0928(ARM--UART)

RS-485 是为解决 RS-232“传输距离近、抗干扰能力弱” 的问题而设计的工业级标准,核心特点是 “差分传输”(通过两根线的电压差定义信号),支持多节点组网(一台主机连接多台从机)。RS-232 是最早普及的串口电气标准,主要用于设备间短距离点对点通信(如早期电脑与调制解调器、打印机的连接),核心特点是 “单端传输”(信号相对于地电平定义)。TTL 串口并非 “正式工业标准”,而是芯片内部或电路板之间短距离串行通信的电气规范(如单片机、FPGA、模块间的通信),核心特点是 “低电压单端传输”。

2025-09-28 09:28:11 834

原创 玳瑁的嵌入式日记---0925(ARM--时钟)

定时器是一种通过对已知频率的时钟信号进行计数,实现定时、延时或事件计数功能的硬件模块或软件机制。在嵌入式系统中,主要以硬件定时器模块形式存在,如 EPIT、GPT 等,是实现精准时序控制的核心组件。PLL(Phase - Locked Loop,锁相环):是一种反馈控制系统,能使输出信号的相位与输入参考信号的相位保持同步(锁定)。作用是将输入的参考时钟信号倍频,产生更高频率且稳定的时钟信号,为系统各模块提供时钟。Prescaler(预分频器):是一种分频电路。

2025-09-25 19:38:18 986

原创 玳瑁的嵌入式日记---0923(ARM)

该脚本典型用于嵌入式系统(如 ARM 架构开发板),通过固定起始地址和规范段布局,确保程序能在指定内存空间正确加载和运行。各段按.text→.rodata→.data→.bss的顺序排列,符合程序执行时的内存使用逻辑(代码→只读数据→已初始化数据→未初始化数据)。使能时钟 → 配置引脚复用 → 设定电气属性 → 配置为输出 → 控制电平高低。代码中通过寄存器操作直接控制硬件,体现了嵌入式开发中 “直接操作底层外设” 的特点。

2025-09-23 20:31:11 868

原创 玳瑁的嵌入式日记---0919(ARM)

CPU的指令集其实就是用指令对计算机实现控制和计算的指令集合。 分复杂指令集和精简指令集。CISC(Complex Instruction Set Computer,复杂指令集计算机)特点:指令系统复杂庞大,指令数目一般多达 200 - 300 条,指令格式多 样化,寻址方式丰富,可直接对存储器进行操作。比如一条 CISC 指令可能完成诸如读取内存数据、进行复杂运算并写回内存等多个操作。优势: 对于一些复杂的任务,一条 CISC 指令就能完成,在高级语言编程中可以减少程序代码行数。

2025-09-19 19:58:20 775

原创 玳瑁的嵌入式日记D33-0908(SQL数据库)

/ 1. 打开数据库printf("打开数据库失败:%s\n", sqlite3_errmsg(db));return -1;// 2. 执行操作(增删改查)// (示例:插入数据)printf("操作失败:%s\n", errmsg);return -1;// 3. 关闭数据库printf("操作成功!\n");return 0;

2025-09-08 18:56:32 702

原创 玳瑁的嵌入式日记D33-0905(IO多路复用)

epoll 是 Linux 特有的 IO 多路复用机制,通过三个核心函数实现高效的事件监听,解决了 select/poll 的性能缺陷。select 是 IO 多路复用的一种实现方式,可在单进程 / 线程中管理多个文件描述符,实现并发服务器。IO 多路复用提供了单线程处理多事件流的高效方案。select 循环服务器(TCP 协议)epoll 的高性能依赖「(O (1) 复杂度)

2025-09-05 20:50:08 1198

原创 玳瑁的嵌入式日记D33-0904(协议头)

客户端和服务器先 “握手”,确认双方能正常通信,建立稳定的数据传输通道(比如:“我要连你”→“我收到了,你连吧”→“好的,连好了”)。服务器看懂 “需求” 后,处理并返回结果:要么给所需数据(如 HTML 页面、图片),要么告诉客户端结果(如 “找到了”“没找到”)。数据传完,双方 “挥手” 断开连接,释放资源(比如:“我用完了,关吧”→“知道了,等我收尾”→“我也收尾完了,关”→“好的,关了”)。(若用 “长连接”,第 4 步会延迟,后续请求可直接复用连接,不用重复握手)

2025-09-04 19:45:34 293

原创 玳瑁的嵌入式日记D32-0903(网络编程)

既然粘包的根源是 “接收方无法识别数据边界”,解决方案的核心就是在应用层协议中明确约定 “如何划分一个完整的数据包”

2025-09-03 18:41:43 1154

原创 玳瑁的嵌入式日记D31-0902(网络编程)

【代码】玳瑁的嵌入式日记D31-0902(网络编程)

2025-09-02 17:13:04 845

原创 玳瑁的嵌入式日记D30-0901(进程间通信)

信号编号Ctrl + CCtrl + ZSIGCONT是一种—— 它允许多个进程直接访问同一块物理内存区域,无需通过内核中转数据,因此是所有 IPC 中的一种。

2025-09-01 19:26:01 520

原创 玳瑁的嵌入式日记D29-0829(进程间通信)

特性无名管道有名管道存在形式内存中文件系统中有实体适用进程有亲缘关系的进程任意进程创建方式pipe()系统调用mkfifo()或命令生命周期随进程结束而消失需手动删除打开方式通过文件描述符直接使用需要通过路径open()

2025-08-29 17:44:42 828

原创 玳瑁的嵌入式日记D28-0828(线程)

互斥 === 》 在多线程中对临界资源的排他性访问。互斥机制 ===》===》 保证临界资源的访问控制。

2025-08-28 17:35:09 912

原创 玳瑁的嵌入式日记D27-0827(线程)

线程是进程内的一个执行单元,多个线程共享进程的资源,但拥有各自的执行栈和寄存器状态。优点: 比多进程节省资源,可以共享变量。 概念:线程是轻量级进程,一般是一个进程中的多个任务。 进程是系统中最小的资源分配单位. 线程是系统中最小的执行单位。 特征: 1、共享资源 2、效率高 30% 3、三方库: pthread clone posix 3.1 编写代码头文件: pthread.h 3.2 编译代码加

2025-08-27 17:36:08 1000

原创 玳瑁的嵌入式日记D26-0826(进程)

功能:参数:指向void返回值void参数的函数指针返回值:成功返回0失败返回非0当程序调用 exit 或者由main函数执行return时,所有用atexit注册的退出函数,将会由注册时顺序倒序被调用只有当程序时,atexitmainexit以下情况_exit_ExitCtrl+CSIGINT。

2025-08-26 17:16:27 1042

原创 玳瑁的嵌入式日记D25-0825(进程)

每个进程的虚拟地址空间相互独立,即便不同进程虚拟地址空间中出现相同地址,实际对应物理内存也不同。通过精准的权限控制,有效避免程序因错误操作(如误写代码段 )导致的异常崩溃,提升程序运行的安全性与稳定性。,系统为该程序分配独立的虚拟地址空间,程序在该空间内开始运行,后续各类内存区域的操作均基于此虚拟地址空间开展。其中 PCB 是核心,记录进程 ID、状态、内存地址等关键信息,是操作系统管理进程的 “档案”程序运行后,操作系统为进程划分虚拟地址空间,各区域承担不同功能,保障程序有序、安全执行。

2025-08-25 19:56:10 1011

原创 玳瑁的嵌入式日记D24-0823(数据结构)

int tlen;}HS_Table;int i = 0;for(i = 0;i < len;/*** @brief 根据需要存储的数据,计算下标*///hash表的空间,一定要大于等于需要存储的数据的个数= -1)return 0;return ind;

2025-08-23 17:09:01 1472

原创 玳瑁的嵌入式日记D23-08022(数据结构)

队列是顺序队列循环队列数组 实现的队列通常采用循环队列的形式,以充分利用空间链表 实现的队列可以动态分配内存,没有固定大小限制常用操作,入队,出队,FIFO,速度不匹配int tlen;}SeqQue;return sq;return 1;return 0;return 1;return 0;

2025-08-22 17:30:35 1577

原创 玳瑁的嵌入式日记D22-08021(数据结构)

3.判断是否为空栈 IsEmptySeqStack。4.判断是否为满栈 IsFullSeqStack。* @brief 入栈,增加元素 底层实现 链表的头插。* @return int 0 成功 非0 表示失败。* @return int 0 成功 非0 表示失败。* @brief 出栈 ,删除元素 ,链表的头删。* @param data 需要入栈的元素。* @param ls 待操作的链栈。* @param ls 待操作的链栈。入栈 出栈。

2025-08-21 21:09:47 896

原创 玳瑁的嵌入式日记D21-08020(数据结构)

while(tmp)return 0;

2025-08-20 21:08:43 927

原创 玳瑁的嵌入式日记D20-08019(数据结构)

return 1;

2025-08-19 17:19:37 1014

原创 玳瑁的嵌入式日记D19-08018(数据结构)

相互之间存在一种或多种特定关系的数据元素的逻辑结构集合,所有数据在同一个集合中,关系平等。线性,数据和数据之间是一对一的关系树, 一对多图,多对多线性(1vs1), 树(1vs N) ,图(N vs N)物理结构(在内存当中的存储关系),数据存放在连续的存储单位中。逻辑关系和物理关系一致,数据存放的存储单位是随机或任意的,可以连续也可以不连续。struct Per 数据元素char name;//数据项int age;

2025-08-18 21:44:40 499

原创 玳瑁的嵌入式日记D18-08014(linux文件编程)

opendir功能:打开一个目录文件关联一个目录流参数:@name 要打开的目录名字字符串返回值:成功 目录流指针失败 NULL 并且 errno会被设置"..""."".bashrc"功能:参数:@dirp 要操作的目录流指针返回值:成功 读到的某一个目录项的结构体指针失败 NULL && errno练习:读取某个目录 打印目录下的所有文件的名字 和 inode编号。

2025-08-14 18:22:45 721

原创 玳瑁的嵌入式日记D17-08013(linux文件编程)

/从头往后 偏移 100个字节。将stream指定的文件,从whence位置,定位到offset的位置。//从头往后 偏移 100个字节。从fd对应文件中读取数据,读count个字节,存放到buf指定的一块空间。SEEK_CUR //文件当前位置。SEEK_SET //文件开头。SEEK_END //文件结尾。//流指针 <--------> 文件描述符。@stream --- 表示要定位的文件。SEEK_CUR //文件当前位置。SEEK_SET //文件开头。

2025-08-13 20:03:49 715

原创 玳瑁的嵌入式日记D16-08011—12(linux文件编程)

练习:输入文件名,若该文件存在则更改权限+x,若没有则声称该名字的目录及文件,并修改权限练习:统计目录下普通文件和目录文件的数量。

2025-08-13 09:20:38 1174

原创 玳瑁的嵌入式日记D15-0808(C语言)

...//1.定义结构体类型//2.定义变量。

2025-08-08 21:12:04 1127

原创 玳瑁的嵌入式日记D14-0807(C语言)

add(a,b);p(a,b)注意:

2025-08-07 20:45:54 1245

原创 玳瑁的嵌入式日记D13-0806(C语言)

基类型 * 指针变量名;int a = 10;指针变量本身 // p指针变量指向的目标 // abegin //指针变量本身 --- 放的是一个地址*begin //基类型。

2025-08-06 21:06:15 1289

原创 玳瑁的嵌入式日记D12-0805(C语言)

语法:基类型 * 指针变量名;(1)基类型基类型说明了 通过指针 找到的空间a.多大b.怎么用就是 指针找到的空间上 所存储的 数据类型(2) *只是一个修饰符用来说明现在定义的变量,不是普通变量,而是指针变量(3)指针变量名是个标识符 ,符合标识符命名规则定义多个指针变量://*用来修饰变量名*p1*p2*p3eg:int a = 10;//定义一个int型变量 初始化为10//定义了一个指针类型的变量p。

2025-08-05 20:25:03 1050

原创 玳瑁的嵌入式日记D11-0804(C语言)

语法:#define 标识符 字符串(1)预处理命令(2)标识符 --- 宏名(3)字符串 --- 宏值//这个字符串 只是 预处理阶段的 文本信息//C语言中的字符串 "hello"

2025-08-04 20:53:38 638

原创 玳瑁的嵌入式日记D10-0801(C语言)

2.同一作用域中,不能有同名标识符3.在不同的作用域,同名标识符,相互之间没有影响4.如果是不同的作用域, 但是作用域之间存在嵌套关系, 则,内层的作用域的同名标识符,会屏蔽外层的作用域的同名标识符。

2025-08-01 21:49:17 679

原创 玳瑁的嵌入式日记D9-0731(C语言)

/定义 --- 从无到有造出来//语法类型标识符 函数名(形式参数) //函数头 --head//声明部分//语句部分函数体//bodyreturn 表达式;//返回函数处理的结果C语言中所有 标识符 --先定义,后使用main函数是整个程序的入口函数定义的位置main之前main之后必须在,使用前,做一下函数声明函数声明 //将函数头复制 加上分号函数基本模型输入 --->[计算机] --->结果。

2025-07-31 21:12:30 1093

原创 玳瑁的嵌入式日记D8-0730(C语言)

功能:参数:@s -- 可以传字符串数组名返回值:成功 字符串长度。

2025-07-30 21:07:48 934

原创 玳瑁的嵌入式日记D7-0729(C语言)

排序 --- 将数据按照 从大到小(降序) 或者 从小到大(升序) 排列C语言中: 选择排序 冒泡排序 插入排序 //快速排序 统一规定: 升序 掌握的标准: 思想 给合适的位置选择合适的数 for(i =0;i< n-1;++i) { //初始从0开始和后面对比,最后一位不需要交换 for

2025-07-29 20:34:07 1329

原创 玳瑁的嵌入式日记D6-0728(C语言)

(1) 类型说明符---这个数组中要放的是哪一种类型的数据(2) 数组名---标识符名字符合标识符命名规则(3) [常量表达式]---[] //数组定义表示 ---用来标识 说定义的是一个数组常量表达式 //用来说明 ---数组中相同类型变量的个数数组长度 (数组元素)//一维数组//二维数组//三维数组//n维数组。

2025-07-28 20:59:21 772

原创 玳瑁的嵌入式日记D5-0726(C语言)

程序://顺序结构//选择结构//循环结构。

2025-07-26 21:38:19 928

原创 玳瑁的嵌入式日记D4-0725(C语言)

X --- 表示将数据 转换为 十六进制形式 十六进制中出现的 字母的这些值 输出成大写形式。输入两个整型变量a,b的值,输出a+b,a-b,a*b,a/b,(float)a/b,a%b的结果,6.scanf中出现了空白符 -------------- 效果是,匹配任意多个空白符。占位符 : %d %u ---占位符 会被替换为 输出列表中 对应的数据。占位符 : %d %u ---占位符 会将输入进的数据,转换为指定的格式。%d --- 识别匹配有效(合法)字符 '0'~'9'

2025-07-25 20:45:46 1156

空空如也

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

TA关注的人

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