70 likes | 329 Views
임베디드 소프트웨어 구조. 라운드 로빈 구조의 예. void main (void) { while (TRUE) { if (!! I/O 장치 A 가 서비스가 필요하다면 ) { !! I/O 장치 A 에 대해 필요한 것을 처리한다 . !! 데이터를 I/O 장치 A 에 넘겨주거나 가져온다 . } if (!! I/O 장치 B 가 서비스가 필요하다면 ) { !! I/O 장치 B 에 대해 필요한 것을 처리한다 .
E N D
라운드 로빈 구조의 예 void main (void) { while (TRUE) { if (!! I/O 장치 A가 서비스가 필요하다면) { !! I/O 장치 A에 대해 필요한 것을 처리한다. !! 데이터를 I/O 장치 A에 넘겨주거나 가져온다. } if (!! I/O 장치 B가 서비스가 필요하다면) { !! I/O 장치 B에 대해 필요한 것을 처리한다. !! 데이터를 I/O 장치 B에 넘겨주거나 가져온다. } .생략표시 . if (!! I/O 장치 Z가 서비스가 필요하다면) { !! I/O 장치 Z에 대해 필요한 것을 처리한다. !! 데이터를 I/O 장치 Z에 넘겨주거나 가져온다. } } }
인터럽트 라운드로빈 구조의 예 • 인터럽트 라운드로빈 구조의 예 BOOL fDeviceA = FALSE; BOOL fDeviceB = FASLSE; . . . BOOL fDeviceZ = FALSE; Void interrupt vHandleDeviceA (void) { !! I/O 장치 A를 처리한다 fDeviceA = TRUE; } void interrupt vHandleDeviceB (void) { !! I/O 장치 B를 처리한다 fDeviceB = TRUE; } . . . void interrupt vHandleDeviceZ (void) { !! I/O 장치 Z를 처리한다 fDeviceZ = TRUE; }
인터럽트 라운드로빈 구조의 예 (Cont’d) void main (void) { while (TRUE) { if (fDeviceA) { fDeviceA = FALSE; !! I/O 장치 A로 데이터를 넘겨 주거나 가져 온다 } if (fDeviceB) { fDeviceB = FALSE; !! I/O 장치 B로 데이터를 넘겨 주거나 가져 온다 } . . . if (fDeviceZ) { fDeviceZ = FALSE; !! I/O 장치 Z로 데이터를 넘겨 주거나 가져 온다 } } }
펑션큐스케줄링 구조의 예 !! 함수 포인터들의 큐; void interrupt vHandleDeviceA (void) { !! I/O 장치 A에 대해 필요한 것을 처리 !! function_A 에 대한 함수 포인터를 함수 포인터들의 큐에 삽입 } void interrupt vHandeDeviceB (void) { !! I/O 장치 B에 대해 필요한 일을 처리 !! function_B 에 대한 함수 포인터를 함수 포인터들의 큐에 삽입 } void main (void) { while (TRUE) { while (!!함수 포인터들의 큐가 비어 있다 면 기다림) … !! 큐에 있는 첫 번째 함수 호출 } } void function_A (void) { !! 장치 A 에게 필요한 일을 처리 } void function_B (void) { !! 장치 B 에게 필요한 일을 처리 }
5.4 RTOS 구조의 예 void interrupt vHandleDeviceA (void) { !! I/O 장치 A에 대해 필요한 일을 처리한다 !! 시그널 X를 설정한다 } void interrupt vHandleDeviceB (void) { !! I/O 장치 B에 대해 필요한 일을 처리한다 !! 시그널 Y를 설정한다 } . . . void Task1 (void) { while (TRUE) { !! 시그널 X를 기다린다 !! I/O 장치 A로부터 데이터를 받거나 준다 } } void Task2 (void) { while (TRUE) { !! 시그널 Y를 기다린다 !! I/O 장치 B로부터 데이터를 받거나 준다 } }