自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 问答 (1)
  • 收藏
  • 关注

原创 通信协议——IIC协议

IIC(Inter-Integrated Circuit)协议是一种同步串行通信接口,它采用半双工工作模式,即在同一时间只能进行单向的数据传输。总线由两条信号线组成:一条是数据线SDA(Serial Data Line),用于传输数据;另一条是时钟线SCL(Serial Clock Line),由主设备提供时钟信号,以确保所有连接到总线的设备同步进行数据交换。在I2C总线上,每个从设备都有一个唯一的地址,主设备通过发送这个地址来选择与其通信的目标设备。

2024-01-29 23:18:51 4410

原创 通信协议 —— 串口通信

串口,全称为串行接口(Serial Interface),是一种采用串行通信方式的硬件接口标准,主要用于设备间的简单、低速数据传输。串行接口的特点是逐位顺序发送和接收数据,即一次只传输一个数据位,在一根或者一对传输线上完成双向通信。二. RS-2322.1 基本概念RS-232(Recommended Standard 232)是最初由EIA(Electronic Industries Alliance,电子工业联盟)制定的一种串行通信接口标准。

2024-01-29 11:20:26 1367

原创 通信协议 —— 基本概念

虽然串行通信本身不直接提高抗干扰能力,但在同等条件下,由于其信号集中在一个或少数几个通道上传输,可以通过更好的屏蔽和信号处理技术来增强通信链路的稳定性和可靠性。:由于并行通信中每条线路都可能受到信号衰减和干扰的影响,随着传输距离增加,确保所有线路同步和准确接收数据的难度增大,因此并行通信适用于短距离通信场景。:在并行通信中,数据的不同位(比特)是通过多条独立的线路同时传送的。:由于多个数据位同时传递,所以相较于串行通信,并行通信具有更高的数据传输速率,特别适合于实时性要求高、需要快速交换大量数据的场合。

2024-01-28 21:31:48 672

原创 Linux——内核与驱动

用户级别(User Level)用户级别是操作系统中的级别,也称为用户空间。在用户级别中,运行着应用程序和用户空间的库。用户级别的代码通常是以用户身份运行的,没有直接访问系统资源或硬件设备的权限。应用程序通过系统调用接口与内核进行通信来请求操作系统提供的服务和资源。在用户级别,应用程序可以执行一般的计算任务和逻辑操作。内核级别(Kernel Level)内核级别位于用户级别和硬件级别之间。它包含了操作系统的内核空间,也称为内核态。

2023-10-27 11:02:11 225

原创 Linux——文件系统

例如,你可以将一个硬盘分为多个分区,比如/(根分区)、/home(用户数据分区)、/var(日志分区)等。根分区(/)是Linux系统的根目录,包含了操作系统的核心文件。无论是访问硬盘上的文件、网络上的文件还是其他存储设备上的文件,应用程序都可以通过虚拟文件系统来进行读取、写入、创建、删除等操作,而。例如,无论是读取硬盘上的文本文件,还是读取网络上的图片文件,应用程序都可以使用相同的打开、读取、关闭等操作来处理这些文件。它通过将文件路径映射到具体的文件系统上,并根据用户的权限来控制对文件的访问。

2023-10-26 09:31:17 47

原创 Linux —— 树莓派4B的内核编译

上电自检(Power-On Self-Test,POST):当嵌入式设备上电时,硬件会进行自检,以确保所有的硬件组件都正常工作。这个过程由设备的固件(如BIOS或UEFI)控制,它会检测和初始化处理器、内存、外设等硬件组件。引导加载程序(Bootloader):在自检完成后,引导加载程序被执行。引导加载程序是一个小型的软件程序,通常存储在设备的非易失性存储器中,如闪存或EEPROM。它的主要任务是加载操作系统的核心部分到内存中,并将控制权转交给操作系统。操作系统加载。

2023-10-25 20:18:12 395

原创 Linux —— 交叉编译

交叉编译是指在一台计算机上进行编译,生成在另一种不同体系结构或操作系统上运行的可执行程序或库文件。它通常用于开发跨平台的软件,或者在资源有限的嵌入式系统上进行开发。在传统的编译过程中,源代码会被编译成针对本地操作系统和硬件体系结构的机器码。而交叉编译则允许我们在一台计算机上使用特定的工具链,将源代码编译成针对目标平台的机器码。举个例子交叉编译就好像是一种特殊的翻译工作。假设有两个国家,一个是中国,另一个是美国。在中国,人们使用汉语来交流,而在美国,人们使用美语来交流。现在,我们想要。

2023-10-25 11:24:29 1810

原创 Linux —— 动态库与静态库

在程序运行时,不再需要额外加载静态库,因为所有需要的功能模块已经被链接到了可执行文件中。动态库在程序运行时并不直接嵌入到可执行文件中,而是在程序运行时被动态加载到内存中。它会将每条汇编指令翻译为对应的机器指令,并生成与目标平台相关的目标文件。GCC会将生成的目标文件与所需的库文件进行链接,生成最终的可执行文件。它包含了预编译的对象文件,其中包括函数、类和其他可重用的代码片段。它包含了预编译的对象代码,其中包括函数、类和其他可重用的代码片段。在编译链接阶段将库的代码直接嵌入到可执行文件中的库文件形式。

2023-10-24 18:55:26 24

原创 Linux —— 网络编程

当一个进程需要与另一个进程通信时,它需要创建一个Socket套接字来表示自己,并使用目标进程的IP地址和端口号来连接到对应的Socket套接字。你的朋友在收到邮件的小块后,按照编号的顺序将它们重新组装在一起,最终得到完整的邮件。一个进程通过IP地址和TCP或UDP端口号来标识自己,同一台计算机上不同的进程可以使用相同的IP地址但不同的端口号。例如,音频和视频流的传输、在线游戏的实时交互等。TCP就像是一个可靠的邮递员,负责将你发送的数据安全、完整地交付给目标设备,让你可以在互联网上进行可靠的通信。

2023-10-16 16:07:06 60

原创 Linux —— 多线程

线程是指在操作系统中,不同执行路径之间进行并发执行的最小单位。在多线程系统中,每个线程都共享同一个进程的内存空间和资源,可以直接访问进程内的数据和资源。线程之间通过共享的内存空间进行数据传输和协作,不需要使用进程间通信机制。通过线程的并发执行,可以提高程序的效率和响应性。

2023-10-13 12:47:35 33

原创 Linux —— 进程间的通信

进程间通信(Inter-Process Communication,简称IPC)是指在操作系统中,不同进程之间进行数据交换和信息传递的机制。在多进程系统中,每个进程都拥有自己独立的内存空间和运行环境,彼此之间无法直接访问对方的数据和资源。为了实现进程之间的数据传输和协作,需要使用进程间通信机制。常见的进程间通信方式包括:管道(Pipe)管道是一种半双工的通信方式,可以实现具有亲缘关系的父子进程之间的通信。命名管道(Named Pipe)

2023-10-12 21:10:27 104

原创 Linux —— 进程

由于vfork()函数共享父进程的地址空间,子进程对地址空间的修改会直接影响到父进程,可能导致竞争条件和错误。父进程可以设置一个信号处理函数,在子进程完成时向父进程发送一个特定的信号(如SIGCHLD),父进程接收到该信号后进行相应的处理。这意味着在vfork()函数中,子进程对地址空间的修改会直接影响到父进程。fork()函数会创建一个新的进程,并复制父进程的地址空间给子进程,使得子进程有自己独立的地址空间。父子进程的创建过程中,通过 fork() 函数的调用,操作系统创建了一个与父进程相同的子进程,

2023-10-11 19:58:33 28

原创 Linux —— 文件编程

Linux文件编程是指在Linux系统中使用编程语言进行文件操作的过程。它涵盖了创建、打开、读取、写入、关闭和删除文件等操作。在Linux中,一切皆文件,包括普通文件、目录、设备文件等。通过文件编程,可以使用各种编程语言(如C、C++、Python等)利用系统提供的接口和函数对这些文件进行操作。

2023-10-10 09:10:28 76

原创 C语言——内存管理

c语言不能直接操作物理内存,程序中使用的内存都是虚拟内存。对于C程序而言,内存空间主要由五个部分组成:数据段(data)未初始化数据段(bss)代码段(text)堆(heap)和栈(stack)组成,其中数据段和BSS段,代码段,是编译的时候由编译器分配的,而堆和栈是程序运行的时候由系统分配的。布局如下:​。

2023-10-08 15:44:06 158 1

原创 C语言——指针 ②

指针和数组根本就是两个完全不一样的东西。只是它们都可以“以指针形式”或“以下标形式”进行访问。一个是完全的匿名访问,一个是典型的具名+匿名访问。

2023-10-07 21:21:25 46 1

原创 C语言——指针 ①

指针是一种特定的数据类型包括int指针类型、char指针类型、double指针类型等等。指针用于存储变量或数据在内存中的地址。它可以指向其他变量或数据的位置,通过指针可以直接访问或修改这些数据。指针变量是用来存储内存地址的。总结:指针是程序数据在内存中的地址,而指针变量是用来保存这些地址的变量。指针变量的一般形式为:数据类型 *指针变量名解释:①数据类型表明指针所指向对象的类型②* 表明声明的变量是指针例如:int *p;//定义了一个指针变量p,指向整型变量。

2023-10-07 14:09:38 54 2

原创 第十七章 FreeRTOS的任务通知

FreeRTOS的每个任务都有一个32位的通知值,任务控制块中的成员变量ulNotifiedValue就是这个通知值。任务通知是一个事件,假如某个任务通知的接收任务,因为等待任务通知而阻塞的话,则向这个接收任务发送任务通知,就会解除这个任务的阻塞状态。使用任务通知时,任务结构体TCB中就包含了内部对象,可以直接接收别人发过来的"通知"1.1 任务通知值的更新方式① 不覆盖接收任务的通知值 (如果上次发送给接收任务的通知还没有被处理)。② 覆盖接收任务的通知值。

2023-10-06 17:03:06 55 1

原创 第十六章 FreeRTOS的事件标志组

事件标志位用于表明某个事件是否发生。比如下面的几个例子:1. 当收到一条消息并且把这条消息处理完以后,就可以将某个位(标志) 置1;当队列中没有消息需要处理的时候,就可以将这个位(标志) 置0。2. 当把队列中的消息通过网络发送以后,就可以将某个位(标志) 置1,当没有数据需要从网络发送出去的话,就可以这个位(标志) 置0。3. 当需要向网络中发送一个心跳信息,将某个位(标志)置1。现在不需要项网络中发送心跳信息,这个位(标志)置0。1.2 事件标志组。

2023-10-06 15:20:44 94 1

原创 第十五章 FreeRTOS的队列集

一个队列只允许任务间传递的消息为同一种数据类型,如果需要在任务间传递不同数据类型的消息时,那么就可以使用队列集。用于对多个队列或信号量进行“监听”,其中不管哪一个消息到来,都可让任务退出阻塞状态。1.1。

2023-10-05 22:24:05 42

原创 第十四章 FreeRTOS的信号量

信号量是操作系统中重要的一部分,信号量一般用来进行资源管理和任务同步,FreeRTOS中信号量又分为二值信号量、计数型信号量、互斥信号量和递归互斥信号量。不同的信号量其应用场景不同,但有些应用场景是可以互换着使用的。举一个例子,某个停车场有3个停车位,这3个停车位大家都可以用,对于大家来说这 3个停车位就是共享资源。假设有一个人需要在停车场停车:1. 首先判断停车场是否还有空车位(判断信号量是否有资源2. 停车场正好有空车位(信号量有资源。

2023-10-05 21:34:49 42

原创 第十三章 FreeRTOS的消息队列

队列是为了任务与任务、任务与中断之间的通信而准备的,可以在任务与任务、任务与中断之间传递消息,队列中可以存储有限的、大小固定的数据项目。任务与任务、任务与中断之间要交流的数据保存在队列中,叫做队列项目。队列所能保存的最大数据项目数量叫做队列的长度创建队列的时候会指定数据项目的大小和队列的长度。由于队列用来传递消息的,所以也称为消息队列。FreeRTOS 中的信号量的也是依据队列实现的!2.2 消息队列的特点2.2.1 数据入队出队方式先进先出(FIFO):往队列发送数据(入队。

2023-10-05 17:13:44 120

原创 第十二章 FreeRTOS的时间管理

函数描述相对延时绝对延时指每次延时都是从执行函数vTaskDelay()开始,直到延时指定的时间结束(任务被阻塞的时间,到调用此函数开始的时间);绝对延时指将整个任务的运行周期看成一个整体,适用于需要按照一定频率运行的任务(整个任务执行的时间,从头到尾的时间)。

2023-10-04 21:39:25 75 1

原创 第十一章 FreeRTOS的任务运行时间统计

接收任务运行时间信息的缓存指针1.1时间统计API函数-使用流程1.将宏置12.将宏置13.还需要。

2023-10-04 20:21:25 675 3

原创 第十章 FreeRTOS的时间片调度

同等优先级任务轮流地享有相同的 CPU 时间可设置),叫时间片;在FreeRTOS中,一个时间片就等于SysTick中断周期。在源码中,SysTick中断服务函数1ms中断一次,一个时间片就是1ms,滴答定时器SysTick的中断周期可以自己设置。

2023-10-04 19:32:32 107 1

原创 第九章 FreeRTOS的任务调度

一.开启任务调度器任务创建好后,如果不开启任务调度器,任务将不能被执行。任务调度器启动后, FreeRTOS 便会开始进行任务调度。

2023-10-04 17:54:22 283 1

原创 第八章 FreeRTOS的列表与列表项

是 FreeRTOS 中的一个数据结构,概念上和链表有点类似,列表被用来跟踪 FreeRTOS中的任务。列表有阻塞、就绪、挂起列表等,这些列表用来表示任务的状态。是存放在列表中的项目。列表项类似于链表的节点,列表项可以理解为存放数据的,一个数据的下一个next或者上一个prev指向谁,还有是一个数据代表哪一个任务。列表相当于链表,列表项相当于节点,FreeRTOS中的列表是一个双向环形链表。列表的特点列表项间的地址是非连续的(地址连不连续无所谓,

2023-09-13 15:34:21 49 1

原创 第七章 FreeRTOS的临界区与任务调度器

任务级进入临界段任务级退出临界段中断级进入临界段(中断服务函数中调用中断级退出临界段(中断服务函数中调用。

2023-09-11 17:01:41 294

原创 第六章 FreeRTOS的中断管理

一. 了解什么是中断一. 了解什么是中断认识:让CPU打断正常运行的程序,转而去处理紧急的事件,就叫做中断。中断执行机制,可简单概括为三步:①中断请求:外设产生中断请求(GPIO外部中断、定时器中断等);② 响应中断:CPU停止执行当前程序,转而去执行中断处理程序;③退出中断:执行完毕,返回被打断的程序处,继续往下执行。(打断哪个点,就返回哪个点继续执行)

2023-08-11 23:24:06 263 1

原创 第五章 FreeRTOS的任务挂起与恢复

参数介绍待恢复任务的任务句柄。参数介绍待恢复任务的任务句柄。函数返回值描述pdTrue任务恢复后需要进行任务切换(恢复的任务优先级,大于当前正在执行的任务优先级)pdFALSE任务恢复后不需要进行任务切换。

2023-08-10 00:05:20 102 1

原创 第四章 FreeRTOS的任务创建与删除

任务栈栈顶。必须为TCB的第一个成员,因为和任务切换、任务上下文保存、任务恢复都息息相关。任务状态列表项。任务处于的状态保存在此参数中,比如:就绪态、挂起态、阻塞态、运行态。任务事件列表项。如果当前正在等待某些事件,就会用到此参数。任务优先级。数值越大,优先级越大。当前任务的优先级存在此参数中。*pxStack:任务堆栈的首地址。任务名字。二. 任务的删除2.1 任务删除函数。

2023-08-04 22:44:57 231 1

原创 第三章 FreeRTOS的系统配置

config”开始的宏“INCLUDE_”开始的宏:使用“INCLUDE_”开头的宏用来表示使能或除能FreeRTOS 中相应的 API 函数,作用就是用来配置 FreeRTOS 中的可选 API 函数的。

2023-08-03 00:00:01 120

原创 第二章 FreeRTOS的基础知识

③ 任务中途被打断或者阻塞,没有用完的时间片不会再使用,下次该任务得到执行还是按照一个时间片的时钟节拍运行。② 同等优先级的任务轮流享有相同的CPU时间(时间片),一个时间片的大小,取决于滴答定时器中断周期。正在执行的任务,该任务就处于运行态,注意在STM32中,同一时间仅有一个任务处于运行态。,当多个任务的优先级相同时,任务调度器会在每一次系统时钟节拍到的时候切换任务。32位的变量,当某个位,置一时,代表所对应的优先级就绪列表有任务存在。,每个任务都有一个优先级,优先级高的任务可以抢占优先级低的任务。

2023-07-31 23:51:52 33 1

原创 第一章 FreeRTOS的入门

我们看一下FreeRTOS 的名字,可以分为两部分:Free 和RTOS,Free 就是免费的、自由的、不受约束的意思,RTOS 全称是Real Time Operating System,中文名就是实时操作系统。RTOS 不是指某一个确定的系统,而是指一类系统。比如UCOS,FreeRTOS,RTX,RT-Thread 等这些都是RTOS 类操作系统。

2023-07-31 23:10:55 83 1

空空如也

空空如也

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

TA关注的人

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