Context 스위칭을 하기 위해서는 우선 Cortex-M Core의 Stacking에 대해서 먼저 이해해야 합니다. Stacking은 Core가 interrupt 에 진입했을 때 정해진 Stackpointer에 Core registers의 내용을 저장하는 것을 말합니다.아래 그림은 Core registers 인데 우리는 이 레지스터를 통해 CPU의 현재 상태를 알 수 있습니다. 아래 예시는 while 구문 Context 에서의 Core registers입니다. 현재 Stack pointer는 0x20007ff8 입니다. 인터럽트가 걸리면 현재의 Core register를 Stacking하게 되며 따라서 Stack pointer 값이 0x20007ff8 + (8 * 4bytes) = 0x20007fd8 ..
RTOS를 사용하는 이유는 여러가지 업무(Task)를 동시에 처리하기 위해서입니다. MP3 플레이어를 예를 들어 보겠습니다. MP3 플레이어의 기본적인 기능은 다음과 같습니다. MP3 파일 입/출력 처리 MP3 파일 Decoding Decoding 음원 출력 Button 입력 처리 GUI 화면 처리 배터리 모니터링 기타등등 간단한 MP3 플레이어라고 해도 꽤 많은 업무를 동시에 처리해야 합니다. 위의 업무중에서는 파일 입/출력, Decoding 과 같은 CPU의 로드가 상당히 많이 필요한 업무들이 있습니다. 이러한 업무들을 순차처리 할 경우에 CPU의 리소스를 하나의 업무에서 독점하므로 음원이 끊어지는 상황이나 Button이 간헐적으로 동작하지 않는 상황, GUI 업데이트 되지 않는 등의 문제가 발생할 ..
에이콘 출판사에서 나온 책 "임베디드 시스템 아키텍쳐"의 내용을 토대로 STM32에 아주 기초적인 RTOS를 구현해보고자 합니다. 실제 상용제품에 이용할 수준은 아니고 다른 RTOS를 쉽게 이해하는 용도로 생각해 주시면 좋을 것 같습니다. 그리고 책 "임베디드 시스템 아키텍쳐"에는 다른 내용도 많으니 한번 읽어보시는 걸 추천드립니다(광고아님). https://product.kyobobook.co.kr/detail/S000001804798 다음 장 부터는 RTOS 커널에서 가장 중요한 Task 스케줄러 구현을 천천히 진행해 보도록 하겠습니다. 이상입니다. 임베디드 시스템 아키텍처 | 다니엘 라카메라 - 교보문고 임베디드 시스템 아키텍처 | product.kyobobook.co.kr
app 은 하나의 상태로 명명하기로 하였습니다. 예를 들자면 안드로이드 앱의 activity 처럼 시스템의 모든 이벤트를 받고 UI를 이루며 프로그램을 동작시키는 하나의 상태라고 이해하면 될 것 같습니다. Full src : https://github.com/soloungos/h7_state_machine 위의 예제에서 app states는 세가지의 상태를 가지고 있습니다. app_first.c : 시스템이 시작할 때 최초의 상태, 그 후 합계를 구하는 알고리즘을 계속적으로 수행하다 key 입력 이벤트를 받으면 app second로 스위칭 app_second.c : 평균을 구하는 알고리즘을 계속적으로 수행하다가 key 입력 이벤트를 받으면 app third로 스위칭 app_third.c : 하는 일 없이..
지난 포스트에서 app controller, app state들을 만들어 app의 역할 및 동작 방식에 대해 알아 보았습니다. 이번 포스팅에서는 main.c의 infinite loop에서 app initial 과 app의 loop등을 어떻게 호출하는지 확인해 보도록 하겠습니다. 아래 main.c의 일부분을 보도록 하겠습니다. int main(void) { ... /* USER CODE BEGIN 2 */ app_first_init(); app_second_init(); app_third_init(); app_start_app(APP_first); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { app_pro..
이번 포스트에서는 app state 중에 첫번째 first app을 만들도록 하겠습니다. 지난번에 말씀드린 대로 앞으로 만들어질 app states 들은 모두 app controller(app.c)에 등록되어 제어가 될 예정입니다. 그 중에 오늘은 첫번째 app이라서 의미가 있습니다. 사실 첫번째 app 만 이해한다면 두번째, 세번째는 비슷하기 때문에 별도의 설명이 필요없습니다. 지난 시간에 우리는 아래 코드 처럼 이미 세개의 app을 만들기 위해 app_id를 app.h에 미리 선언했었습니다. /* app.h */ typedef enum { APP_first, APP_second, APP_third, APP_COUNT, APP_NONE, }app_id_t; APP_first는 첫번째 app의 id가 되..
이전 포스트에서 설명한 state machine 은 현재 application의 상태를 상황에 맞게 active app state를 변경하여 해당 상태에 있을 경우 들어오는 이벤트, 메시지 처리, 이외 요청들을 처리하도록 만듭니다. 또한 원한다면 현재 상태(state)에서 다른 상태(state)로 전환을 할 수도 있습니다. C언어에서는 몇가지 코딩의 제약이 있지만 간단하게 state machine을 만들 수 있으며 우리는 이것을 app state(혹은 app)이라고 편하게 부르도록 하겠습니다. app state 들은 간략하게 다음의 필수 요건이 있습니다. app을 생성,삭제, 전환등을 할 controller 필요 app은 이벤트를 받을 수 있음 app끼리 전환 할 수 있음 app은 하나만 동작 가..
펌웨어를 처음 개발할 때 수많은 절차와 처리들을 어떻게 일목요연하고 보기 쉽게 코딩해야하는지 막막하게 느껴집니다. 이럴 때 보통 디자인 패턴이라는 프로그래밍의 오래된 습관 혹은 관습을 이용하여 해결할 수 있습니다. state machine은 이런 디자인 패턴중에 하나로 아주 사용하기 쉽고 유용하며 소프트웨어 개발자라면 꼭 알아야 할 디자인 패턴 기법입니다. single core 안에서 동작 중인 application은 반드시 하나의 상태(state)안에 있습니다. 각각의 이벤트나 어떠한 처리는 state 안에서 이루어 지며 여러개의 state 끼리 서로 전환하며 프로그램이 동작하게 됩니다. 아래 다이어그램에서 우리가 만들 app state machine 을 좀 더 구체적으로 알아보겠습니다. a..
내 블로그 - 관리자 홈 전환 |
Q
Q
|
---|---|
새 글 쓰기 |
W
W
|
글 수정 (권한 있는 경우) |
E
E
|
---|---|
댓글 영역으로 이동 |
C
C
|
이 페이지의 URL 복사 |
S
S
|
---|---|
맨 위로 이동 |
T
T
|
티스토리 홈 이동 |
H
H
|
단축키 안내 |
Shift + /
⇧ + /
|
* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.