- 博客(51)
- 收藏
- 关注
原创 嵌入式学习day50-硬件-IIC
主设备发送从设备的7位地址,后面加上读写控制位(0表示写,1表示读)。例如,要向地址为0x50的从设备写数据,发送的字节是0xA0(0x50左移1位,加上写控制位0)。数据传输完成后,主设备发出停止信号,SDA从低电平变为高电平,SCL保持高电平。每个字节传输后,接收方(从设备)发送ACK信号(ACK=0表示成功接收),如果数据接收失败,则发送NACK(NACK=1)。每个字节传输后,从设备会发送应答位(ACK),表示成功接收到数据。主设备发起起始信号,SDA从高电平变为低电平,同时SCL保持高电平。
2025-09-16 20:04:38
319
原创 嵌入式学习day48-硬件-imx6ul-key、中断
DSE(驱动能力)3: 000 //DSE_0_output_driver_disabled_ — output driver disabled;PUS(上拉或者下拉)2: 11 // PUS_3_22K_Ohm_Pull_Up — 22K Ohm Pull Up。这些独有的中断肯定是要指定的核心处理,因此这些中断就叫做私有中断;(1)中断:CPU能打断当前正在进行的工作,去处理更为紧急的任务,并且在处理完中断任务后,能回到原先的地方继续工作。
2025-09-12 19:41:51
614
原创 嵌入式学习day47-硬件-imx6ul-LED、Beep
链接脚本用于在编译后的目标文件中指定如何将各个部分的数据和代码按照特定方式排列到内存中。它定义了程序的内存布局,包括段(如代码段、数据段等)的起始地址和大小。:将目标文件(.o文件)和库文件链接成最终的可执行文件(如.bin文件),它负责把代码、数据等合并,并根据链接脚本确定内存布局。:将源代码(C、C++等)转换为目标文件(.o),它将源代码编译成机器代码。:将汇编代码(.s文件)转换为目标文件(.o),即将汇编语言转换成机器代码。:用于调试程序,帮助开发人员定位和修复代码中的错误。
2025-09-11 19:46:44
170
原创 嵌入式学习day47-硬件-imx6ull-LED
IOMUXC全称(输入输出复用控制器)。把一个物理管脚(pad)切换到不同的功能。因为 i.MX6ULL 的管脚非常多,但封装数量有限,所以同一个管脚可以复用成GPIO / UART / I2C / SPI / ENET / LCD 等多种功能。你写裸机代码要点亮 LED,首先要通过 IOMUXC 把 LED 所在的引脚复用成 GPIO 功能,否则它可能还在默认的其它外设模式下。
2025-09-10 19:09:50
748
原创 嵌入式学习day45-硬件—汇编
立即数(Immediate Number):直接写在指令里的常数,而不是存放在寄存器或内存中的数据。在 ARM 指令集中,立即数通常是12 位编码,由 8 位有效数(imm8)和 4 位旋转值(rot)组成。把某个数展开成2进制,该数必须存在一种循环右移(偶数位),使得移位后高24位全0,低8位即为有效imm8;
2025-09-08 21:22:22
482
原创 嵌入式学习day44-硬件—ARM体系架构
掌握ARM的RISC特点:理解精简指令集的优势熟悉寄存器组织:重点掌握特殊寄存器的作用理解存储系统层次:缓存、MMU的工作原理掌握指令集分类:数据处理、传输、分支指令了解处理器模式:各模式的特点和切换机制理解流水线技术:提高处理器性能的关键技术掌握中断异常处理:系统可靠性的重要保障。
2025-09-07 13:47:54
1009
1
原创 嵌入式学习day42—硬件(3)
Universal Asynchronous Receiver/Transmitter 通用异步收发器,2个串口(1个串口被用于ISP下载程序,1个串口被用于和主机之间的通信),全双工通信。
2025-09-04 19:31:17
641
原创 嵌入式学习day41-硬件(2)
GenralPurposeInput/Output,GPIO是51单片机和外界交互最基本的方式工作模式:输出模式:单片机给定引脚一个电平(高电平(5V)低电平(0))输入模式:检测引脚电平变化将GPIO类比水龙头:输出模式:控制水龙头(水流)输入模式:观察水龙头是否有水流(按键)
2025-09-03 17:18:42
842
原创 嵌入式学习day40-硬件(1)
以应用为中心:消费电子(手机、蓝牙耳机、智能音响)、医疗电子(心率脉搏、呼吸机)、无人机(大疆DJ)、机器人(人形四足机器人)
2025-09-02 17:20:20
948
原创 嵌入式学习day38
单循环服务器简单,可以处理多客户端,但不能同时处理并发服务器(多进程和多线程),可以处理多个客户端,可以同时处理多进程方式的效率低于多线程。
2025-08-27 20:40:38
858
原创 嵌入式学习day36
ARP(地址解析协议,Address Resolution Protocol)缓存是一个在计算机网络中用于存储MAC地址与IP地址之间映射关系的表格。在Linux系统中,ARP缓存是用来存储当前网络设备通信时所需的IP地址与物理地址(MAC地址)之间的映射信息,以便避免每次通信时都需要重新查询这个信息。
2025-08-26 08:48:53
320
原创 嵌入式学习day34-网络-tcp/udp
本文介绍了TCP/UDP网络编程的实现方法。主要内容包括:1) TCP点对点聊天的实现,通过父子进程分别处理收发消息;2) 粘包问题的原因分析及解决方案(固定长度、包头包体、分隔符等);3) recv/send与read/write的区别;4) UDP编程特点及sendto/recvfrom函数使用。文中提供了完整的客户端和服务端代码示例,展示了TCP文件传输和UDP通信的实现细节。文章还涉及了进程间通信、信号处理、资源清理等编程技巧。
2025-08-22 19:48:38
2146
原创 嵌入式学习day33-网络-c/s
网络通信摘要: 网络通信实现了不同主机间的进程通信,如QQ等即时通讯工具。TCP/IP协议栈是网络通信的核心,其中IP地址是主机的唯一标识(32位数值,点分十进制表示)。通信过程涉及物理链路和逻辑链路,遵循OSI七层模型,实际应用多采用TCP/IP四层模型。TCP协议提供可靠传输(三次握手建立连接),适用于重要数据传输;UDP协议则适用于实时性要求高的场景。网络通信模式包括C/S、B/S和P2P。socket编程是实现网络通信的关键,涉及socket()、bind()、connect()、listen()、
2025-08-21 19:46:58
1725
原创 嵌入式学习day31-消息队列、共享内存、信号灯
本文介绍了使用有名管道实现进程间通信的两种实现方式(clientA.c和clientB.c),以及三种IPC通信机制:消息队列、共享内存和信号灯。其中重点说明了: 有名管道实现要点:创建两个管道文件,使用多线程处理收发消息,通过".quit"命令退出 消息队列操作流程:ftok生成key、msgget创建队列、msgsnd/msgrcv收发消息、msgctl删除 共享内存使用方法:shmget创建、shmat映射、shmdt解除、shmctl删除 信号灯操作接口:semget创建信号量数
2025-08-19 20:14:31
413
原创 嵌入式学习day30-进程间通信
摘要:本文介绍了多线程编程和进程间通信技术。线程部分展示了使用信号量(semaphore)实现三个线程按顺序打印ABC的同步控制。进程通信部分详细讲解了Linux系统下多种进程通信方式,包括管道(无名/有名管道)、信号、消息队列、共享内存和套接字等,重点说明了无名管道的创建(pipe函数)和操作特性,以及有名管道(mkfifo)与无名管道的区别。信号处理方面介绍了常见信号类型、处理方式(缺省/忽略/捕捉)及相关API(signal/alarm/kill)。
2025-08-18 19:34:09
699
原创 嵌入式学习day29-线程
本文包含两个编程练习:1) 实现目录遍历功能,查找并打印指定目录下的音视频文件(.mp3/.mp4/.avi等),通过文件扩展名判断是否为媒体文件;2) 多线程编程示例,包含两种实现方式(普通方法和传参方法),演示了4个线程(采集、存储、显示、日志)的创建和执行,并介绍了线程属性设置(分离/加入属性)、线程间通信(全局变量+互斥锁)以及信号量的使用方法。文章还讨论了死锁的产生条件及避免方法,提供了pthread和semaphore相关API的使用说明。
2025-08-16 17:18:05
1923
原创 嵌入式学习day28-进程和线程
摘要:本文介绍了进程管理和线程编程的关键技术。在进程方面,重点讲解了waitpid函数及其参数选项,包括阻塞/非阻塞回收和指定子进程回收;exec函数族与fork的配合使用;主函数参数传递机制;以及system函数执行shell命令。在线程方面,阐述了线程与进程的区别,包括资源共享特性、调度单元和空间管理差异;详细说明了pthread_create、pthread_self、pthread_exit和pthread_join等线程操作接口的功能和使用方法,特别强调了pthread_join的线程回收和同步功
2025-08-15 17:14:00
363
原创 嵌入式学习day26
write:read: lseek: fileno: 功能:根据文件流指针获得文件描述符 fdopen: 功能:根据已经打开的文件描述符获得文件流指针 feof: 功能:判断文件流指针是否到达末尾 ferror: 功能:判断文件流指针是否出错 打开目录文件 读取目录文件中的目录项
2025-08-13 20:20:08
270
原创 嵌入式学习day25
fwrite:fread:fread/fwrite: 拷贝图片:流的定位 概念: 设置流的偏移量 标准IO是一种有缓存的IO,文件IO没有缓存,适合于通信、硬件设备操作 标准IO是库函数,文件IO是系统调用 系统调用:是linux内核中的代码,只能在linux系统中使用 库函数:是对系统调用的封装,可以在不同的操作系
2025-08-12 20:24:03
315
原创 嵌入式学习day24
Linux系统中的I/O操作围绕文件概念展开,所有设备都被抽象为文件。文件分为多种类型:块设备文件(b)、字符设备文件(c)、目录文件(d)、普通文件(-)、链接文件(l)、套接字文件(s)和管道文件(p)。标准I/O提供fopen/fclose等库函数,操作流程遵循"打开-读写-关闭"三步。系统采用三种缓存机制:全缓存(4K)、行缓存(1K)和不缓存,分别适用于文件、终端和错误处理场景。标准输入(stdin)、输出(stdout)和错误(stderr)是三个预定义流,分别对应终端I/O
2025-08-11 21:10:44
591
原创 嵌入式学习day23-shell命令
1.IO操作文件2.多任务编程3.网络编程4.数据库编程5.硬件设备管理1.学习接口调用(第一层)2.软件操作流程和思想(第二层)3.软件设计思想和流程架构(第三层) 世界上第一款操作系统:unix 操作系统为了屏蔽底层不同的硬件平台,为上层提供统一的接口 GNU:GNU's Not Unix 开源 GitHub GPL协议 林纳斯 Linux重写了unix操作系统,类Unix操作系统 Linux应用场景:服务器、嵌入式 G
2025-08-09 17:14:54
764
原创 嵌入式学习day21
链式队列:链式栈:1.概念: 1.线性结构:描述数据一对一的关系(表) 2.非线性结构:描述数据一对多(树)、多对多(图)的关系2.树形结构: 1.节点:组成树形结构的一个小的单元称为节点 根节点:只有后继,没有前驱 分支节点:既有前驱,又有后继 叶子节点:只有前驱,没有后继 2.前驱(祖先):由哪个节点可以访问到该节点 3.后继(子孙):该节点可以
2025-08-07 17:22:25
790
原创 嵌入式学习day20
循环队列如果head或者tail下标超过tlen范围,需要对tlen取余,保障head和tail的值在队列下标范围内变化。为避免循环队列空与满的条件冲突,牺牲一个存放数据的空间,将tail+1==head作为判断队满的条件。栈针与tlen相同即为满栈。4.满栈:栈针指向栈顶元素的位置。1.增栈:栈的方向自低向高增长。2.减栈:栈的方向自高向低增长。3.空栈:栈针指向要入栈的位置。
2025-08-06 17:13:10
767
原创 嵌入式学习day18
指针循环向后走,直到ptmpn2为NULL,即等于pend,循环停止。快指针-慢指针 == 环长即相遇,快指针和慢指针相等即为链表有环。定义两个指针:快指针(每次走2步)和慢指针(每次走1步)沿用遍历思想,每次访问一个节点元素判断是否为要找的节点。快指针到达末尾,慢指针少走k步,即倒数第k个元素。采用冒泡排序思想,定义两个指针,相邻两个元素比较。将指针指向的下一个节点的值覆盖当前节点的值。将最后一个节点的pnext指向新申请节点。快指针每次走2步,慢指针每次走1步。快指针走到末尾,慢指针走到中间。
2025-08-04 17:45:25
234
原创 嵌入式学习day17
1.概念:程序 == 数据结构 + 算法描述数据存储和操作的结构操作数据对象的方法2.衡量代码的质量和效率:1.时间复杂度:数据量的增长与程序运行时间的增长所呈现的比例函数关系,称为时间渐近复杂度函数,也简称时间复杂度常见的时间复杂度:(低 -> 高)O(1):程序运行时间维持恒定O(logn):程序刚开始运行时间可能增长较快,但经过一定数据量后,程序运行时间趋于恒定O(n):程序运行时间随数据量增长呈现固定的比例关系O(nlogn)O(n^2)O(n^3)O(2^n)
2025-08-03 21:54:06
608
原创 嵌入式学习day16
在有问题的代码上面和下面加入打印,如果上面能够打印,下面没有打印,则非法内存操作位于两个打印的中间,重复完成上述逻辑,直到找到段错误为止。1.打印调试/日志调试:将一些代码加入打印,将信息打印在终端屏幕或者日志文件中,通过查看日志或终端的打印内容,查看代码运行情况。3.每次修改编译报错的第一个错误,重新编译,再重复完成修改第一个报错的操作,直到语法错误修改完毕为止。valgrind工具能够将没有释放的代码,或者有问题的代码标注出来,形成一份报告,显示在终端。程序代码编译好后,无法脱离库文件使用。
2025-07-31 15:52:32
935
原创 嵌入式学习day15
第三题: 第四天: 数组元素个数必须是常量 数据类型 数组名[元素个数] 1.共用体也称为联合体 共用体每个成员变量空间共享 结构体每个成员变量的空间是独立的 多用于函数传参使用2.数据类型定义:3.使用共用体判断内存大小端 小端存储:内存低地址存放低数据位,内存高地址存放高数据位,内存小端 大端存储:内存低地址存放高数据位,内存高地址存放低数据位,内存大端4.判断硬件平台是内存大端还是内存小
2025-07-30 20:46:07
269
原创 嵌入式学习day14
day13练习: 第三题 : 6. 二维数组传参 eg.利用数组指针接收和打印二维整型数组7. 指针数组的传参: void *指针主要用来保存内存地址 void * 转换为char * 、int *、double *类型时,不需要类型转换,直接赋值就行 char * 、int *、double *转换为void *类型时,需要强制类型转换 void *多用于函数参数和返回值,统一参数和返回值类型1.结构体 1.类型定义:
2025-07-29 17:36:40
386
原创 嵌入式学习day12
数组的数组名a可以理解为int*型(两种特殊情况不能理解为int*型)数组的数组名是指向数组第一个元素的指针常量。当访问a[i]元素时,等价于*(a+i),能操作对应的空间。第四种和第五种等价(const修饰*p,const修饰p)指针变量p的值可以改变,但是不能利用p修改指向空间中的值。指针变量p的值不能变,但可以利用指针p修改指向空间中的值。指针变量p的值不能变,也不能通过p修改指向空间中的值。eg. 求字符串大写,小写,数字,空格的个数。是函数,函数的返回值是指针。是指针,指针指向一个函数。
2025-07-26 17:34:17
209
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅