你好! 请教一下,DPM_execute实现是不是会实现DPC_execute()的无限循环?是如何关联的?从哪个代码能看出来?
int32_t DPM_execute (DPM_Handle handle, DPM_Buffer* ptrResult)
{ DPM_MCB* ptrDPM;
uintptr_t key;
bool executeDPC;
int32_t retVal;
int32_t errCode = 0;
/* Sanity Check: Validate the arguments */
ptrDPM = (DPM_MCB*)handle;
if (ptrDPM == NULL) {
/* Error: Invalid argument */
retVal = DPM_EINVAL; goto exit; }
/* Pending on the semaphore: Waiting for events to be received */
SemaphoreP_pend (ptrDPM->semaphoreHandle, SemaphoreP_WAIT_FOREVER); /*
Initialize the result buffer: */ memset ((void *)ptrResult, 0, sizeof(DPM_Buffer));
/* Process any IPC messages: We ignore the return value because if there * are any issues while processing the IPC Message the application is * notified via the reporting mechanism */
DPM_msgRecv (ptrDPM, &errCode);
/* Are we responsible for the processing chain? */
if (ptrDPM->dpcHandle != NULL) {
/********************************************************************** * Critical Section: Take a snapshot of the status flag and reset it **********************************************************************/
key = HwiP_disable(); executeDPC = ptrDPM->executeDPC; ptrDPM->executeDPC = false; HwiP_restore(key);
/* Do we need to invoke the method? */ if (executeDPC == true) { /* YES: Invoke the processing chain execute method */
retVal = ptrDPM->procChainCfg.executeFxn (ptrDPM->dpcHandle, ptrResult); } else {
/* NO: We are done */
retVal = 0; } } else {
/* We are done: */
retVal = 0; } exit: