필자는 Apple Slicon M1 을 사용중이다.
사실 MCU가 없더라도 Keil uVision 같은 IDE(통합 개발 환경)는 디버깅 기능을 제공하며, MCU의 레지스터 값을 시뮬레이션하거나 가상으로 실행하여 확인할 수 있습니다. 즉, MCU의 하드웨어 없이도 프로그램의 흐름을 추적하고 레지스터 값을 읽어오는 것은 실제 하드웨어를 사용하지 않고도 가능합니다.실제 MCU 하드웨어 없이도 디버거가 프로그램을 단계별로 실행하면서 레지스터 값과 메모리 상태를 보여줍니다.
wine은 window API를 macOS에서 이해할 수 있도록 변환하는 역할을 함. Window 시스템 호출을 macOS/Linux에서 인식할 수 있도록 변환하는 역할을 한다.
brew install --cask wine-stable

이때, macOS의 보안 정책으로 인하여 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
터미널에서 경로 입력하여 wine으로 exe 파일 실행

Keil uVision5 IDE 실행

wine ~/.wine/drive_c/Keil_v5/UV4/UV4.exe
하드웨어 초기화 및 시스템 설정:
• 이 파일에서 스택 초기화, 힙 초기화, 클럭 설정, 시스템 초기화 등이 수행됩니다.
• 또한, 인터럽트 벡터 테이블이 설정되어 있고, 인터럽트 서비스 루틴(ISR)도 준비됩니다.
Reset_Handler:
• 프로그램이 시작되면, Reset_Handler 함수가 호출됩니다.
• 이 함수는 main() 함수를 호출하기 전에 필요한 초기화 작업을 수행합니다.
• 스택 포인터를 초기화하고, 시스템 초기화 코드를 실행합니다.
• main() 함수를 호출하는 부분이 이 함수 내에 포함되어 있습니다.
main() 함수로 넘어가기:
• Reset_Handler가 끝나면, 실제 애플리케이션 코드가 시작되는 main() 함수로 흐름이 넘어갑니다.
• 여기서부터 Hello 메시지 출력과 같은 실제 애플리케이션 동작이 시작됩니다.
아직 실습 시작 단계이다. 새로운 오류가 생기면 업데이트할 예정
++ 가끔 실행이 안될 때가 있다. 램 부족인지 다시 실행시키면 어렵지 않게 프로그램이 실행된다.