Zephyr内核——内核服务(调度,中断和同步)——轮询API

本文介绍了Zephyr内核的轮询API,用于并发等待多个条件。它类似POSIX的函数,允许线程等待信号量、FIFO等条件。轮询API包括事件初始化、操作模式、信号处理等,适用于资源有限的场景,如轻量级二进制信号量。使用轮询API可以节省堆栈空间,并减少线程间的竞争。

轮询API

轮询API用于并发地等待满足多个条件中的任何一个。

概念

轮询API的主要函数是k_poll(),它在概念上与POSIXpoll()函数非常相似,只是它在内核对象而不是文件描述符上操作。

轮询API允许单个线程并发地等待一个或多个条件的满足,而不需要主动地单独查看每个条件。

这样的条件是有限的:

  • 一个信号量变得可用
  • 内核FIFO包含准备好检索的数据
  • 轮询信号生成

希望等待多个条件的线程必须定义一个轮询事件数组,每个条件对应一个。

数组中的所有事件都必须经过初始化,然后才能对数组进行轮询。

每个事件必须指定必须满足哪种类型的条件,以便更改其状态以发出满足请求条件的信号。

每个事件都必须指定它希望满足该条件的内核对象。

每个事件都必须指定在满足条件时使用哪种操作模式。

每个事件可以选择指定一个标记将多个事件分组在一起,由用户决定。

除了内核对象之外,还有一个可以直接发出信号的轮询信号伪对象类型。

一旦k_poll()函数所等待的条件之一被满足,k_poll()函数就会返回。当k_poll()返回时,如果它们在调用k_poll()之前实现,或者由于内核的优先多线程特性,可能有多个实现。调用者必须查看数组中所有轮询事件的状态,以找出哪些事件已完成以及要

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值