各位高手好:
我先说说我对临界区的理解:
临界区代码段中维护了一些跟硬件或者中断相关的资源
这些资源可能在同一进程中调用多次,所以需要用临界区把保护的代码框起来
如:
EnterCriticalSection(&(pHWHead->RegCritSec))
被保护代码
LeaveCriticalSection(&(pHWHead->RegCritSec))
当第一个运行到临界区的代码(所有临界区代码哪个先进入哪个后进入无所谓)
占用此资源,当用完了LeaveCriticalSection释放给别的代码段用
而参数(&(pHWHead->RegCritSec))的定义为:在结构体S2410_UART_INFO中
CRITICAL_SECTION RegCritSec
我看的资料上写EnterCriticalSection的参数指向CRITICAL_SECTION的结构指针
问题: 这个参数跟我圈 的临界区有什么关系吗?
我看串口程序中定义了两个指向CRITICAL_SECTION的结构指针
分别为: CRITICAL_SECTION TransmitCritSec;
CRITICAL_SECTION RegCritSec;
临界区分别为:
EnterCriticalSection(&(pHWHead->TransmitCritSec));
EnterCriticalSection(&(pHWHead->RegCritSec));
FifoModeReg = INREG(pHWHead, rUFCON);
try {
rFifoStat = INREG(pHWHead,rUFSTAT);
TxFifoCnt = ((rFifoStat & SER2410_FIFOCNT_MASK_TX) >> 4);
if (pHWHead->UseIrDA)
{
// IR is half-duplex.
pHWHead->RxDiscard = TRUE;
DisEnSubINT(pHWHead, pHWHead->bRxINT);
}
程序太长中间省略了很多
// Enable xmit intr. We need to do this no matter what,
// since the MDD relies on one final interrupt before
// returning to the application.
ClearPendingInts( pHWHead );
EnINT(pHWHead, pHWHead->bINT);
EnSubINT(pHWHead, pHWHead->bTxINT);
pHWHead->fSW_EnTxINT = TRUE; // FALSE;
}
except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?
EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
}
LeaveCriticalSection(&(pHWHead->RegCritSec));
LeaveCriticalSection(&(pHWHead->TransmitCritSec));
1、这两个临界区定义的参数有什么区别,在程序中分别扮演什么角色?
2、EnterCriticalSection(&(pHWHead->RegCritSec))
被保护代码
LeaveCriticalSection(&(pHWHead->RegCritSec))
当第一个运行到临界区的代码(所有临界区代码哪个先进入哪个后进入无所谓 )
这句话是我理解的,不知道是不是这么回事