## 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` 파일의 필요한 부분 수정 