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定义成一个全局变量呢?
|