using_cube_IDE.md 1.6 KB

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()) 삽입

    • 예시:

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