2012-07-13 2 views
-1

표준 C가 아닌 C에서 응용 프로그램을 개발하려고했습니다. 시나리오는 다음과 같습니다. 프로세서의 전원 모드 구현과 유사하여 프로세서가 절전 모드에서 깨어날 때처럼 작동합니다. , 인터럽트가 생성됩니다, 그래서 그 시점에서 이벤트 콜백을 가지고 있다면 프로세스를 수행하기 위해 다른 모듈을 깨울 수 있습니다.이를 위해 메모리 풀에 액세스하기위한 정적 할당을 사용하여 linkedlist를 구현하려고합니다. 콜백이 등록되면 메모리 풀에 저장됩니다. 콜백이 발생하면 등록 된 모듈에 이벤트 알림을 보냅니다.등록 방법 및 인터럽트 등록 해제 방법

하지만 구현 방법을 잘 모르겠습니다. 친절하게 구현 방법을 제공하십시오

+2

Hello Sur, 자세한 내용을 제공해야합니다. 표준 C에는 인터럽트 (또는 이벤트 처리) 개념이 없습니다. 어떤 운영 체제인지, 어떤 유형의 인터럽트인지, 어떤 "이벤트 처리"메커니즘이 무엇인지 알려줄 필요가 있습니다. – Mat

답변

0

신호를 의미합니까? 충돌이나 제로가 나올 때처럼? 다음은 신호를 포착하는 posix 예제입니다.

void abortHandler(int signum, siginfo_t* si, void* unused) 
{ 
    const char* name = NULL; 
    switch(signum) 
    { 
     case SIGABRT: name = "SIGABRT"; break; 
     case SIGSEGV: name = "SIGSEGV"; break; 
     case SIGBUS: name = "SIGBUS"; break; 
     case SIGILL: name = "SIGILL"; break; 
     case SIGFPE: name = "SIGFPE"; break; 
     case SIGPIPE: name = "SIGPIPE"; break; 
    } 

    if (name) 
     printf("Caught signal %d (%s)\n", signum, name); 
    else 
     printf("Caught signal %d\n", signum); 
} 

void trapSignals() 
{ 
    struct sigaction sa; 
    sa.sa_flags = SA_SIGINFO; 
    sa.sa_sigaction = abortHandler; 
    sigemptyset(&sa.sa_mask); 

    sigaction(SIGABRT, &sa, NULL); 
    sigaction(SIGSEGV, &sa, NULL); 
    sigaction(SIGBUS, &sa, NULL); 
    sigaction(SIGILL, &sa, NULL); 
    sigaction(SIGFPE, &sa, NULL); 
    sigaction(SIGPIPE, &sa, NULL); 
}