免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 976 | 回复: 0
打印 上一主题 下一主题

ucos-ii开关中断的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-04-27 15:49 |只看该作者 |倒序浏览
    我们都知道ucos-ii中开关中断有三种方式,并且使用哪一种方式是根据宏变量OS_CRITICAL_METHOD的值来决定的。
    三种开关中断方式为:
    OS_CRITICAL_METHOD==1直接关中断,然后在需要的时候再直接开中断。这种方法我们可以看os_cfg.h中的源代码可以知道。其实根本就没有定义这个方法。因为他的宏定义中要么定义了这个值为3,要么定义了这个值为2.而当OS_CRITICAL_METHOD==2时,则是利用了汇编指令,将CPSR中的内容保存到堆栈中,然后再关中断,再OS_EXIT_CRITICAL中又将该值取出之后,放回到cpsr中。而第三种方法是将cpusr保存到局部变量cpu_sr中而后者是一个OS_CPU_SR(unsigned int)类型的来保存cpsr的内容。
    第三种和第二种其实是一样的,那为什么作者还要定义方法3呢?
    通过查看源代码我们可以知道ADS是不支持第三种方式,所以我们只好定义第三种方法来保存这个变量。也就是说当我们用ADS编译的时候必须定义OS_CRITICAL_METHOD==3.
    而由于变量cpusr只是在OS_ENTER_CRITICAL和OS__EXIT_CRITICA中有使用,因此我们也只是在用到这两个宏定义的函数中必须要使用
    #if OS_CRITICAL_METHOD==3
     OS_CUP_SR cpu_sr;
    #endif
来定义变量cpu_sr。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/40372/showart_600667.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP