硬汉嵌入式论坛

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

[ThreadX全家桶] ThreadX内核的调度锁,任务锁和中断锁

[复制链接]

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115863
QQ
发表于 2021-5-18 15:25:15 | 显示全部楼层 |阅读模式


调度锁和任务锁:

对于ThreadX来说,使用抢占阀值即可实现,设置为0就可以关闭所以任务抢占,非常好的思路。

中断锁:

中断锁推荐用这个实现:

ThreadX内核的开关中断使用BasePri实现方法,支持AC5,AC6,MDK和GCC
http://www.armbbs.cn/forum.php?mod=viewthread&tid=106733

回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2022-3-31 22:18:18 | 显示全部楼层
关于ThreadX调度锁,我有个问题,在某一时刻,我设置某个任务的抢占阈值为0,但是我不设置回去(抢占阈值一直为0),但其余任务还是能执行调度执行,这是为什么,有点搞不懂
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115863
QQ
 楼主| 发表于 2022-4-1 10:35:55 | 显示全部楼层
静空 发表于 2022-3-31 22:18
关于ThreadX调度锁,我有个问题,在某一时刻,我设置某个任务的抢占阈值为0,但是我不设置回去(抢占阈值一 ...

其它任务配置和函数实现发个代码看下,方便的话。
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2022-4-7 22:13:20 | 显示全部楼层
eric2013 发表于 2022-4-1 10:35
其它任务配置和函数实现发个代码看下,方便的话。

void OSSchedLock (void)
{
    uint32 ulRet = 0;
    TX_THREAD *pThreadCur = NULL;
   
    CPU_SR_ALLOC();
   
    CPU_CRITICAL_ENTER();
    TX_THREAD_GET_CURRENT(pThreadCur);
    ulRet = tx_thread_preemption_change(pThreadCur, 0, (uint32 *)&g_ulThresholdBak);
    CPU_CRITICAL_EXIT();
    return;
}

void OSSchedUnlock (void)
{
    uint32 ulOldThreshold = 0;
    TX_THREAD *pThreadCur = NULL;
   
    CPU_SR_ALLOC();
   
    CPU_CRITICAL_ENTER();
    TX_THREAD_GET_CURRENT(pThreadCur);
    tx_thread_preemption_change(pThreadCur, g_ulThresholdBak, &ulOldThreshold);
    CPU_CRITICAL_EXIT();
    return;
}
这是我封装的任务锁函数,某一个时刻我调用OSSchedLock,但不调用OSSchedUnlock,tx_thread_preemption_change执行结果是正确的,其他任务的抢占阈值跟任务优先级一样,目前都是固定间隔执行
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115863
QQ
 楼主| 发表于 2022-4-8 11:34:07 | 显示全部楼层
静空 发表于 2022-4-7 22:13
void OSSchedLock (void)
{
    uint32 ulRet = 0;

那你这个移植uCOS的,做了个中断开关?

应该有这个问题:ThreadX内核移植文件骚操作,函数TX_DISALBE关闭全局中断后,为什么tx_threadx_sleep还可以正常执行任务切换
https://www.armbbs.cn/forum.php? ... 9164&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2022-4-8 22:02:38 | 显示全部楼层
eric2013 发表于 2022-4-8 11:34
那你这个移植uCOS的,做了个中断开关?

应该有这个问题:ThreadX内核移植文件骚操作,函数TX_DISALBE ...

不是,我只是封装成ucos接口形式,之前用ucos用得多
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-23 16:58 , Processed in 1.041139 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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