Chinaunix

标题: ucos-ii开关中断的问题 [打印本页]

作者: ultimateyou    时间: 2008-04-27 15:49
标题: ucos-ii开关中断的问题
    我们都知道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




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2