查看: 6344|回复: 4

[MQX] MQX的int_enable和int_disable函数的疑惑

[复制链接]

该用户从未签到

4

主题

10

帖子

0

注册会员

Rank: 2

积分
50
最后登录
1970-1-1
发表于 2011-12-22 23:43:16 | 显示全部楼层 |阅读模式
MQX在好多地方都使用了这两个函数,请问这是不是使能/禁止全局中断?
手册上说:
The function _int_enable() resets the processor priority to the hardware priority that corresponds to the
active task’s software priority.
The function _int_disable() disables all hardware interrupts at priorities up to and including the MQX
disable-interrupt level. As a result, no task can interrupt the active task while the active task is running until
interrupts are re-enabled with _int_enable(). If the active task blocks while interrupts are disabled, the
state of the interrupts (disabled or enabled) depends on the interrupt-disabled state of the next task that
MQX makes ready.
没太理解,高手能解释一下吗?
我知道答案 目前已有3人回答
回复

使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2011-12-23 10:50:46 | 显示全部楼层

    RE:MQX的int_enable和int_disable函数的疑惑

    你的理解是正确的。
    _int_disable 禁止硬件中断
    _int_enable 使能硬件中断
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    33

    主题

    441

    帖子

    0

    新手上路

    Rank: 1

    积分
    7703
    最后登录
    1970-1-1
    发表于 2012-3-1 22:51:49 | 显示全部楼层

    RE:MQX的int_enable和int_disable函数的疑惑

    不是简单的禁止或打开中断,mqx这里设计很奇怪,我遇到过古怪错误,一直也没找到原因
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2

    主题

    224

    帖子

    0

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    322
    最后登录
    1970-1-1
    发表于 2012-3-7 10:58:42 | 显示全部楼层

    RE:MQX的int_enable和int_disable函数的疑惑

    并非简单禁止全局中断。
    关于MQX的中断优先级:
    1. 可能很多用户没有意识到,优先级0-6的任务通常是系统保留的,原因是:0优先级的任务禁止所有中断,1优先级的任务禁止7级以下中断……以此类推。所以才会有“corresponds to the
    active task’s software priority”一说。
    2. 当调用_int_disable时,如果之前未调用过_int_disable,会将kernel_data->DISABLE_SR写到SR(ARM-CM4则是修改baseprio以达到禁止中断的效果),并且将kernel_data->ACTIVE_PTR->DISABLED_LEVEL++,如果调用过则简单将kernel_data->ACTIVE_PTR->DISABLED_LEVEL++。至于enable的情况,请各位自行查看源代码。
    都是开源的代码,没什么奇怪的,花两分钟看一下就明白了。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    13

    主题

    128

    帖子

    0

    新手上路

    Rank: 1

    积分
    58
    最后登录
    1970-1-1
    发表于 2012-3-7 11:07:00 | 显示全部楼层

    回复:MQX的int_enable和int_disable函数的疑惑

    回复第 4 楼 于2012-03-07 02:58:42发表:
    并非简单禁止全局中断。
    关于MQX的中断优先级:
    1. 可能很多用户没有意识到,优先级0-6的任务通常是系统保留的,原因是:0优先级的任务禁止所有中断,1优先级的任务禁止7级以下中断……以此类推。所以才会有“corresponds to the
    active task’s software priority”一说。
    2. 当调用_int_disable时,如果之前未调用过_int_disable,会将kernel_data->DISABLE_SR写到SR(ARM-CM4则是修改baseprio以达到禁止中断的效果),并且将kernel_data->ACTIVE_PTR->DISABLED_LEVEL++,如果调用过则简单将kernel_data->ACTIVE_PTR->DISABLED_LEVEL++。至于enable的情况,请各位自行查看源代码。
    都是开源的代码,没什么奇怪的,花两分钟看一下就明白了。 

    感觉 kap  好几年不见啊  。。。。。。。怎么突然就冒出来了
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-9-12 19:47 , Processed in 0.094718 second(s), 25 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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