함수 포인터 그룹으로 switch-case 2차원 이벤트 복잡도 간소화

1037 단어 ucosii
다중 작업 프로그램에서는 여러 작업 간에 메시지 대기열을 사용하여 정보와 상호작용을 전달하고 작업 순환에서 다음과 같은 점프를 사용하면 계산 시간이 증가합니다.
while(1)
{
     state = get_message();

     switch(state)
     {
          case RUN:
                  do_something();
                  break;
          case STOP:
                  do_anotherthing();
                   break;
           ......
      }
}

또 다른 방법은 2차원 함수 포인터 수조로 모든 처리 함수에 대응하는 점프 조건을 열거하고 리셋 함수로 실현하며 함수 포인터를 사용하여case 점프의 비교 시간을 줄이기 때문에 속도를 높일 수 있다. 단점은 비교적 많은 저장 공간을 차지하는 것이다.어떤 방식으로 계산 수요를 표현하는지는 속도나 공간이 차지하는 지표에 대한 요구에 달려 있다.코드 구조는 다음과 같습니다.
typedef  void  (*pfunc)(void );

pfunc  state_list[MAX_EVENT][MAX_STATE_NUM] = {
                   /*state1*/  /*state2*/ ...
/*event1*/    function1,   function2   
/*event2*/    function3,   function4
...
}
void function1() {...};
void function2() {...};

...

   

좋은 웹페이지 즐겨찾기