- 博客(36)
- 收藏
- 关注
原创 ARM3.(汇编函数和c语言相互调用及ARM裸机开发环境搭建)
文章摘要:本文介绍了ARM汇编与C语言的互调用方法,包括汇编调用C函数(使用BL指令)、参数传递机制(通过r0-r3寄存器,超过4个参数需压栈)、C调用汇编函数(使用EXPORT声明)。同时讲解了ARM裸机开发环境搭建的关键技术:异常向量表设置(位于0x00000000)、工作模式切换(通过MRS/MSR指令修改CPSR寄存器)、SWI软中断处理(需保存上下文)。文中提供了完整的代码示例,展示了参数传递、返回值处理、栈操作等关键实现细节,为ARM底层开发提供了实用参考。
2025-09-16 16:19:35
721
原创 ARM2.(汇编语言)
本文介绍了ARM汇编语言的开发调试与指令集应用。在调试方面,详细说明了Debug界面的寄存器状态查看和单步执行功能。重点讲解了ARM汇编框架结构、数值操作指令(mov/add/sub等)、位操作指令(bic/orr)、比较与分支结构、循环结构和函数调用机制。特别强调了函数调用时的栈操作(STMDB/LDMFD)和多级调用时的LR寄存器保护方法。此外,还补充了ARM内核工作模式切换原理、立即数编码规则以及b/bl/bx跳转指令的区别。最后说明了ARM架构默认采用满递减栈机制。这些内容全面涵盖了ARM汇编开发的
2025-09-12 14:46:59
1515
原创 ARM1.(ARM体系结构)
本文介绍了嵌入式系统和计算机系统的基本组成。嵌入式系统是以应用为中心、软硬件可裁剪的专用计算机系统。计算机系统由软件(系统软件、应用软件)和硬件(运算器、控制器、存储器、输入/输出设备)组成。重点讲解了各类处理器(CPU、GPU、MPU、MCU、DSP、SOC)的特性及存储器(RAM、ROM)的区别。详细阐述了ARM架构的指令集分类、寄存器组(包括SP、LR、PC等关键寄存器)的工作原理,以及函数调用时如何通过栈和LR寄存器配合实现准确返回。最后介绍了开发板IMAX6ULL及相关概念(CISC/RISC架构
2025-09-11 23:49:29
1170
原创 51单片机4(温度传感器DS18B20)
本文介绍了DS18B20数字温度传感器的工作原理及单片机控制方法。DS18B20通过单总线接口(DQ)与单片机通信,提供9位温度数据。核心操作流程包括:复位、跳过ROM(0xCC)、启动转换(0x44)、读取温度(0xBE)等命令。详细解析了复位、写时序和读时序的操作方法,并提供了相应的C语言实现代码。其中,复位需拉低480-960μs后检测应答;写0/1和读0/1都有特定的时序要求。最后给出了完整的温度采集函数get_temp()和主程序示例,通过串口输出实测温度值。
2025-09-10 01:48:54
1201
1
原创 51单片机3(UART)
UART是一种全双工、异步串行通信协议,采用RXD/TXD两根信号线实现双向数据传输。其特点包括:采用LSB低位先发原则,串行传输方式(成本低、距离远但速率慢),支持奇偶校验(奇/偶校验位可选)。通信时序包含起始位(低电平)、8位数据、校验位和停止位(高电平)。波特率(如9600bps)需收发双方一致。UART通过SCON/PCON寄存器配置工作模式,结合定时器1实现波特率生成,支持中断方式处理收发数据。与同步通信协议(I2C/SPI)不同,UART无需时钟线,通过异步方式实现设备间通信,适用于主从应答场景
2025-09-04 23:54:17
1231
原创 51单片机2(按键,外部中断,定时器中断,PWM与蜂鸣器)
本文介绍了51单片机开发中的按键模块、中断系统和蜂鸣器模块的实现方法。在按键模块部分,详细说明了按键检测原理和数码管显示的实现;中断部分解释了外部中断和定时器中断的配置流程,包括寄存器设置和中断服务函数编写;蜂鸣器模块阐述了PWM调频原理,通过定时器产生不同频率的方波驱动蜂鸣器发声。文中提供了完整的代码示例,包括按键扫描检测、中断初始化和处理函数、以及蜂鸣器频率控制等具体实现方法,展示了如何通过硬件外设与中断系统协同工作完成特定功能。
2025-09-03 19:39:40
1008
原创 51单片机1(单片机基础,LED,数码管)
本文介绍了嵌入式系统与51单片机的核心概念。嵌入式系统是专用于特定任务的计算机系统,以应用为中心,软硬件可裁剪。51单片机是基于Intel MCS-51指令集的8位微控制器,具有哈佛结构、精简资源等特点。文章详细解析了CPU、MCU、MPU等处理单元的区别,以及单片机内部结构(包括CPU、存储器、I/O端口等模块)。通过LED和数码管控制实例,展示了51单片机的编程应用,包括位运算操作、端口控制和动态显示实现。最后提供了完整的示例代码,演示如何实现流水灯效果和数码管动态显示功能。
2025-09-02 19:45:33
1109
原创 网络1.(网络基础,TCP编程)
本文介绍了计算机网络基础知识和TCP/IP编程的核心内容。主要内容包括:1. 网络基础概念:TCP/IP协议、IP地址、子网掩码的作用,以及OSI七层模型和TCP/IP四层模型的分层结构。2. TCP/UDP协议特性:TCP提供可靠的有连接传输,UDP实现高效的无连接通信。3. 网络编程接口:详细讲解了socket、connect、bind、listen、accept等关键系统调用的参数和使用方法。4. 实际编程示例:通过客户端-服务器模式的代码实现,展示了如何创建TCP连接、进行双向通信,并利用多线程实现
2025-08-22 03:35:03
1386
原创 进程间的通信2.(消息队列,共享内存及信号灯)
本文介绍了三种进程间通信(IPC)方式:消息队列、共享内存和信号灯。消息队列通过ftok创建IPC键值,msgget创建队列,msgsnd/msgrcv进行消息收发,msgctl删除队列。共享内存通过shmget创建内存空间,shmat映射到进程地址空间,shmdt解除映射,shmctl删除内存。信号灯用于进程同步,semget创建信号量数组,semop进行P/V操作,semctl控制信号量。文中提供了单进程和双进程的完整代码示例,展示了如何使用这些IPC机制实现进程间通信,特别是通过信号灯实现了共享内存的
2025-08-20 10:03:56
1090
原创 进程间的通信1.(管道,信号)
本文介绍了Linux系统中进程间通信(IPC)的主要方式,重点分析了管道和信号机制。在管道通信方面,详细说明了无名管道(仅用于亲缘关系进程)和有名管道的特性、创建方法及实际应用,并通过代码示例展示了父子进程间和任意进程间的管道通信实现。在信号机制方面,列举了常见信号类型,阐述了信号的三种处理方式(缺省、忽略、捕捉),并介绍了signal()、alarm()、kill()等关键函数的使用方法。文章还通过具体示例代码演示了如何利用信号实现进程间的异步通知和定时功能。这些IPC机制为Linux系统下的进程协作提供
2025-08-19 19:03:04
923
原创 线程间通信(互斥锁,死锁,信号量)
本文介绍了线程间通信的两种主要方式:互斥锁和信号量。互斥锁通过初始化、加锁、解锁和销毁等操作解决多线程资源竞争问题,但无法确定执行顺序。信号量不仅能实现互斥锁的功能,还能通过资源计数实现线程同步。文章通过代码示例展示了未使用互斥锁时出现的资源竞争问题,以及使用互斥锁后的正确运行效果。此外,还讨论了死锁的产生条件及预防方法,并演示了利用信号量实现线程同步(按顺序打印ABC)的完整示例,说明信号量比互斥锁具有更强的同步能力。
2025-08-18 19:24:34
1261
原创 线程(基本概念和相关命令)
本文介绍了线程的基本概念、函数接口和属性管理。线程是进程内的执行单元,共享进程的文本段、数据段和堆区,但独享栈区。相比多进程,多线程切换开销小、通信方便,但存在资源竞争和不安全问题。文章详细讲解了pthread_create、pthread_self、pthread_exit和pthread_join等线程操作函数,并提供了创建多个线程的代码示例。同时介绍了线程传参方法和两种线程属性:加入属性(需手动回收)和分离属性(自动回收),给出了设置分离属性的实现代码。
2025-08-17 23:47:54
958
1
原创 进程的基本概念和相关命令
本文摘要: 进程是程序的动态执行实例,包含创建、调度和消亡三个阶段。文章详细介绍了进程的空间分布(用户空间和内核空间)、虚拟地址与物理地址的转换机制(MMU),以及多进程存储和调度原理。重点讲解了进程管理相关命令(top、ps、kill等)、进程状态(就绪态、等待态、僵尸态等)及进程控制函数(fork、exec、wait等)。特别说明了fork的写时拷贝机制,以及孤儿进程和僵尸进程的产生与处理方法。最后介绍了exec函数族和system函数的实现原理,展示了如何通过fork和exec组合实现进程控制。
2025-08-15 21:15:11
1150
原创 Linux软件编程3.(文件IO和目录IO)
本文介绍了Linux系统中文件IO和目录IO的基本概念与操作函数。文件IO部分详细讲解了open、close、read、write、lseek等系统调用函数,以及与标准IO的对应关系,包括文件描述符、权限标志等关键参数。目录IO部分涵盖opendir、readdir、closedir等目录操作函数,以及getcwd、chdir等路径管理函数。文章还展示了深度优先和广度优先两种目录遍历算法实现,并介绍了时间处理相关函数如time、localtime等。通过多个代码示例,演示了文件操作、目录遍历和时间转换等实际
2025-08-13 21:03:50
846
原创 Linux软件编程2.(标准IO)
本文摘要: 本文系统介绍了Linux系统中的文件I/O操作,主要内容包括:1) Linux将一切视为文件,包括块设备、字符设备、目录等7种文件类型;2) 详细讲解了标准I/O操作,包括fopen/fclose、fgetc/fputc等核心函数的使用方法;3) 阐述了文件定位操作(fseek/ftell/rewind)和三种缓存机制(全缓存/行缓存/不缓存);4) 通过多个实例演示了文件读写、拷贝、统计等常见操作,特别说明了二进制文件操作注意事项。文章以大量代码示例展示了标准I/O库的实际应用,包括结构体读写
2025-08-12 20:18:04
1042
原创 Linux软件编程1.(shall命令)
本文介绍了Linux系统的基本概念和常用shell命令。主要内容包括:1)Linux系统概述,介绍Ubuntu、Debian等常见发行版和内核功能;2)Shell基础命令,包括文件操作、查看、查找等命令,以及通配符、管道、重定向等技巧;3)Shell脚本编程,涵盖变量、分支结构、循环结构、数组和函数等编程元素。文章系统地梳理了Linux系统管理和Shell编程的核心知识点,为初学者提供了实用的操作指南和编程参考。
2025-08-10 17:06:00
1106
原创 数据结构5.(哈希表及数据的排序和查找算法)
哈希算法通过将数据映射为键值实现高效存储和查找,时间复杂度接近O(1),但需注意哈希碰撞问题。哈希表通过取模运算确定存储位置,采用链地址法处理碰撞,包含插入和遍历操作。常见的排序算法包括选择排序、冒泡排序、插入排序、希尔排序和快速排序。查找算法中,折半查找是典型的分治策略应用。这些基础算法为数据处理提供了高效解决方案。
2025-08-09 10:31:40
927
原创 数据结构4.(二叉树)
本文介绍了树形结构和二叉树的定义、特性及操作。主要内容包括:1)树形结构的基本概念(节点类型、前驱/后继、层数、高度/深度等);2)二叉树及其特殊类型(满二叉树、完全二叉树)的特点;3)二叉树的遍历方法(DFS前/中/后序遍历和BFS层序遍历);4)C语言实现完全二叉树的创建、遍历(递归/非递归)、销毁等操作;5)树高度计算和非完全二叉树的创建方法。文章通过代码示例详细展示了二叉树的各种操作实现,包括递归和非递归遍历算法。
2025-08-08 11:15:37
982
原创 数据结构3.(栈和队列)
本文介绍了栈和队列两种线性数据结构。栈遵循"先进后出"原则,分为顺序栈和链式栈,详细说明了其创建、销毁、压栈/出栈操作及实现方法。队列遵循"先进先出"原则,包括循环队列和链式队列,阐述了其入队/出队操作及实现逻辑。特别对比了两者的差异:栈需要两个栈才能实现顺序打印,而队列可直接按输入顺序输出。文章通过代码示例展示了数据结构的C语言实现,包括类型定义、关键操作函数及内存管理方法。
2025-08-07 10:17:16
1042
原创 数据结构2.(双向链表,循环链表及内核链表)
本文详细介绍了三种链表的实现方法:双向链表、循环链表和内核链表。双向链表部分包含节点定义、创建、头插/尾插法、遍历、查找、修改、删除等操作实现;循环链表在双向链表基础上增加了循环特性,调整了遍历条件;内核链表部分分析了Linux内核中的链表实现,包括节点定义、初始化、插入/删除操作以及各类遍历宏定义。全文通过代码示例展示了链表的核心操作,重点比较了不同链表类型在实现上的差异,特别是循环链表和内核链表在结构设计和操作实现上的优化技巧。
2025-08-05 19:21:52
699
原创 数据结构1.(概念及链表)
本文系统介绍了数据结构与链表的相关知识。首先阐述了数据结构的基本概念,包括时间复杂度(O(1)、O(n)、O(logn)等)和空间复杂度的分析方法,以及逻辑结构(线性/非线性)和存储结构(顺序/链式等)的分类。重点讲解了链表的特点、分类(单向/双向/循环/内核链表)及各种操作实现:创建空链表、头插/尾插法、遍历查找(常规/中间/倒数节点)、增删改节点、链表倒置、排序(冒泡/选择)等核心算法,并提供了详细的C语言实现代码。最后介绍了Makefile工程管理工具的基本使用规则。全文内容详实,涵盖了链表数据结构的
2025-08-03 23:57:43
1242
原创 C语言进阶(位运算符,内存管理及代码调试)
本文摘要: 位运算符:介绍按位与(&)、或(|)、异或(^)、取反(~)及位移运算符(<< >>)的功能与优先级,展示通过位运算实现数据交换和位操作的应用实例。 内存管理:详解C语言堆区操作,包括malloc/free函数使用、内存泄漏问题及示例代码。强调动态内存分配后必须释放的重要性。 代码调试: 语法错误:区分warning和error,提供修改策略 逻辑错误:介绍printf打印调试和GDB工具使用 段错误:分析产生原因及gdb+core文件调试方法 内存泄漏检测:使用
2025-07-31 23:51:11
1288
原创 C语言高级(构造数据类型)
本文系统介绍了C语言中结构体、共用体和枚举的语法特性及应用。主要内容包括:1.结构体部分详细讲解了类型定义、变量声明、成员访问(.和->操作符)、内存对齐规则(4字节对齐)、传参方式(值传递和地址传递),并通过学生信息管理、日期计算等案例演示结构体的实际应用;2.共用体部分阐述了其与结构体的区别(共享内存空间),展示了使用共用体判断内存大小端的方法;3.枚举部分说明了枚举常量的定义语法和自动递增特性,并以工作日限行为例演示了枚举的实际应用。文中通过大量代码示例展示了这些复合数据类型的声明、初始化和操作
2025-07-30 20:14:56
1154
原创 C语言进阶(指针2.函数指针和指针函数,二级指针,指针数组和数组指针,void*指针)
本文介绍了C语言中指针的高级应用,主要包括指针函数与函数指针、二级指针、指针数组与数组指针以及void指针四部分内容。指针函数是返回指针的函数,需避免返回局部变量地址;函数指针指向函数,可实现回调功能。二级指针用于修改外部指针变量或处理指针数组。指针数组是元素为指针的数组,适合处理字符串;数组指针指向整个数组。void指针可存储任意类型地址,常用于通用参数传递。文中通过字符串处理、排序算法等示例代码详细演示了各类指针的使用方法。
2025-07-29 14:15:50
890
原创 C语言进阶(指针2.指针和数组的关系,const指针)
本文探讨了C语言中指针与数组的关系及应用。主要内容包括:1)数组名本质是指向首元素的指针常量,可通过指针运算访问数组元素(a[n]等价于*(a+n));2)数组作为函数参数传递的三种形式(带大小、不带大小、指针形式),并以冒泡排序为例说明;3)字符串处理应用,包括数字字符串转换和字符统计;4)const指针的四种形式及其限制(如不能修改指向值或指针本身)。文中通过多个代码示例(如数组遍历、字符串转换、字符统计等)具体展示了指针操作数组的技术要点和使用场景。
2025-07-27 23:59:19
553
原创 C语言进阶(指针1.指针的基本概念,操作,以及参数传递)
本文介绍了C语言中指针的核心概念与应用。主要内容包括:1)指针特点:简化代码、直接访问内存、硬件操作和间接访问;2)指针概念:地址与指针的区别,指针变量在64位系统中占8字节;3)关键运算符&和*的使用及类型转换;4)指针变量的定义、初始化和野指针/空指针问题;5)指针算术运算的偏移规则;6)指针作为函数参数实现地址传递;7)通过日期计算案例展示指针在函数间传递的应用,包括闰年判断、天数计算等。文中包含多个代码示例,如数字位求和、最大公约数计算等,帮助理解指针操作。
2025-07-26 13:18:54
1245
原创 C语言进阶(函数)
本文主要介绍了C语言中函数的相关概念和应用。内容涵盖:1)函数的作用与优势,如代码模块化和可读性提升;2)变量的作用域(局部/全局)和生存周期;3)内存分配机制(栈区、数据区等);4)函数定义、调用、嵌套和递归的实现方法;5)参数传递方式(值传递、数组传递);6)常用字符串处理函数的自定义实现(如strlen、strcpy等)。通过多个示例(如阶乘计算、斐波那契数列、排序算法等)详细演示了函数的实际应用,帮助理解函数在程序模块化设计中的核心作用。
2025-07-24 18:57:26
1094
原创 C语言进阶(数组3.二维字符串数组)
本文介绍了二维字符串数组的基本操作与应用。首先说明了二维字符串数组的定义方式,强调下标必须为常量。在访问方式上,可以通过行下标获取整行字符串,或通过行列下标访问特定字符。文章提供了终端接收字符串并打印的示例代码,并重点讲解了字符串排序的特殊处理:使用strcpy进行赋值,strcmp进行比较。演示了冒泡排序和选择排序两种方法对字符串进行排序的实现。最后给出一个字符串统计练习,统计输入字符串中的大小写字母、数字和空格的数量。这些内容涵盖了二维字符串数组的定义、访问、输入输出以及排序等核心操作。
2025-07-23 07:00:00
1513
原创 C语言进阶(数组2.二维整型数组,一维字符型数组)
本文介绍了二维整型数组和一维字符型数组的基本操作。二维数组部分包括定义(行列数必须为常量)、元素访问(行列可为变量)、初始化(全部/局部/默认)及终端输入输出方法。字符数组部分重点讲解了字符串处理:定义时要预留'\0'空间;printf和puts的打印区别;多种初始化方式;使用scanf/gets输入字符串;strlen与sizeof的区别;字符串拷贝、拼接、比较的实现方法及注意事项。最后提供了两个典型练习:字符串倒置和ASCII码排序,分别通过交换元素和冒泡排序实现。
2025-07-22 10:54:38
1239
原创 C语言进阶(数组1.一维整型数组)
本文介绍了数组的基本概念和操作。数组是由相同类型元素组成的有限集合,可分为一维、二维和多维数组。重点讲解了一维整型数组的定义、元素访问和初始化方法,强调定义时元素个数必须是常量表达式。详细说明了数组的存储方式(连续有序空间)和计算方法,并提供了从终端接收数组元素的示例。此外,还介绍了常见数组操作,包括求最值、倒置元素、冒泡排序和选择排序的实现方法,并给出了完整的代码示例。最后指出自定义输入时数组长度的计算方法与常规情况不同。
2025-07-19 19:13:35
439
原创 C语言基础知识(流程控制)
本文介绍了C语言中的三种程序控制结构及其应用。主要内容包括:1)顺序、分支和循环三种基本结构;2)分支结构中的if语句和switch语句,包括单分支、多分支和嵌套形式;3)循环结构中的while、do-while、for循环及goto语句,重点讲解了for循环的双层嵌套应用;4)辅助控制语句break、continue和return的作用。文中通过多个代码示例演示了这些结构的实际应用,如奇偶判断、字母转换、九九乘法表等,并强调了编程中的注意事项,如避免嵌套过多、正确使用break等。
2025-07-19 11:55:18
825
原创 C语言基础知识(输入和输出函数)
本文介绍了C语言中输入输出函数的基本用法。主要包括字符输入输出函数getchar/putchar,格式化输入输出函数scanf/printf,以及字符串输入输出函数gets/puts。重点说明了printf的输出控制符(%d、%f等)和格式控制(域宽、精度等),以及scanf的输入控制符使用注意事项(需加&符号、不读取空格回车等)。同时解释了特殊字符(\n、\t等)和数据类型转换(如有符号与无符号打印的区别)的原理。这些函数都需要包含头文件才能使用,是C语言基础而重要的内容。
2025-07-17 18:24:16
960
原创 C语言基础知识(表达式及运算符)
本文主要介绍了C语言中的表达式和运算符相关内容。在表达式部分,说明了表达式的定义、特点及混合运算时不同类型数据的转换规则,包括精度转换、自动类型提升等。运算符部分详细讲解了算术运算符(+、-、*、/、%、++、--)的使用特点,赋值运算符(=、+=、-=等)的类型转换规则,以及逗号运算符和sizeof运算符的用法。最后简要提及了运算符的优先级规则,括号优先级最高,其次是单目、双目等运算符,为后续学习输入输出函数打下基础。
2025-07-17 00:45:45
730
原创 C语言基础知识(数据类型,常量以及变量)
本文介绍了利用AI模型模拟Linux操作系统的可行性,测试了多种国内外AI模型的执行效果。然后重点讲解了C语言基础知识,包括程序运行原理、计算机单位、进制转换等。详细分析了C语言的数据类型,包括整数类型、字符类型、浮点数类型等的存储方式、值域范围和转换规则。最后介绍了常量和变量的定义与使用,包括各类常量表示法和变量命名规范。文章内容系统全面,适合C语言初学者学习基础知识。
2025-07-15 19:04:40
1159
原创 Linux系统命令以及简单的C语言代码开发
心得:Linux系统操作感觉太简陋了,windows只用鼠标就能完成的操作Linux系统还要一个一个用命令执行😂c语言开发也不如devc++高度集成来的方便,初学还是不太习惯,加油明天继续学点。暑假在家闲着,试着学习嵌入式😤今天熟悉了Linux的各个系统命令和简单的Linux系统下的c语言开发🤓感觉挺有趣的。ls//查看当前目录下所有文件(白色文本文件,蓝色目录文件)ls -a//查看当前目录下包括隐藏文件(.开头)的所有文件。gcc 文件名 -o 新的文件名//自定义可执行文件的文件名。
2025-07-14 20:41:44
610
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅