硬汉嵌入式论坛

 找回密码
 立即注册
查看: 5604|回复: 4
收起左侧

[ThreadX全家桶] ThreadX内核的抢占阀值设置,阀值设置为0就等同于禁止调度,但不影响中断服务程序的执行

[复制链接]

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115808
QQ
发表于 2021-5-18 14:41:08 | 显示全部楼层 |阅读模式

这个功能非常好,也非常灵活



为了缓解抢占的某些固有问题,ThreadX提供了一个独特的高级功能,称为preempt-threshold。

抢占阈值允许线程为禁用抢占指定优先级上限。优先级高于上限的线程仍可被抢占,而优先级低于上限的线程仍不可被抢占。

例如,假设优先级为20的线程仅与优先级在15到20之间的一组线程交互。在其关键部分,优先级20的线程可以将其抢占阈值设置为15,从而防止所有优先级被抢占。与之交互的线程。这仍然允许真正重要的线程(优先级在0到14之间)在其关键部分处理期间抢占该线程,从而导致响应速度更快。

当然,线程仍然可以通过将其抢占阈值设置为0来禁用所有抢占。此外,可以在运行时更改抢占阈值。
回复

使用道具 举报

3

主题

32

回帖

41

积分

新手上路

积分
41
发表于 2021-5-18 16:16:40 | 显示全部楼层
硬汉哥,请教一下,在threadx内核教程第11章->11.1初学者重要提示->第二点【使用这种方法,不可在不受 ThreadX 管理的中断里面再调用 ThreadX 的 API 函数。】这句话应该怎么理解?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115808
QQ
 楼主| 发表于 2021-5-18 16:36:37 | 显示全部楼层
infofans 发表于 2021-5-18 16:16
硬汉哥,请教一下,在threadx内核教程第11章->11.1初学者重要提示->第二点【使用这种方法,不可在不受 Thre ...

采用的basepri开关中断方案

ThreadX内核的开关中断使用BasePri实现方法,支持AC5,AC6,MDK和GCC
http://www.armbbs.cn/forum.php?m ... 6733&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

3

主题

32

回帖

41

积分

新手上路

积分
41
发表于 2021-5-20 10:41:13 | 显示全部楼层
eric2013 发表于 2021-5-18 16:36
采用的basepri开关中断方案

ThreadX内核的开关中断使用BasePri实现方法,支持AC5,AC6,MDK和GCC

若设置宏定义ThreadX_MAX_INTERRUPT_PRIORITY为0x10,那么抢占优先级0是不受threadx管理的,所以在抢占优先级0的中断函数里面不能调用ThreadX的API 函数,是这样理解吗?如果是这样理解的话,那么如果在不受threadx管理的中断里面调用了threadX的API 函数,会导致哪一类错误的发生呢?麻烦硬汉哥在讲一下,这个地方实在是有点犯迷糊
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115808
QQ
 楼主| 发表于 2021-5-20 16:10:49 | 显示全部楼层
infofans 发表于 2021-5-20 10:41
若设置宏定义ThreadX_MAX_INTERRUPT_PRIORITY为0x10,那么抢占优先级0是不受threadx管理的,所以在抢占优 ...

ThreadX内核里面有一些开发中断的地方,你在这个里面调用,这些临界段将不再受保护。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-20 09:11 , Processed in 0.254526 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表