함수 포인터 그룹으로 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() {...};
...