- 博客(54)
- 收藏
- 关注
原创 重头开始嵌入式第四十八天(Linux内核驱动 linux启动流程)
操作系统是管理计算机硬件与软件资源的计算机程序。操作系统内核是操作系统的核心部分,它负责管理系统的最基本功能和资源,直接与硬件交互,并为上层软件提供基础服务。驱动,全称为设备驱动程序,是一种特殊的软件,它在计算机系统中起着至关重要的作用。主要作用:连接硬件与操作系统:驱动程序充当了硬件设备和操作系统之间的桥梁。不同的硬件设备有着各自独特的工作方式和指令集,而操作系统需要一种统一的方法来与这些设备进行交互。
2024-10-10 21:00:20
1548
原创 重头开始嵌入式第四十七天(硬件 ARM裸机开发 RS232 RS4885 IIC)
RS232是美国电子工业协会颁布的一种串行物理接口标准。RS485是由美国电子工业协会制定的一种通信标准。IIC(Inter-Integrated Circuit),也称为 I²C(“I-squared-C”),中文叫集成电路总线。它是一种串行通信总线,由飞利浦公司在 1980 年代为连接主板、嵌入式系统或手机等的低速周边设备而发展。
2024-10-09 21:46:50
1801
原创 重头开始嵌入式第四十六天(硬件 ARM裸机开发 ADC 中断 UART)
ADC(Analog-to-Digital Converter)即模拟数字转换器。在计算机系统中,中断是一种非常重要的机制。中断是指计算机在执行程序的过程中,由于出现了某些突发事件(如外部设备请求服务、定时器溢出等),暂停当前正在执行的程序,转而去执行相应的中断处理程序,处理完突发事件后再返回到被中断的程序继续执行。在芯片和通信领域中,UART(Universal Asynchronous Receiver/Transmitter)即通用异步收发传输器。
2024-10-09 20:39:39
1502
原创 重头开始嵌入式第四十五天(硬件ARM裸机开发 时钟配置 看门狗 )
总之,看门狗是一种重要的系统监测和故障恢复机制,能够提高系统的可靠性和稳定性,保障系统的正常运行。例如,在处理器中,时钟信号用于同步指令的取指、译码和执行等阶段,保证每个操作都在规定的时间窗口内完成。1. 高性能需求场景 - 例如在图形处理、科学计算等对运算速度要求很高的应用中,可以将时钟频率设置得较高,使芯片以更快的速度处理数据,提高系统的整体性能。PCLK 是提供给用于外设如 WDT,IIS,I2C,PWM 定时器,MMC/SD 接口,ADC,UART,GPIO,RTC 和。Fref 意思为参考。
2024-10-09 19:43:52
1115
原创 重头开始嵌入式第四十四天(硬件 ARM裸机开发)
总之,ARM 裸机开发是一种直接在 ARM 处理器上进行软件开发的方法,具有直接控制硬件、高效性、资源占用少等特点。在进行 ARM 裸机开发时,需要掌握硬件知识、编程语言、开发工具等方面的技能,并且需要进行充分的测试和优化,以确保程序的稳定性和可靠性。在某些特定的应用场景中,由于资源受限、对实时性要求极高或者为了追求更高的性能和效率,开发者会选择进行 ARM 裸机开发。总之,三星 S3C2440A 是一款功能强大、性能优异的微控制器,在嵌入式系统开发中具有重要的地位,为各种嵌入式应用提供了可靠的解决方案。
2024-09-27 21:29:58
1689
原创 重头开始嵌入式第四十三天(硬件 ARM架构 汇编语言)
汇编语言是一种低级编程语言,它使用助记符来代表机器指令,以便程序员更容易理解和编写程序。以下是关于汇编语言的详细介绍:一、定义与特点1. 与机器语言的关系:- 汇编语言是机器语言的一种符号化表示。机器语言是由二进制代码组成的指令集,直接被计算机硬件执行。而汇编语言用易于记忆的助记符(如 MOV 表示数据传送、ADD 表示加法等)和符号来代替机器语言的二进制指令,使得程序员能够更方便地编写程序。2. 特点:- 直接操作硬件:汇编语言可以直接访问计算机的硬件资源,如寄存器、内存地址和 I/O 端口等。
2024-09-26 20:27:24
1703
2
原创 重头开始嵌入式第四十二天(硬件 ARM体系架构)
一、处理器处理器,也称为中央处理器(CPU),是计算机系统的核心部件。它主要负责执行计算机程序中的指令,对数据进行运算和处理,以实现各种计算任务。处理器的主要功能包括:指令执行:从内存中读取指令,并按照指令的要求进行操作,如算术运算、逻辑运算、数据传输等。数据处理:对输入的数据进行加工和处理,生成输出结果。控制计算机系统:协调和控制计算机系统中各个部件的工作,确保整个系统的正常运行。
2024-09-25 21:14:38
2316
原创 重头开始嵌入式第四十一天(数据结构 树 哈希表)
树:n(n>=0)个结点的有限集合。n = 0 ,空树。在任意一个非空树中,1,有且仅有一个特定的根结点2,当n>1 时,其余结点可分为m个互不相交的有限集合T1,T2,T3.。。。。Tm,其中每一个集合又是一个树,并且称谓子树。结点拥有子树的个数称谓结点的度。度为0的结点称谓叶结点。度不为0,称谓分支结点。树的度数是指,这棵树中,最大的结点的度数,称谓树的度数。树的深度或高度,从根开始,根为第一层,根的孩子为第二层。树的存储,顺序结构,链式结构。
2024-09-14 17:04:08
1577
原创 重头开始嵌入式第四十天(数据结构 队列)
在 C 语言中,队列(Queue)是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,在表的后端(rear)进行插入操作。int front;int rear;} Queue;在这个定义中:- data 数组用于存储队列中的元素。- front 表示队列的前端,用于删除元素。- rear 表示队列的后端,用于插入元素。队列具有以下特点:- 先进先出(FIFO):先进入队列的元素先被取出。- 当队列满时,不能再进行插入操作;当队列空时,不能再进行删除操作。
2024-09-13 21:31:02
671
原创 重头开始嵌入式第三十九天(数据结构 栈)
栈是一种数据结构,它具有以下特点:1. 只能在一端进行插入和删除操作,这一端被称为栈顶。2. 遵循“后进先出”(Last In First Out,LIFO)的原则。也就是说,最后进入栈的元素最先被弹出。3. 可以用数组或链表来实现。例如,把书一本一本叠放在桌子上,只能从最上面取书或放书,这就类似栈的操作。后放上去的书先被拿走,符合“后进先出”原则。
2024-09-13 10:25:55
884
原创 从头开始嵌入式第三十八天(数据结构 双向链表)
2. 相比单向链表,双向链表在某些操作上更加灵活,比如在删除节点时,可以快速找到前驱节点进行调整,而单向链表需要从头开始遍历才能找到前驱节点。1. 每个节点包含两个指针,分别指向直接前驱节点和直接后继节点。这使得在双向链表中可以双向遍历,既可以向前也可以向后查找节点。1. 插入操作:可以快速确定插入位置的前后节点,进行指针调整,实现高效的插入操作。1. 需要频繁进行前后遍历的场景,如文本编辑器中对字符的双向移动和操作。2. 删除操作:由于能够直接访问前驱节点,删除操作也更加方便快捷。
2024-09-11 20:39:26
771
原创 重头开始嵌入式第三十六天(数据结构 顺序表)
数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。具体来说,它包括以下两个方面:1. 数据元素:是数据的基本单位,可以是数字、字符、记录等。2. 特定关系:数据元素之间的关系可以是逻辑关系,如线性关系、树状关系、图状关系等;也可以是物理关系,即数据在计算机内存中的存储方式。数据结构的选择对于算法的效率和程序的性能至关重要。不同的数据结构适用于不同的应用场景,例如,数组适合随机访问但插入和删除操作效率较低;链表适合频繁的插入和删除操作但随机访问效率不高;
2024-09-10 11:42:40
1454
原创 重头开始嵌入式第三十四天(数据库二)
当一个表中的数据发生变化时,可以自动更新其他相关表中的数据,以保持数据的一致性。例如,当一个客户的联系方式在客户表中被更新时,可以自动更新与该客户相关的订单表中的联系方式。例如,有一个“学生表”和一个“成绩表”,通过学生的 ID 进行内连接,将只返回有成绩记录的学生信息。因此,在设计触发器时,应尽量避免复杂的逻辑和大量的计算,以减少对性能的影响。例如,可以使用子查询生成一个包含特定条件的产品列表,然后在外部查询中对这个列表进行进一步的操作。这意味着事务执行前后,数据库中的数据必须满足特定的约束条件。
2024-09-05 21:23:49
1384
原创 重头开始嵌入式第三十五天(网页设计)
Web 网页是通过互联网访问的文档,通常由 HTML(超文本标记语言)、CSS(层叠样式表)和 JavaScript 等技术构建而成。Web 网页具有以下特点:一、内容呈现1. 多媒体展示- 可以包含文本、图像、音频、视频等多种形式的内容,为用户提供丰富的信息和娱乐体验。- 例如,新闻网页会有文字报道、图片新闻以及相关的视频报道。2. 动态更新- 网页内容可以随时更新,保持信息的时效性。新闻网站、博客等经常会发布新的文章和资讯,用户每次访问都可能看到不同的内容。
2024-09-05 21:01:32
1223
原创 重头开始嵌入式第三十三天(数据库)
从管理角度来说,数据库提供了数据管理的功能,包括数据的插入、删除、修改和查询等操作。你可以根据特定的需求对数据库中的数据进行增删改查,以确保数据的准确性和完整性。数据库还具有数据独立性,即数据的存储结构和逻辑结构可以独立变化,而不会影响应用程序对数据的访问。insert into user1 values (2,'张三',23,datetime('now','+8 hours'));sqlite> insert into user3 (NULL,'李四',23,datetime('now'));
2024-09-04 17:31:48
1952
原创 重头开始嵌入式第三十一天(IO多路复用)
这样多个事件流就可以并发进行,不需要一个等待另一个太久,在用户看起来他们似乎就是并行在做一样。④ select返回-1表示错误,返回0表示超时时间到没有监听到的事件发生,返回正数表示监听到的所有事件数(包括可读,可 写,异常),通常在处理事件时 会利用这个返回值来提高效率,避免不必要的事件触发检查。① readfds等是指针结果参数,会被函数修改,所以一般会另外定义一个allread_fdset,保持全部要监听读的句柄,将它的拷贝传递给select函数,返回可读的句柄集合,类型fdset支持赋值运算符=;
2024-09-02 18:00:18
1275
原创 重头开始嵌入式第三十天(Linux系统编程 ip头)
请注意,这个字段所表示数的单位是32位字长(1个32位字长是4字节),因此,当IP的首部长度为1111时(即十进制的15),首部长度就达到60字节。当数据报由于长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中。当一个数据报封装成链路层的帧时,此数据报的总长度(即首部加上数据部分)一定不能超过下面的数据链路层的MTU值。1. 简单快速传输:UDP 是一种无连接的协议,不需要建立连接的过程,因此传输速度快,适用于对实时性要求较高的应用,如视频流、音频流等。
2024-09-02 11:46:05
1448
原创 重头开始嵌入式第二十九天(Linux系统编程 网络通信 tcp)
2. 服务器:接收客户端的请求,并进行相应的处理,然后将结果返回给客户端。服务器可以是 Web 服务器、应用服务器等,负责存储数据、处理业务逻辑等。2. 服务器:通常是高性能的计算机系统,负责存储和管理数据、处理客户端的请求,并将结果返回给客户端。1. 去中心化:P2P 网络中没有中心服务器,各个节点之间直接进行通信和资源共享,每个节点既是资源的提供者,又是资源的使用者。localaddr.sin_addr.s_addr= inet_addr("192.168.1.100") ///本机ip。
2024-08-28 19:55:47
1668
原创 重头开始嵌入式第二十八天(Linux系统编程 网络通信 套接字)
举例:TCP是面向连接的协议,在传输数据前要先建立连接,通过三次握手建立连接,通讯完成时要拆除连接,可提供可靠的数据流服务,采用“带重传的肯定确认”技术实现传输的可靠性,还通过“滑动窗口”方式进行流量控制,如在文件传输、电子邮件发送等场景中,需要保证数据的准确无误传输,通常会使用TCP协议;SMTP(简单邮件传输协议),用于发送电子邮件;- 举例:两台电脑通过网卡进行数据的发送和接收,每个网卡都有一个独特的地址即MAC地址,以太网数据以帧为单位,包括标头和数据部分,以太网在子网内以广播的形式发送数据。
2024-08-27 17:20:41
994
原创 重头开始嵌入式第二十七天(Linux系统编程 信号通信)
1、必须事先定义自定义函数,必须是如下格式:void fun(int sig) ////sig 接收到的信息编号。
2024-08-26 21:16:26
1043
原创 重头开始嵌入式第二十六天(Linux系统编程 进程间通信 IPC)
2. 只能在具有亲缘关系(如父子进程)的进程间使用:通常是父进程创建管道,然后创建子进程,子进程会继承父进程的文件描述符,从而实现通过管道通信。4. 管道的容量有限:通常是一个有限的缓冲区大小,如果写入的数据超过了缓冲区的容量,写进程会被阻塞,直到读进程读取数据腾出空间。无名管道只能在具有亲缘关系的进程间使用,而有名管道可在无亲缘关系的进程间通信。进程间通信在多进程和多线程编程中起着至关重要的作用,使得不同的进程能够协同工作,完成复杂的任务。6. 生命周期随进程:如果参与通信的进程结束,管道也会被销毁。
2024-08-23 18:27:46
1287
原创 重头开始嵌入式第二十二天(Linux系统编程 进程)
进程是操作系统中的一个重要概念。进程是指一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程。进程包含了程序执行所需的各种资源,如内存空间、CPU 时间、打开的文件、I/O 设备等。它具有动态性,即进程是程序的执行过程,会因各种条件而产生状态的变化,如创建、就绪、运行、阻塞、终止等。进程还具有并发性,在多道程序环境下,多个进程可以并发执行。独立性,进程是系统进行资源分配和调度的基本单位。
2024-08-19 17:46:45
1362
1
原创 重头开始嵌入式第二十一天(Linux系统编程 文件相关函数)
perror”函数的使用非常方便,它能够以直观的方式将用户自定义的描述和系统生成的具体错误消息结合起来,帮助开发者快速理解和定位错误的原因。但需要注意的是,它只能输出与 errno 相关的错误信息,如果错误并非通过设置 errno 来标识,那么 perror 可能无法提供准确有用的信息。它可以根据文件的修改时间来决定哪些部分需要重新编译,从而节省编译时间。当调用 perror 函数时,它首先输出传入的字符串,然后输出一个冒号和空格,接着输出与当前 errno 值对应的系统错误消息。
2024-08-15 17:43:28
1459
原创 重头开始嵌入式第二十天(Linux系统编程 目录操作)
在 C 语言中, fileno 函数用于获取与指定文件流相关联的文件描述符。参数 stream 是一个指向 FILE 结构的指针,通常是通过 fopen 函数打开文件时返回的文件指针。返回值是一个整数,表示对应的文件描述符。例如,如果您有一个通过 fopen 打开的文件指针 fp ,可以使用 fileno(fp) 来获取其对应的文件描述符。
2024-08-14 18:27:26
1154
原创 重头开始嵌入式第十九天(Linux系统编程 文件IO)
1.行缓冲行缓冲,1k, terminal,主要用于人机交互stdout缓存区满或者遇到\n刷新 1024行缓存多是关于终端的一些操作1.遇到\n刷新2.缓存区满刷新3.程序结束刷新4.fflush刷新 fflush(stdout);2.全缓冲全缓冲,4k,主要用于文件的读写缓存区满刷新缓存区 4096对普通文件进行标准IO操作,建立的缓存一般为全缓存刷新条件:1.缓存区满刷新2.程序结束刷新3.fflush来刷新 fflush(fp);
2024-08-13 18:27:17
1145
原创 重头开始嵌入式第十八天(Linux系统编程 标准IO)
Linux 系统编程涵盖了众多方面的知识和技术:1. 文件 I/O 操作:包括打开、读取、写入、关闭文件,以及处理文件的权限、属性等。2. 进程管理:创建新进程、进程的终止、等待进程结束、进程的执行状态控制等。3. 信号处理:接收和处理系统发送的各种信号,以响应特定的事件。4. 线程编程:创建、同步和管理线程,实现多线程并发执行。5. 进程间通信(IPC):如管道、消息队列、共享内存、信号量等方式,实现不同进程之间的数据交换和协调工作。
2024-08-12 18:01:24
918
1
原创 重头开始嵌入式第十七天(枚举,typedef,位运算)
在 C 语言中,枚举(Enumeration)是一种用户自定义的数据类型。在这个例子中, Day 是枚举类型, Mon 、 Tue 等是枚举常量。枚举的主要用途包括增强代码的可读性和可维护性,使代码更清晰地表达特定的离散值集合。在 C 语言中使用枚举,通常遵循以下步骤:1. 定义枚举类型:如 enum Day {MON, TUE, WED, THU, FRI, SAT, SUN};2. 声明枚举变量:可以像声明普通变量一样声明枚举变量,例如 enum Day today;
2024-08-10 19:45:05
1017
原创 重头开始嵌入式第十六天(结构体,共用体)
struct 结构体名 {数据类型 成员名 1;数据类型 成员名 2;// 可以有多个成员...例如:int id;或者结构体在 C 语言中应用广泛,常用于组织和处理复杂的数据结构,如链表、树等。union 共用体名 {数据类型 成员名 1;数据类型 成员名 2;// 可以有多个成员...例如:int i;float f;
2024-08-09 18:50:21
1311
原创 重头开始嵌入式第十五天(指针操作二维数组,指针的数组,指针的指针,函数指针,回调函数)
二维字符型数组的指针指向的是字符数据,而普通数组指针指向的是其他特定的数据类型,如整数、浮点数等。总之,使用指针访问二维数组元素的关键在于理解二维数组在内存中的存储方式以及如何通过指针的移动和计算偏移量来准确地定位和访问所需的元素。总的来说,尽管操作方式相似,但由于数据类型的差异,它们在具体的应用和处理细节上会有所不同,需要根据具体的需求和场景来正确使用。通过对 argc 和 argv 的处理,可以使程序根据不同的命令行输入执行不同的操作,增强了程序的灵活性和交互性。
2024-08-08 18:47:25
1139
原创 重头开始嵌入式第十四天(指针操作字符串)
在 C 语言中, const 关键字用于声明常量。以下是 const 关键字的常见用法:1. 修饰变量:- 声明一个值不能被修改的变量。例如: const int num = 10;在此之后,尝试修改 num 的值将会导致编译错误。2. 修饰指针:- 指向常量的指针: const int *ptr;表示指针指向的内容不能通过该指针修改,但指针本身可以指向其他地址。- 常量指针: int * const ptr;表示指针本身不能指向其他地址,但可以通过该指针修改其指向的内容。
2024-08-07 18:06:10
790
原创 人工智能时代,程序员如何保持核心竞争力?
在这个充满创意的时代,仅仅会模仿和应用现有的技术是远远不够的。比如,字节跳动开发的抖音,其独特的推荐算法和创意的短视频模式,在全球范围内取得了巨大的成功。实际的项目开发是检验我们技术水平的最佳方式,通过参与不同类型、规模的项目,我们能够积累宝贵的实践经验,提高解决实际问题的能力。在技术社区积极分享自己的知识和经验,发表有价值的技术文章,参与开源项目,都能提升我们的知名度和影响力。在这个充满变革和挑战的时代,作为程序员的我们,如何在汹涌的科技浪潮中保持核心竞争力,不被淘汰,是一个值得深入思考的问题。
2024-08-07 16:53:50
1598
原创 重头开始嵌入式第十三天(指针那些事儿)
昨天给指针开了个头,今天就正式开始指针的归纳总结了,指针是c语言的特点,可以说没有学指针,就不算学了c,昨天说了指针的概念,定义及使用,今天来讲解一下指针的进阶用法。
2024-08-06 18:57:21
847
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人