Zephyr RTOS -- Polling API

本笔记基于 Zephyr 版本 2.6.0-rc2

 

前言

本人正在学习 Zephyr,一个可移植性较强,可以兼容多种开发板及物联网设备的操作系统,如果你感兴趣,可以点此查看我的 学习笔记总述 进行了解!

 

Polling API - (轮询 API)

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

 

1. Concepts - (概念)

轮询 API 的主要函数是 k_poll(),它在概念上与 POSIX poll() 函数非常相似,不同之处在于它是对内核对象操作,而不是文件描述符进行操作。

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

这里有一组有限的条件:

  • 信号量可用
  • 内核 FIFO 包含准备检索的数据
  • 一个轮询信号被发出

想要等待多个条件的线程必须定义一个 轮询事件(poll events) 数组, 每个条件一个。

必须先初始化数组中的所有事件,然后才能轮询数组。

每个事件必须指定必须满足哪种 类型(type) 的条件,以便将其状态更改为表示已满足所请求的条件。

每个事件必须指定它希望满足条件的 内核对象(kernel object)

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

每个事件可以选择指定一个 标记(tag) 来将多个事件组合在一起,这是由用户决定的。

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

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

目前,只有一种操作模式可用:不获取对象。例如,这意味着当 k_poll() 返回并且 poll 事件表明信号量可用时, k_poll() 的调用者必须调用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值