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