간단한 임베디드 시스템이라면 앞에서 설명했던 counter만 가지고도 필요한 기능을 수행할 수 있겠지만, 일반적인 임베디드 시스템에서는 좀더 다양한 형태의 이벤트 처리 기능을 요구하게 된다. 인터럽트가 발생했을때 적절한 처리를 하도록 타스크에게 알려주기 위해서나, 타스크간의 정보 교환이 필요한 경우가 있는데 이를 동기화(Synchronization)라고 한다. megaOS에서는 동기화 기능중 semaphore, flag, mailbox를 만들어 보도록 하겠다. Synchronization을 지원하기 위해서 TCB 구조체에 sync_list를 추가하여야 한다. 당연히 os_task_create() 함수에서는 sync_list 초기화 코드도 추가하여야 한다. 이 부분은 이 글의 마지막 부분에 첨부되어 있는 ..
RTOS 뿐만 아니라 모든 OS는 커널에서 사용하기 위한 타이머가 있다. 그리고 OS에서 사용할 수 있도록 많은 CPU에는 전용의 타이머를 제공하기도 한다. 이번 글에서는 커널에서 사용하는 system timer에 대해서 설명하도록 하겠다. 먼저 os.h 파일에 필요한 내용을 추가해 보도록 하겠다. #ifdef BOARD_TICKS_PER_SEC #define OS_TICKS_PER_SEC BOARD_TICKS_PER_SEC #else #define OS_TICKS_PER_SEC 100 #endif #define OS_SCHED_TIMESLICE_TICKS (OS_TICKS_PER_SEC/10) OS_TICKS_PER_SEC은 1초에 몇번의 tick을 발생 시킬것인지 설정하는 역할을 한다. OS 타이머는..
임베디드 시스템을 개발하다보면 어떤 이벤트가 몇번 발생했는지 알고 싶을때가 있다. 이미 입문편에서도 설명하였지만 이벤트의 발생간격이 일정하게 연속되어 발생한다면 타이머로도 사용할 수 있다고 하였다. 이번 글에서는 megaOS에서 제공하는 Counter에 대해서 설명하도록 하겠다. 이전에 설명하던 방식과 다르게 Counter에 대한 내용을 모두 설명한 뒤에 예제 코드를 작성해서 잘 동작되는지 확인해 보도록 하겠다. 먼저, os.h에 Counter와 관련된 내용을 추가해 보도록 하겠다. Counter에는 이벤트가 발생했을때 그 사실을 알려주기 위하여 Alarm을 반드시 연결하여 사용하도록 되어있다. 따라서 Counter와 Alarm을 같이 설명하도록 하겠다. struct os_counter { os_tick..