## CubeIDE 에서 인터미턴트 커널 활성화하기 - `Core/Inc/ImC/imc_kernel.h` 내의 매크로 설정 - `#define imcUSE_IMC_KERNEL 1`: imc 커널 활성화 - `#define imcSTM32_CUBE_IDE 1`: CubeIDE 를 사용할 경우 1, `cmake` 환경일 경우 0 - 두 환경의 컴파일러가 생성하는 코드가 달라 서로 다른 레지스터를 사용하는 경우를 체크포인트 시 반영 - `#define imcSTACK_SIZE (1024)`: imc 응용의 스택 크기 (원소의 수) 선언 - 현재는 여러 imc task 가 있을 경우 동일한 스택 크기를 사용해야 함 (추후 업데이트 가능) - `Core/Src/main.c` 내의 task 생성 API 변경 - 기존 `osThreadNew()` 대신 `imcOsThreadNew()` 사용 - 파라미터는 동일 - 응용 코드 내에서 체크포인트를 원하는 지점에 체크포인트 호출 매크로 (`imcREQUEST_CHECKPOINT()`) 삽입 - 예시: ```c void taskImcTest(void *argument) { int i = 0; while(1) { osDelay(1000); printf("i=%d\r\n", i++); imcREQUEST_CHECKPOINT(); } } ``` ## FreeRTOS 코드를 재생성한 경우 변경사항 복구하기 - 인터미턴트 커널 구현에는 일부 FreeRTOS 루틴의 변경이 필요 (`Middlewares/...`) - `.ioc` 파일 수정 등으로 코드를 재생성한 경우 변경사항이 제거됨 - 코드 재생성 후 프로젝트 루트 디렉토리에서 `git checkout -- Middlewares/` 를 실행하여 커널 변경사항 복구 - 이후 위 내용을 참고하여 `main.c` 파일의 필요한 부분 수정