Zephyr内核——内核服务(数据传递)——堆栈

本文介绍了Zephyr内核中的堆栈数据结构,详细讲解了堆栈的概念、实现方法,包括定义堆栈、推入和弹出操作。堆栈是一个基于LIFO原则的数据结构,用于线程和ISR间的整数数据值传递。堆栈初始化、满溢检查、等待线程的处理机制以及在ISR中的使用限制也进行了阐述。
摘要由CSDN通过智能技术生成

堆栈

堆栈是一个内核对象,它实现了传统的最后入,先出(LIFO)队列,允许线程和isr添加和删除有限数量的整数数据值。

概念

可以定义任意数量的堆栈(仅受可用RAM的限制)。每个堆栈都由其内存地址引用。

堆栈具有以下关键属性:

已添加但尚未删除的整数数据值的队列。队列使用stack_data_t值数组实现,必须在本机词边界上对齐。stack_data_t类型对应于本机字的大小,即32位或64位,这取决于CPU架构和编译模式。

可在数组中排队的最大数据值量。

堆栈必须初始化才能使用。这将将其队列设置为空。

数据值可以通过线程或ISR添加到堆栈中。如果存在等待线程,则该值将直接提供给等待线程;否则,该值将添加到LIFO的队列中。

注意:

如果启用了CONFIG_NO_RUNTIME_CHECKS,内核将不会检测并阻止向已经达到其最大排队值数量的堆栈添加数据值的尝试。将数据值添加到已满的堆栈中,该数据值将导致数组溢出,并导致不可预测的行为。

数据值可以通过线程从堆栈中删除。如果堆栈的队列为空,则线程可以选择等待给出它。任意数量的线程都可以同时在一个空的堆栈上等待。当添加一个数据项时,它将被授予等待时间最长的最高优先级线程。

注意:<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值