MacOS 에서 Keil uVision5 IDE를 실행해보자.

손지웅·2025년 3월 20일

Embedded Software

목록 보기
1/7

MacOS에서 Keil uVision5 IDE를 실행해보자.

필자는 Apple Slicon M1 을 사용중이다.

Keil uVision5 IDE ?

  • 임베디드 시스템 개발을 위한 통합 개발 환경
  • 주로 ARM Cortex-M 및 Micro Controller Unit 을 위한 소프트웨어 개발에 사용된다.
  • C 언어로 작성한 코드를 MCU에서 실행할 수 있도록 도와주는 개발 환경!
    문제는, 해당 IDE가 window 환경에서만 작동한다는 것이다. 해서 우리는 Wine이라는 프로그램을 사용할 것이다.

사실 MCU가 없더라도 Keil uVision 같은 IDE(통합 개발 환경)는 디버깅 기능을 제공하며, MCU의 레지스터 값을 시뮬레이션하거나 가상으로 실행하여 확인할 수 있습니다. 즉, MCU의 하드웨어 없이도 프로그램의 흐름을 추적하고 레지스터 값을 읽어오는 것은 실제 하드웨어를 사용하지 않고도 가능합니다.실제 MCU 하드웨어 없이도 디버거가 프로그램을 단계별로 실행하면서 레지스터 값과 메모리 상태를 보여줍니다.


Wine ?

  • Window 프로그램 (.exe) 을 macOS 및 Linux에서 실행할 수 있도록 해주는 Compatibility Layer Program . 호환성 계층이다
  • Windows 전용 프로그램을 macOS에서 실행할 수 있게 해줌!

Wine 실행 방식

wine은 window API를 macOS에서 이해할 수 있도록 변환하는 역할을 함. Window 시스템 호출을 macOS/Linux에서 인식할 수 있도록 변환하는 역할을 한다.

Wine 설치 방식

brew install --cask wine-stable


이때, macOS의 보안 정책으로 인하여 wine을 열 수 없다.

  1. 시스템 설정
  2. 보안 및 개인 정보 보호
  3. Wine 실행 허용

을 통해 wine을 실행할 수 있도록 권한을 열어주자.

Wine 설치 경로

Wine을 설치하면, 설치된 디렉토리는 가려져 보이지 않는다. '.' 으로 시작하는 폴더는 숨겨저 있어 Finder에서는 찾을 수 없다.

해결 방법 : ⌘ + Shift + .

해당 단축키를 입력하면 숨겨져 있는 폴더를 볼 수 있다.

폴더 안의 drive_c를 확인하면, wine으로 실행한 어플리케이션을 볼 수 있다.

한글 인코딩이 깨졌을 때

Wine의 기본 인코딩 설정이 macOS의 UTF-8과 맞지 않기 때문 !

export LANG=ko_KR.UTF-8
export LC_ALL=ko_KR.UTF-8
winecfg
  1. Wine의 “그래픽” 탭 설정 변경 -> 창 관리자에서 윈도우 장식 사용” 체크 해제
  2. 한글 폰트 설정 변경 -> “라이브러리” 탭 클릭 -> “새 재정의할 라이브러리”에 아래 항목 추가
  • usp10 gdiplus
  1. Windows 버전 설정 변경 -> Windows XP 또는 Windows 7으로 변경

실습

  1. 터미널에서 경로 입력하여 wine으로 exe 파일 실행

  2. Keil uVision5 IDE 실행

wine ~/.wine/drive_c/Keil_v5/UV4/UV4.exe

Hello.c 실행

  1. 프로그램 시작:
    • startup_stm32f10x_md.s 파일은 STM32F10x 마이크로컨트롤러의 시작 파일입니다.
    • 이 파일은 프로그램이 시작될 때 자동으로 실행되며, 하드웨어 초기화와 관련된 기본적인 설정을 포함하고 있습니다.
  1. 하드웨어 초기화 및 시스템 설정:
    • 이 파일에서 스택 초기화, 힙 초기화, 클럭 설정, 시스템 초기화 등이 수행됩니다.
    • 또한, 인터럽트 벡터 테이블이 설정되어 있고, 인터럽트 서비스 루틴(ISR)도 준비됩니다.

  2. Reset_Handler:
    • 프로그램이 시작되면, Reset_Handler 함수가 호출됩니다.
    • 이 함수는 main() 함수를 호출하기 전에 필요한 초기화 작업을 수행합니다.
    • 스택 포인터를 초기화하고, 시스템 초기화 코드를 실행합니다.
    • main() 함수를 호출하는 부분이 이 함수 내에 포함되어 있습니다.

  3. main() 함수로 넘어가기:
    Reset_Handler가 끝나면, 실제 애플리케이션 코드가 시작되는 main() 함수로 흐름이 넘어갑니다.
    • 여기서부터 Hello 메시지 출력과 같은 실제 애플리케이션 동작이 시작됩니다.

  1. 메시지 출력:
    • main() 함수 내에서 Hello 메시지를 출력하는 코드가 포함되어 있을 것입니다. 보통 UART나 디버그 출력을 사용하여 메시지를 출력합니다.

아직 실습 시작 단계이다. 새로운 오류가 생기면 업데이트할 예정

++ 가끔 실행이 안될 때가 있다. 램 부족인지 다시 실행시키면 어렵지 않게 프로그램이 실행된다.

0개의 댓글