| 
	ucos-ii系统自带的一些函数,都会用某个变量来保存cpu的状态寄存器,为了好识别,一般是用cpu_sr;
 
	譬如:INT8U  OSSemPost (OS_EVENT *pevent)
 {
 #if OS_CRITICAL_METHOD == 3u                          /* Allocate storage for CPU status register      */
 OS_CPU_SR  cpu_sr = 0u;
 #endif
 
	...
 
	
 
	INT8U  OSSemQuery (OS_EVENT     *pevent,OS_SEM_DATA  *p_sem_data)
 {
 INT8U       i;
 OS_PRIO    *psrc;
 OS_PRIO    *pdest;
 #if OS_CRITICAL_METHOD == 3u                               /* Allocate storage for CPU status register */
 OS_CPU_SR   cpu_sr = 0u;
 #endif
 
	...
 
	
 
	
 
	有一点我比较奇怪,为什么开关中断这个两个函数:
 
	#define  OS_ENTER_CRITICAL()  {cpu_sr = OS_CPU_SR_Save();}#define  OS_EXIT_CRITICAL()   {OS_CPU_SR_Restore(cpu_sr);}
 
	同样使用cpu_sr来保存cpu状态寄存器,但是在函数中没用定义cpu_sr这个变量呢,而是需要在调用这个两个函数的任务或者中断中定义这个变量    OS_CPU_SR   cpu_sr = 0u;
 
	如果这样:
 
	#define  OS_ENTER_CRITICAL()  {OS_CPU_SR   cpu_sr = 0u;  cpu_sr = OS_CPU_SR_Save();}
 
	#define  OS_EXIT_CRITICAL()     {OS_CPU_SR   cpu_sr = 0u; OS_CPU_SR_Restore(cpu_sr);}
 
	可以吗?
 
	
 
	或者ucos-ii系统中为什么不干脆吧cpu_sr定义成一个全局变量呢?
 |