协议栈工作原理介绍

合集下载

uefi usb协议栈工作原理

uefi usb协议栈工作原理

uefi usb协议栈工作原理UEFI(统一的可扩展固件接口)是一种用于替代传统BIOS的固件接口标准。

UEFI USB协议栈是UEFI固件中负责处理USB设备的软件模块。

其工作原理涉及以下几个方面:1. 初始化,当计算机开机时,UEFI固件会初始化USB控制器,并加载USB协议栈。

这个过程包括检测和识别连接到USB端口的设备,并为每个设备分配资源。

2. 设备枚举,UEFI USB协议栈会对每个被识别的USB设备进行枚举。

它会与设备进行通信,获取设备的描述信息,包括设备类型、供应商ID、产品ID等。

根据这些信息,协议栈可以确定如何与设备进行交互。

3. 驱动加载,UEFI USB协议栈会加载适当的设备驱动程序,以便操作系统能够与USB设备进行通信。

这些驱动程序可以是UEFI固件中内置的,也可以是操作系统提供的。

4. 数据传输,一旦设备枚举和驱动加载完成,UEFI USB协议栈可以开始处理USB数据传输。

它会提供一组API(应用程序接口),供操作系统或其他应用程序使用。

这些API包括发送和接收数据的函数,以及控制USB设备的函数。

5. 错误处理,UEFI USB协议栈还负责处理USB设备的错误情况。

如果在数据传输过程中发生错误,协议栈会尝试重新发送数据或进行错误恢复。

它还可以向操作系统报告错误,以便进行相应的处理。

总的来说,UEFI USB协议栈的工作原理是通过初始化、设备枚举、驱动加载、数据传输和错误处理等过程,实现与USB设备的交互和通信。

它为操作系统提供了一个统一的接口,使得操作系统能够方便地管理和控制USB设备。

深入浅出低功耗蓝牙(BLE)协议栈

深入浅出低功耗蓝牙(BLE)协议栈

深入浅出低功耗蓝牙(BLE)协议栈低功耗蓝牙(BLE)协议栈是一种用于低能耗设备间通信的无线通信技术。

它主要用于物联网设备、传感器和其他低功耗设备之间的通信。

本文将深入浅出地介绍BLE协议栈的工作原理和主要组件,以及其在物联网和其他领域的应用。

BLE协议栈由多个层级组成,包括物理层(PHY)、链路层(LL)、主机控制器接口(HCI)、主机层(Host)和应用层(Application)。

每个层级负责不同的功能,并通过各自的接口与上下层通信。

物理层是BLE协议栈的最底层,负责将数据转化为无线信号进行传输。

BLE使用2.4GHz频段进行通信,采用频率跳变技术来抵抗干扰和提高传输稳定性。

链路层建立在物理层之上,负责处理与设备之间的连接和数据传输。

它包括广播(Advertisement)和连接(Connection)两种传输模式。

广播模式用于设备之间的发现和配对,而连接模式用于实际的数据传输。

主机控制器接口(HCI)是链路层与主机层之间的接口,负责传输控制命令和事件信息。

主机层负责处理设备的连接管理、数据传输和高层协议等任务。

应用层则是最上层,负责处理具体的业务逻辑和应用程序。

BLE协议栈的工作流程一般分为广播、扫描、连接和数据传输四个阶段。

在广播阶段,设备会周期性地发送广播包,以便其他设备发现和连接。

扫描阶段是其他设备主动并发现正在广播的设备。

连接阶段是建立起连接后的设备之间进行数据传输。

数据传输阶段则是实际进行数据交换的阶段。

BLE协议栈的优势在于其低功耗、简单易用和成本低廉。

它适用于大量的物联网设备,如健康追踪器、智能家居设备等。

同时,BLE协议栈也在其他领域有着广泛的应用,例如无线鼠标、键盘、耳机等。

总之,低功耗蓝牙(BLE)协议栈是一种用于低能耗设备间通信的无线通信技术,具有低功耗、简单易用和成本低廉等优势。

它在物联网和其他领域有着广泛的应用,为设备间的通信提供了可靠和高效的解决方案。

BLE协议栈——UARTDMA工作方式

BLE协议栈——UARTDMA工作方式

BLE协议栈——UARTDMA工作方式BLE(蓝牙低功耗)协议栈是一种用于无线通信的协议,并且非常利于低能耗的设备之间的通信,如物联网设备。

BLE协议栈包含了多个层次的协议,其中包括物理层、链路层和主机控制器接口层等。

在BLE协议栈中,UARTDMA(串口直接内存访问)是一种常见的工作方式,下面我们将详细介绍UARTDMA的工作原理和流程。

UARTDMA是一种使用DMA技术进行数据传输的串口通信方式。

DMA(直接内存访问)是一种用于高速数据传输的技术,其通过在外设和内存之间建立直接的数据通路,减少了处理器的介入,提高了数据传输的效率。

在UARTDMA工作方式下,首先需要初始化DMA控制器和串口控制器。

DMA控制器负责管理数据在内存和外设之间的传输,而串口控制器负责串口的配置和数据的发送和接收。

在数据发送过程中,首先将要发送的数据写入到内存缓冲区中。

然后,通过配置DMA控制器的相关寄存器,将内存缓冲区的地址设置为源地址,将串口数据寄存器的地址设置为目的地址,并设置数据长度。

当DMA控制器检测到数据发送请求时,会自动将数据从内存缓冲区传输到串口数据寄存器中,并通过串口发送出去。

在数据接收过程中,首先配置DMA控制器,将串口数据寄存器的地址设置为源地址,将内存缓冲区的地址设置为目的地址,并设置数据长度。

当DMA控制器检测到数据接收请求时,会自动将数据从串口数据寄存器中传输到内存缓冲区中。

UARTDMA工作方式的主要优点是降低了CPU的负载,提高了数据传输的效率。

由于DMA可以在不影响CPU的情况下进行数据传输,所以CPU可以将更多的时间用于其他任务处理,提高了系统的性能。

然而,UARTDMA工作方式也存在一些局限性。

首先,由于DMA的使用需要占用一部分系统资源,所以在资源有限的嵌入式系统中可能无法使用。

其次,在数据传输过程中,如果DMA控制器和串口控制器之间没有很好的同步机制,可能会导致数据传输错误或数据丢失的问题。

wifi技术协议栈

wifi技术协议栈

wifi技术协议栈Wifi技术协议栈是一种网络通讯软件,它详细定义了在无线网络中如何传输数据、管理网络资源以及协作处理错误。

这种技术协议栈由七层模型组成,每一层负责不同的功能。

下面是关于Wifi技术协议栈的详细说明:1. 物理层Wifi协议栈的最底层是物理层。

这层定义了如何在无线环境中传输二进制数据。

它包括物理介质、电缆、连接器、传输速率等细节。

物理层的主要目标是将数字信息转换为能够在物理环境中传输的模拟信号。

2. 数据链路层Wifi协议栈的第二层是数据链路层,它主要处理数据的传输和错误控制。

此层负责将上层数据组织成数据帧,并在完成了数据的传输之后接收和处理这些数据帧。

数据链路层还使用CRC等技术进行差错校验,以避免在传输过程中数据的丢失和损坏。

3. 网络层Wifi协议栈的第三层是网络层。

此层主要处理在网络中中点到中点的通讯。

在这一层,数据被组织成数据包,并使用IP协议进行传输。

网络层还负责路由决策,以确保数据包能够最有效地传输到目标地址。

4. 传输层Wifi协议栈的第四层是传输层。

此层负责处理端到端的数据传输。

传输层使用一些流行的协议如TCP(传输控制协议)或UDP(用户数据报协议),以确保数据对目标设备进行适当的传输。

5. 会话层Wifi协议栈的第五层是会话层。

此层主要负责建立、维护和中断与其他设备的会话。

会话层还用于管理网络应用之间的通信。

6. 表示层Wifi协议栈的第六层是表示层。

此层主要负责将数据从一个设备转换为能够在其他设备上正常读取的格式。

表示层还负责数据的压缩、加密和解密。

7. 应用层Wifi协议栈的最高层是应用层。

此层包括一些常见的应用程序,如Web浏览器、电子邮件和文件传输。

应用层根据用户的需求和目的,选择适当的协议和网络服务,进行数据的传输和处理。

总之,Wifi技术协议栈是一种协议体系,它涵盖了网络通讯的所有方面,通过分层结构来分解和管理不同的细节,从物理层开始,到最高的应用层。

cc2530协议栈定时器中断的工作原理

cc2530协议栈定时器中断的工作原理

cc2530协议栈定时器中断的工作原理1.引言在无线通信领域中,C C2530芯片是一款非常常见的单片机芯片,广泛应用于物联网、智能家居等场景中。

其内部集成了协议栈以实现无线通信功能。

本文将着重介绍c c2530协议栈定时器中断的工作原理。

2.定时器的作用在嵌入式系统中,定时器是一种重要的设备,用于定时操作和任务调度。

在c c2530芯片中,定时器被广泛应用于协议栈的各个模块,实现对通信和维护任务的精准控制。

3. cc2530协议栈定时器的特点c c2530芯片的协议栈中包含多个定时器,其中最重要的是MA C层定时器和P HY层定时器。

这些定时器具有以下特点:-高精度:定时器采用高精度的时钟源,并通过时钟分频技术实现微秒级的时间精度。

-可编程性:用户可以根据自己的需要对定时器进行配置和设置。

-中断触发:定时器可以在达到设定的定时时间时产生中断信号。

4. cc2530协议栈定时器中断的处理流程c c2530协议栈定时器中断的处理流程如下:-初始化定时器:在使用定时器前,需要对其进行初始化设置,包括选择时钟源、设置定时时间等。

-启动定时器:一旦定时器被启动,它便开始计时,并在达到设定的定时时间时触发中断信号。

-中断处理:当定时器中断信号触发时,C P U会进入中断处理程序,并执行相应的中断服务例程。

-中断服务例程:中断服务例程是用来处理定时器中断的代码段,其中包括对定时器的停止、重置等操作,以及其他需要执行的任务。

5.示例代码下面是一个简单的示例代码,演示了如何使用cc2530协议栈定时器中断:#i nc lu de<c c2530.h>//定时器中断服务例程#p ra gm av ec to r=TIM E R1_O VF_V EC TO R__in te rr up tv oi dTi m er1O ve rf lo w(voi d){//中断处理代码//...//定时器重置T1CT L|=0x01;}v o id ma in(v oi d){//初始化定时器T1CT L=0x02;//设置定时时间T1CC0L=0x50;T1CC0H=0x00;//启动定时器T1CT L|=0x04;//启用定时器中断I E N0|=0x80;//全局使能中断E A=1;w h il e(1){//主循环}}6.总结本文介绍了c c2530协议栈定时器中断的工作原理。

协议栈是什么

协议栈是什么

协议栈是什么协议栈(Protocol Stack)是指一组按照特定顺序排列的通信协议的集合,它们按照层次结构组织,每一层负责特定的功能,从而实现数据在网络中的传输和交换。

在计算机网络中,协议栈是网络通信的基础,它定义了数据在网络中的传输格式、传输方式、错误检测和纠正等规则。

首先,协议栈通常由多个层次组成,每一层都有特定的功能和责任。

最常见的协议栈是TCP/IP协议栈,它由四个层次组成,应用层、传输层、网络层和数据链路层。

每一层都有自己的协议和规范,负责特定的功能。

应用层负责定义应用程序之间的通信规则,传输层负责端到端的数据传输,网络层负责数据在网络中的路由和转发,数据链路层负责数据在物理介质上传输。

其次,协议栈的设计遵循分层的原则,每一层的功能相对独立,各层之间通过接口进行通信,上层向下层提供服务,下层向上层提供支持。

这种设计使得协议栈具有良好的可扩展性和灵活性,可以根据实际需求对每一层进行修改和升级,而不会对整个系统造成影响。

另外,协议栈的工作方式是自底向上的。

当数据从应用程序发送出去时,经过每一层的处理和封装,最终在物理介质上传输;而当数据到达目的地后,经过每一层的解封装和处理,最终交给目标应用程序。

这种逐层处理的方式使得协议栈的工作更加清晰和有序,方便对每一层进行调试和排错。

最后,协议栈的作用是实现网络通信的可靠性和高效性。

通过协议栈的分层设计和逐层处理,可以保证数据在网络中的正确传输和交换,同时也能够提高网络的吞吐量和响应速度。

协议栈的标准化和普及,也为不同厂商的设备和系统之间的互联互通提供了基础。

总的来说,协议栈是网络通信的基础,它通过分层设计和逐层处理实现数据在网络中的传输和交换。

协议栈的设计遵循分层原则,具有良好的可扩展性和灵活性,工作方式是自底向上的,作用是实现网络通信的可靠性和高效性。

对于理解和应用计算机网络技术,掌握协议栈的原理和工作方式非常重要。

ipv6路由协议栈原理与技术

ipv6路由协议栈原理与技术

ipv6路由协议栈原理与技术摘要:一、IPv6简介1.IPv4地址耗尽2.IPv6的优势3.IPv6的应用场景二、IPv6路由协议栈1.路由协议栈的概念2.IPv6路由协议栈的组成3.路由协议栈的重要性三、IPv6路由协议栈原理1.IPv6路由协议栈的工作原理2.路由协议数据报的结构3.路由协议的邻居关系建立四、IPv6路由协议栈技术1.路由协议的更新与维护2.路由协议的流量工程3.路由协议的优化与改进五、IPv6路由协议栈应用1.互联网服务提供商(ISP)2.企业网络3.数据中心六、IPv6路由协议栈的发展趋势1.IPv6路由协议的标准化2.路由协议的融合与统一3.路由协议的创新与演进正文:随着互联网的飞速发展,IPv4地址资源逐渐枯竭,为解决这一问题,IPv6作为一种全新的互联网协议应运而生。

IPv6具有丰富的地址空间、高效的数据包处理能力以及更好的安全性,为互联网的发展提供了更强大的基础。

在IPv6网络中,路由协议栈扮演着至关重要的角色,它负责处理IPv6地址的分配、路由以及数据包的转发。

本文将重点介绍IPv6路由协议栈的原理与技术。

IPv6路由协议栈是指在IPv6网络中实现路由功能的协议栈,包括路由协议的封装、路由表的维护以及路由消息的传递等。

IPv6路由协议栈主要包括路由协议栈的原理、技术以及应用等方面。

首先,IPv6路由协议栈的原理是指在IPv6网络中,路由协议如何实现路由功能。

其工作原理主要包括路由协议数据报的生成、路由表的更新以及路由消息的传递。

在这个过程中,路由器之间通过互相发送路由协议数据报来交换路由信息,并根据收到的路由信息更新本地路由表。

其次,IPv6路由协议栈的技术包括路由协议的更新与维护、路由协议的流量工程以及路由协议的优化与改进等方面。

其中,路由协议的更新与维护是指路由器如何根据网络变化动态更新路由表;路由协议的流量工程是指如何优化路由策略,提高网络性能;路由协议的优化与改进是指如何对现有路由协议进行改进,以适应IPv6网络的需求。

计算机网络协议栈的工作原理

计算机网络协议栈的工作原理

计算机网络协议栈的工作原理随着计算机的广泛应用,网络系统已经成为人们日常生活和工作中不可或缺的一部分。

而计算机网络协议栈就是支撑整个网络系统运行的重要组成部分。

本文将从协议栈的概念、组成结构、每一层协议的作用等方面,介绍计算机网络协议栈的工作机制。

一、计算机网络协议栈的概念计算机网络协议栈是一种以层次结构组织各种协议的方式,它规定了网络数据的传输、处理和控制的方法,使得各个设备间能够进行准确稳定的信息传输。

协议栈采用分层的方法组织各种网络功能,将每一层的功能规定在一个协议集合中,并且各层之间的界面也都通过协议的方式加以规定。

不同协议之间的结构、数据和复杂度都不相同。

比较典型的协议栈有TCP/IP协议栈、OSI(开放式系统互连)协议栈等。

二、计算机网络协议栈的组成结构在TCP/IP协议栈中,共分为4层,分别为网络接口层、网络层、传输层和应用层。

每一层都有自己的协议和功能,下面我们来逐层分析。

1、网络接口层(Network Interface Layer)网络接口层是协议栈最下面的一层,负责应用程序与网络线路之间的连接,使得计算机发送的数据能够在网络中传输。

这一层主要规定了硬件设备(如网卡)、传输协议和传输媒介(如网线)等方面的内容。

常见的协议有以太网(Ethernet)、WiFi、蓝牙等。

2、网络层(Internet Layer)网络层位于TCP/IP协议栈的第二层,它的主要作用是在HOS网络中传输数据包。

该层使用的协议是Internet协议(IP),并且可以通过路由器在不同的网络之间传输数据包。

其中,IP协议使用32位长度的IP地址来标识网络中的计算机,能够实现数字地址的转换。

此外,网络层还包括如Internet组播协议(IGMP)、地址解析协议(ARP)等协议。

3、传输层(Transport Layer)传输层负责网络中各个应用程序之间的数据传输。

该层使用的协议主要是TCP和UDP,其中TCP协议是一种面向连接、可靠的传输协议,它能够保证数据在传输过程中不遗漏、不重复、不失序。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

协议栈工作原理介绍CC2540集成了增强型的8051内核,TI为BLE协议栈搭建了一个简单的操作系统,即一种任务轮询机制。

帮你做好了底层和蓝牙协议深层的内容,将复杂部分屏蔽掉。

让用户通过API函数就可以轻易用蓝牙4.0,是开发起来更加方便,开发周期也可以相应缩短。

1.1.1工程文件介绍安装完BLE协议栈之后,会在安装目录下看到以下文件结构:图 3.2BLE栈目录可看到Projects文件夹里面有很多工程,我们主要介绍SimpleBLECentral和SimpleBLEPeripheral。

ble文件夹中有很多工程文件,有些是具体的应用,例如BloodPressure、GlucoseCollector、GlucoseSensor、HeartRate、HIDEmuKbd等都为传感器的实际应用,有相应标准的Profile(即通用的协议)。

其中还有4中角色:SimpleBLEBroadcaster、SimpleBLECentral、SimpleBLEObserver、SimpleBLEPeripheral。

他们都有自己的特点。

•Broadcaster广播员——非连接性的信号装置•Observer观察者——扫描得到,但不能链接•Peripheral从机——可链接,在单个链路层链接中作为从机•Central主机——扫描设备并发起链接,在单链路层或多链路层中作为主机。

最后的BTool文件夹为BLE设备PC端的使用工具。

1.1.2OSAL介绍协议栈是一个小操作系统。

大家不要听到是操作系统就感觉到很复杂。

回想我们当初学习51单片机时候是不是会用到定时器的功能?嗯,我们会利用定时器计时,令LED一秒改变一次状态。

好,现在进一步,我们利用同一个定时器计时,令LED1一秒闪烁一次,LED2二秒闪烁一次。

这样就有2个任务了。

再进一步…有n个LED,就有n个任务执行了。

协议栈的最终工作原理也一样。

从它工作开始,定时器周而复始地计时,有发送、接收…等任务要执行时就执行。

这个方式称为任务轮询。

图 3.3任务轮询现在我们直接打开协议栈,直接拿他们的东西来解剖!我们打开协议栈文件夹Texas Instruments\BLE-CC254x-1.2.1\Projects\ble\SimpleBLEPeripheral\CC2540DB里面的工程文件SampleApp.eww。

图 3.4工程文件打开后在IAR左边可看到左边的工程目录,我们暂时只需要关注App文件夹。

如图 3.5所示:图 3.5工作空间目录任何程序都在main函数开始运行,BLE也不例外。

打开SimpleBLEPeripheral_Main.c文件,找到int main(void)函数。

我们大概浏览一下main函数代码:图 3.6协议栈主函数1./**************************************************************2.*@fn main3.*@brief Start of application.4.*@param none5.*@return none6.**************************************************************/7.int main(void)8.{9./*Initialize hardware*/10.HAL_BOARD_INIT();//初始化系统时钟11.12.//Initialize board I/O13.InitBoard(OB_COLD);//初始化I/O,LED、Timer等14.15./*Initialze the HAL driver*/16.HalDriverInit();//初始化芯片各硬件模块17.18./*Initialize NV system*/19.osal_snv_init();//初始化Flash存储器20.21./*Initialize LL*/22.23./*Initialize the operating system*/24.osal_init_system();//初始化操作系统25.26./*Enable interrupts*/27.HAL_ENABLE_INTERRUPTS();//使能全部中断28.//Final board initialization29.InitBoard(OB_READY);//初始化按键30.31.#if defined(POWER_SAVING)32.osal_pwrmgr_device(PWRMGR_BATTERY);//开启低功耗33.#endif34.35./*Start OSAL*/36.osal_start_system();37.//No Return from here执行操作系统,进去后不会返回38.39.return0;40.}我们大概看了上面的代码后,可能感觉很多函数不认识。

没关系,代码很有条理性,开始先执行初始化工作。

包括硬件、GATT、GAP层、任务等的初始化。

然后执行osal_start_system();操作系统。

进去后可不会回来了。

在这里,我们重点了解2个函数:初始化操作系统osal_init_system();运行操作系统osal_start_system();***怎么看?在函数名上单击右键——go to definition of…,便可以进入函数。

***1、我们先来看osal_init_system();系统初始化函数,进入函数。

发现里面有6个初始化函数,没事,我们需要做的是掐住咽喉。

这里我们只关心osalInitTasks();任务初始化函数。

继续由该函数进入。

图 3.7osal_init_system()终于到尽头了。

这一下子代码更不熟悉了。

不过我们可以发现,函数好像能在taskID这个变量上找到一定的规律。

请看下面程序注释。

图 3.8osalInitTasks()1.void osalInitTasks(void)2.{3.uint8taskID=0;4.//分配内存,返回指向缓冲区的指针5.tasksEvents=(uint16*)osal_mem_alloc(sizeof(uint16)*tasksCnt);6.//设置所分配的内存空间单元值为07.osal_memset(tasksEvents,0,(sizeof(uint16)*tasksCnt));8.9.//任务优先级由高向低依次排列,高优先级对应taskID的值反而小10./*LL Task*/11.LL_Init(taskID++);12.13./*Hal Task*/14.Hal_Init(taskID++);15.16./*HCI Task*/17.HCI_Init(taskID++);18.19.#if defined(OSAL_CBTIMER_NUM_TASKS)20./*Callback Timer Tasks*/21.osal_CbTimerInit(taskID);22.taskID+=OSAL_CBTIMER_NUM_TASKS;23.#endif24.25./*L2CAP Task*/26.L2CAP_Init(taskID++);27.28./*GAP Task*/29.GAP_Init(taskID++);30.31./*GATT Task*/32.GATT_Init(taskID++);33.34./*SM Task*/35.SM_Init(taskID++);36.37./*Profiles*/38.GAPRole_Init(taskID++);39.GAPBondMgr_Init(taskID++);40.41.GATTServApp_Init(taskID++);42.43./*Application*/44.SimpleBLEPeripheral_Init(taskID);//应用初始化,重点45.}第9-41行:BLE中各层的任务添加,越底层优先级越高我们可以这样理解,函数对taskID个东西进行初始化,每初始化一个,taskID++。

TI公司出品协议栈已完成的东西。

这里先提前卖个关子SampleApp_Init(luste);很重要,也是我们应用协议栈例程的必需要函数,用户通常在这里初始化自己的东西。

至此,osal_init_system();大概了解完毕。

2、我们再来看第二个函数osal_start_system();运行操作系统。

同样用go todefinition的方法进入该函数。

再进入osal_run_system()图 3.9osal_start_system()函数图 3.10void osal_run_system(void)函数1./****************************************************************2.*@fn osal_run_system3.*4.*@brief5.*6.*This function will make one pass through the OSAL taskEventstable7.*and call the task_event_processor()function for the first taskthat8.*is found with at least one event pending.If there are no pending9.*events(all tasks),this function puts the processor into Sleep.10.*11.*@param void12.*13.*@return none14.*/15.翻译:这个是任务系统轮询的主要函数。

他会查找发生的事件然后调用相应的事件执行函数。

如果没有事件登记要发生,那么就进入睡眠模式。

这个函数是永远不会返回的。

16.17.void osal_run_system(void)18.{19.uint8idx=0;20.21.#ifndef HAL_BOARD_CC253822.//这里是在扫描哪个事件被触发了,然后置相应的标志位23.osalTimeUpdate();24.#endif25.26.Hal_ProcessPoll();27.28.do{29.if(tasksEvents[idx])//Task is highest priority that is ready.30.{31.break;//得到待处理的最高优先级任务索引号idx32.}33.}while(++idx<tasksCnt);34.35.if(idx<tasksCnt)36.{37.uint16events;38.halIntState_t intState;39.40.HAL_ENTER_CRITICAL_SECTION(intState);//进入临界区,保护41.events=tasksEvents[idx];//提取需要处理的任务中的事件42.tasksEvents[idx]=0;//清除本次任务的事件43.HAL_EXIT_CRITICAL_SECTION(intState);//退出临界区44.45.activeTaskID=idx;46.events=(tasksArr[idx])(idx,events);//通过指针调用任务处理函数,关键47.activeTaskID=TASK_NO_TASK;48.49.HAL_ENTER_CRITICAL_SECTION(intState);//进入临界区50.tasksEvents[idx]|=events;//Add back unprocessed events tothe current task.保存未处理的事件51.HAL_EXIT_CRITICAL_SECTION(intState);//退出临界区52.}53.#if defined(POWER_SAVING)54.else//Complete pass through all task events with no activity?55.{56.osal_pwrmgr_powerconserve();//Put the processor/system intosleep57.}58.#endif59.60./*Yield in case cooperative scheduling is being used.*/61.#if defined(configUSE_PREEMPTION)&&(configUSE_PREEMPTION==0)62.{63.osal_task_yield();64.}65.#endif66.}我们来关注一下events=tasksEvents[idx];进入tasksEvents[idx]数组定义,如下图,发现恰好在刚刚osalInitTasks(void)函数上面。

相关文档
最新文档