- 博客(52)
- 收藏
- 关注
原创 嵌入式开发学习日志Day14(ARM体系架构——RTC及ADC)
RTC(实时时钟):非易失性在IMX6ULL内部SNVS(安全的非易失性存储器)提供RTC功能;
2025-07-01 19:23:54
764
原创 嵌入式开发学习日志Day13(ARM体系架构——LCD)
称上面R、G、B为通道,由此三者构成的三通道显示器有些会增加A通道;还有RGB565,其中R的范围为2^5;我们使用的为RGB888,分辨率为800*480;但存储不是使用unsigned char[3],而是使用unsigned int,遵循字节对齐,方便CPU刷新速率,(用空间换时间,与结构体类型相似);通常显示器左上方为坐标原点;
2025-06-30 21:02:53
253
原创 嵌入式开发学习日志Day10(ARM体系架构——GPT定时器、UART及I2C)
该寄存器用于对回滚中断、输入捕获中断、输出比较中断进行使能和失能的配置。(详见参考手册P1236)。
2025-06-26 21:15:18
1321
原创 嵌入式开发学习日志Day8(ARM体系架构——按键、蜂鸣器及中断)
GIC 接收众多的外部中断,然后对其进行处理,最终就只通过四个信号报给 ARM 内核,这四个信号的含义分别为: VFIQ:虚拟快速 FIQ。这里的 effect 分为俩个bit[7](IE使能 cpsie(0)、ID失能cpsid(1)),使用了effect的话就不能省略iflags,i位指irq,f位指frq。这些独有的中断肯定是要指定的核心处理,因此这些中断就叫做私有中断;,软件中断,由软件触发引起的中断,通过向寄存器GICD_SGIR。不是 SPI 总线那个中断),这类中断泛指所有的外设中断;
2025-06-24 21:56:32
1763
原创 嵌入式开发学习日志Day7(ARM体系架构——GUN工具链常用工具、SDK工具及链接脚本、Makefile)
1. .bss段用于存放未初始化或初始化为0的数据在运行时会被自动清零- 典型例子://静态变量(全局或局部)//显式初始化为0的全局变量2.COMMON段用于存放未初始化的非静态全局变量链接时才确定最终大小和位置允许多个目标文件定义同名符号- 典型例子://未初始化的非静态全局变量3. .data段用于存放已初始化的全局变量和静态变量(非零值)需要在程序文件中保存实际的初始值- 典型例子:// 初始化为非零值// 初始化为非零数组。
2025-06-23 19:53:09
1425
原创 嵌入式开发学习日志Day6(ARM体系架构——arm启动代码)
本文介绍了ARM架构下函数调用的实现机制,重点分析了跳转指令(BL/BX)、栈操作和保护现场的方法。主要内容包括:1) BL指令保存返回地址到LR寄存器,BX指令实现跳转;2) ARM采用满减栈机制,详细说明STMFD/LDMFD指令的栈操作方式;3) 汇编与C语言的混合调用规则,强调主调者负责保护现场;4) 模式切换方法,包括CPSR寄存器操作和SWI指令;5) 异常处理流程和向量表初始化。最后以IMX6ULL的点灯程序为例,说明GPIO寄存器的操作方法。
2025-06-22 18:14:00
1304
原创 嵌入式开发学习日志(硬件学习——51单片机温度传感器和ARM体系架构——Day4)
两个或多个输出信号连接在一起可以实现逻辑“与”的功能。51单片机ds18b20公共总线111100010000拉高的过程为释放总线的过程;接收方一定要释放总线,来实现接收数据;上拉电阻:保证双方释放总线后,总线能够呈现高电平;首先,DS18B20的小数点是定点存放的,总共16位,高12位是存放整数部分的,低四位为二进制小数,高十二位为整数部分,最低的小数部分为0.0625;ARM Cortex A(应用于消费类电子产品)M(应用于微控制器MAU方向,如STM32)
2025-06-19 20:40:00
850
原创 嵌入式开发学习日志(硬件学习——51单片机中断、定时器、PWM——Day2)
中断系统是为使CPU具有对外界紧急事件的实时处理能力而设置的;当中央处理机CPU正在处理某件事的时候外界发生了紧急事件请求,要求CPU暂停当前的工作,转而丢处理这个紧急事件,处理完以后,再回到原来被中断的地方,继续原来的工作,这样的过程称为中断。请示CPU中断的请求源称为中断源(打断当前工作的事件)。1、微型机的中断系统一般允许多个中断源,当几个中断源同时向CPU请求中断,要求为它服务的时候,这就存在CPU优先响应哪一个中断源请求的问题。
2025-06-18 22:10:42
927
原创 嵌入式开发学习日志(硬件学习——51单片机UARTDay3)
参与通信的设备称为主机;通信的本质是信息的传达;并行通信:通信双方之间有两根及以上的数据线传输信息串行通信:通信双方之间只有一根数据线传输信息USB(统一串口总线)
2025-06-18 21:49:35
1051
原创 嵌入式开发学习日志(数据库II && 网页制作)Day38
中,Aggregate Functions来搜寻所需平均值、计数、最大值、最小值、总和;
2025-06-11 21:12:58
1100
原创 嵌入式开发学习日志(linux系统编程--网络抓包及MQTT协议)Day35
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。
2025-06-11 20:20:44
884
原创 嵌入式开发学习日志(linux系统编程--数据库)Day37
(1)开源 C语言开发(运行效率高)(2)代码量少 1万行左右,总大小10M以内(3)绿色软件无需安装(4)文件型数据库,可以移动。(5)数据容量最大 2T。
2025-06-10 21:49:59
1171
原创 嵌入式开发学习日志(linux系统编程--网络编程(tcp))Day34
TCP 是 TCPIIP 体系中非常复杂的一个协议。下面介绍TCP最主要的特点。(1)TCP是面向连接的运输层协议。这就是说,应用程序在使用TCP协议之前,必须先建立 TCP 连接。在传送数据完毕后,必须释放已经建立的TCP连接。这就是说,应用进程之间的通信好像在“打电话”:通话前要先拨号建立连接,通话结束后要挂机释放连接。(2)每一条 TCP连接只能有两个端点(endpoint),每一条 TCP连接只能是点对点的(一对一)。(3)TCP提供可靠交付的服务。
2025-06-05 20:23:17
1233
原创 嵌入式开发学习日志(linux系统编程--网络编程(UDP))Day33
本文摘要:文章系统介绍了网络编程基础,重点阐述了OSI七层模型和TCP/IP四层模型各层的功能。详细讲解了IP地址分类(A-E类)及其适用范围,并提供了网络配置与单机上网的具体方法。在网络编程部分,着重分析了UDP协议的特性及其编程框架,包括socket、bind、recvfrom、sendto等核心函数的使用。通过服务端和客户端的代码示例,展示了UDP通信的实现过程,涉及套接字创建、地址绑定、数据收发等关键操作。全文为理解网络通信原理和实现基础网络编程提供了实用指导。
2025-06-04 20:00:29
994
原创 嵌入式开发学习日志(linux系统编程--系统编程之 进程间通信IPC)Day32
空间独立,需要一些操作;分为三大类:1、古老的通信方式无名管道 有名管道 信号2、IPC对象通信 system v BSD suse fedora kernel.org消息队列(用的相对少,这里不讨论)共享内存信号量集3、socket通信网络通信(不同主机间交互)
2025-06-03 20:17:03
1231
原创 嵌入式开发学习日志(linux系统编程--framebuffer的操作)Day31
文字可以通过字模工具获取要操作的像素点坐标数组,也可以通过字库进行操作,最原始的图像是位图,文件信息中前54字节是头信息,包含图像的大小等参数,剩下的就是连续了BGRBGR像素点数据,我们可以循环取三字节,再倒序就得到RGB参数了,然后输出。* 简单的操作像素点,比如画直线等,可以通过简单的循环控制xy坐标就能实现,但汉字图像等需要的像素点坐标就比较复杂了。一般可访问显存小一些,即虚拟分辨率,真实分辨率就是打开设置查看得到的分辨率。设备路径 : 设备/dev/fb0。
2025-05-31 20:41:43
230
原创 嵌入式开发学习日志(linux系统编程--进程(4)——线程锁)Day30
mutex;(1)pthread_mutex_t :互斥锁类型(2) mutex:互斥锁变量(创建在pcb块中的东西) 也称内核对象(在内核中被定义的)信号量的类型 信号量的变量2、初始化信号量:sem_init();将已经定义好的信号量赋值;sem 要初始化的信号量pshared = 0 (表示线程间使用信号量);pshared!= 0 (表示进程间使用信号量);value 信号量的初始值,一般无名信号量都是二值信号量(0 1) :0 表示红灯,进程暂停阻塞;
2025-05-30 17:55:51
1292
原创 嵌入式开发学习日志(linux系统编程--进程(2))Day28
本文摘要:介绍进程管理相关概念与函数。主要内容包括:1)僵尸进程(已结束但资源未回收)和孤儿进程(父进程先终止);2)进程结束函数exit(刷新缓冲区)和_exit(不刷新缓冲区);3)atexit注册退出前执行的函数;4)进程回收函数wait/waitpid(阻塞/非阻塞回收子进程);5)exec函数族(替换进程空间但不创建新进程)和system函数。重点说明各函数参数、返回值及使用注意事项。
2025-05-26 20:43:15
973
原创 嵌入式开发学习日志(linux系统编程--进程(1))Day27
本文介绍了C语言中sprintf和fprintf函数的使用方法,以及Linux进程管理的相关知识。sprintf用于字符串拼接,fprintf配合fflush实现文件写入。重点讲解了进程的定义、与程序的区别、内存分布、状态分类及管理命令(ps、top、kill等)。通过示例代码演示了fork创建子进程,以及父子进程分别向文件写入数据的实现。文章还涉及进程调度算法、上下文切换等底层原理,并提供了getpid/getppid等进程操作函数的使用说明。
2025-05-24 17:39:46
1402
原创 嵌入式开发学习日志(linux系统编程--io文件偏移函数(3)和目录)Day26
本文介绍了文件操作和目录操作的相关函数及其用法。文件操作部分主要涉及lseek函数,用于设置文件偏移量,支持从文件开始、当前位置或末尾进行偏移;fileno函数用于将文件流指针转换为文件描述符;fdopen函数则将文件描述符转换为文件流指针。目录操作部分包括opendir、readdir和closedir函数,分别用于打开目录、读取目录内容和关闭目录。此外,还介绍了perror函数用于系统级错误报告,以及time和localtime函数用于时间处理。这些函数在文件管理和时间处理中具有重要作用。
2025-05-22 20:52:44
1189
原创 嵌入式开发学习日志(linux系统编程--文件读写函数(2))Day25
本文介绍了Linux操作命令和C语言中的文件操作函数。Linux命令包括wc用于字符统计和file用于查看文件类型。C语言中的文件操作函数包括fwrite和fread,分别用于写入和读取二进制文件,涉及参数如指针、大小、份数和文件流。此外,还介绍了文件定位函数fseek、ftell和rewind,以及缓冲区的类型和刷新条件。文件IO部分讨论了系统调用、文件描述符和open、write、close、read等函数的使用。这些工具和函数对于处理文件和进行系统编程至关重要。
2025-05-21 22:01:42
1654
原创 嵌入式开发学习日志(linux系统编程--文件读写函数)Day24
本文介绍了C语言中的系统编程和文件操作。系统编程部分主要涉及标准输入输出头文件stdio.h的使用。文件操作部分详细说明了文件处理的基本步骤:打开文件、进行读写操作、关闭文件。重点介绍了fopen函数的不同模式(如r、r+、w、w+)及其用途,以及如何使用fputc和fgetc进行单个字符的读写。此外,还介绍了fgets和fputs函数,用于一次读取或写入一行数据。文章最后提到了文件比较和查看文件内容的命令,如vimdiff和cat。这些内容为C语言中的文件处理提供了基础指导。
2025-05-20 20:52:36
1272
原创 嵌入式开发学习日志(数据结构--树、哈希表和内核链表)Day23
本文主要介绍了树、哈希表和内核链表的基本概念、结构及其操作。首先,树是一种由节点组成的层次结构,具有唯一的根节点和若干子树,节点间存在父子、兄弟等关系。二叉树是树的特殊形式,每个节点最多有两个子树,且子树有左右之分。文章详细介绍了二叉树的定义、特点、基本形态、特殊类型(如满二叉树和完全二叉树)及其性质,并提供了二叉树的存储结构和基本操作(如创建、遍历和销毁)的代码实现。其次,哈希表是一种通过散列函数将关键字映射到存储位置的数据结构,文章介绍了哈希表的定义、查找步骤、散列函数构造方法以及处理冲突的常用方法(如
2025-05-19 20:17:35
821
原创 嵌入式开发学习日志(数据结构--栈和队列)Day22
本文介绍了栈和队列的基本概念及其操作。栈是一种后进先出(LIFO)的线性表,限定仅在表尾进行插入和删除操作,常用于回溯、递归和优先级处理问题。栈的基本操作包括创建、入栈、出栈、判断栈空、获取栈顶元素、销毁栈和获取栈长度。队列是一种先进先出(FIFO)的线性表,允许在一端插入,另一端删除,常用于计算机缓冲和循环队列。队列的基本操作包括创建、判断队空、判断队满、入队、出队、获取队头元素和销毁队列。文中还提供了C语言实现链栈和顺序队列的代码示例,并展示了如何利用栈进行符号匹配的文本检查器。
2025-05-19 19:39:28
812
原创 嵌入式开发学习日志(数据结构--双链表)Day21
本文介绍了双链表的基本操作和工程管理工具Makefile的使用。双链表部分包括定义、声明、创建表头、插入、遍历、查找、修改、删除、逆序和销毁链表等操作。Makefile部分则详细说明了如何编写Makefile文件来管理多个C文件的编译过程,包括目标文件、依赖关系、编译命令和清理命令的编写。通过Makefile,可以简化多文件项目的编译和链接过程,提高开发效率。
2025-05-15 18:53:25
856
原创 嵌入式开发学习日志(数据结构--单链表)Day20
文章主要介绍了GDB调试的基本步骤和命令,以及链表的常见操作和顺序表与链表的优缺点。GDB调试步骤包括编译带调试信息的程序、启动GDB、设置断点、运行程序、单步执行、查看变量和退出调试。对于段错误,可以通过GDB的where命令定位错误位置。链表操作包括修改、查找、逆序输出、插入和销毁等。顺序表和链表在存储方式、时间性能、空间性能上各有优劣,顺序表查找快但插入删除慢,链表则相反。循环链表通过将尾节点指向头节点形成环状结构,适用于需要循环访问的场景。
2025-05-14 20:24:36
1056
原创 嵌入式开发学习日志(数据结构--顺序结构(二)--单链表)Day19
本文介绍了软件安装命令和顺序表、链表的基本操作及其优缺点。首先,通过sudo apt-get install命令可以安装所需软件,如clang-format和valgrind,后者用于检测内存泄漏。顺序表的基本操作包括创建、插入、删除、遍历等,其优点在于无需额外存储空间且能快速访问元素,但插入和删除操作效率较低。链表则解决了顺序表的动态存储问题,其特点是通过指针域存储下一个元素的地址,支持高效的插入和删除操作。链表的操作包括创建、判断空链表、插入、删除、遍历等。总体而言,顺序表适合随机访问,而链表更适合频繁
2025-05-13 21:44:05
1036
原创 嵌入式开发学习日志(数据结构)Day18——顺序表(一)
数据结构是研究数据元素之间特定关系的学科,主要分为逻辑结构和物理结构。逻辑结构包括集合、线性、树和图,分别表示数据元素之间的平等、一对一、一对多和多对多关系。物理结构则涉及数据在内存中的存储方式,如顺序存储和链式存储。数据结构的基本概念包括数据、数据项、数据对象和数据类型,其中抽象数据类型(ADT)是数学模型和操作的集合。程序由数据和算法组成,算法具有输入输出特性、有穷性、确定性和可行性。算法的设计要求正确性、可读性、健壮性和高效性。时间复杂度是衡量算法执行时间的标准,通过简化计算步骤来评估。线性表是数据元
2025-05-12 19:33:05
1248
原创 嵌入式开发学习日志Day17———结构体和共用体.位运算
第十一章介绍了结构体与共用体的基本概念和使用方法。结构体用于将不同类型的数据打包封装,方便管理和使用。结构体的定义包括标识符、成员运算符(.和->),以及结构体变量的赋值和初始化。结构体在内存中的存储遵循对齐原则,以提高CPU的运行效率。对齐原则包括默认对齐、最大成员对齐和成员顺序存储。结构体的大小必须是最大成员大小的倍数,且成员的偏移量必须整除其大小。结构体的初始化需注意顺序,未初始化的成员默认为0。结构体变量之间可以赋值,但不能整体赋值。通过示例代码展示了结构体的定义、赋值和输出操作。
2025-05-09 17:25:50
1213
原创 嵌入式开发学习日志Day15
(1)【const】:在指针变量中使用时,无法通过该指针修改被指向的变量;(2)【const】:关键字,在C和C++中,能加就加,加了一定比不加好;(3)加了【const】可以常量可以传字符串,不加【const】只能传字符数组的数组名;eg:输出字符串函数和统计有效字符的函数;(2)将一个字符数组拷贝到另一个字符数组中;(3)当两个字符串相同时。系统只为其开一个地址;所以输出为Yes;(4)连接两个字符数组的字符串;(5)用函数的嵌套连接两个字符数组的字符串;
2025-05-07 18:54:30
441
原创 嵌入式开发学习日志Day14
地址加n,实际是地址向后偏移sizof (基类型)乘以n个字节;(1)判断电脑是小端存储还是大端存储;(2)求一个数组中的最大值;程序:(3)将一个数组中的元素逆序输出;(4)用指针进行选择排序;
2025-05-06 20:21:41
646
原创 嵌入式开发学习日志Day13
一般形式为:#define 标识符 字符串(谷歌规定):所有的宏名均大写,便于区分;写宏时,左右两边加括号,防止出错;宏可以嵌套使用;【gcc - E】————只做预处理,不编译;【-omain.i】————输出main.i文件,预处理的结果;一般定义形式:#define 宏名 (参数表)字符串调用:printf("%d\n",ADD(3,4));注意:带参宏的参数不用加数据类型;eg:用带参宏计算三角形的面积;
2025-05-05 20:40:15
1161
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1