본문 바로가기

CPU4

어셈블리어 뜯어보기 : ATmega328P 아래 책을 보며 임베디드 엔지니어에 대해 공부하고 있습니다!아래는 책 일부를 발췌한 내용에 기반해 작성한 글입니다!1. CPU 관점에서의 레지스터 제어레지스터 제어는 I/O 맵을 통해 이루어지며, 특정 주소에 접근하여 핀의 상태를 설정합니다.레지스터는 메모리 공간의 일부로 할당되며, 어셈블리 언어에서 접근할 수 있습니다.주요 레지스터:DDRx (Data Direction Register): 핀의 방향(입력/출력) 설정.PORTx (Data Register): 출력 모드에서 핀의 값을 제어.PINx (Input Pins Address): 입력 모드에서 핀 값을 읽음.확장 I/O 레지스터(Ext I/O registers)LD/ST 명령을 사용하면 이 공간에 액세스할 수 있다.  2. 어셈블리 코드로 확인av.. 2025. 2. 12.
ATmega328P 내부 구성을 블록 다이어그램으로 이해해보자 아래 책을 보며 임베디드 엔지니어에 대해 공부하고 있습니다!아래는 책 일부를 발췌한 내용에 기반해 작성한 글입니다! 아래 링크의 데이터 시트를 열고 각 부품의 역할에 대해 알아보자.https://www.microchip.com/en-us/product/ATMEGA328PB        마이크로 컴퓨터 내부 구성세부 사항은 데이터 시트를 참고한다.AVR CPUCPU. 플래시 메모리로부터 명령을 읽어, 데이터의 연산이나 가공을 하고, 각 주변장치 회로에 보낸다.Flash프로그램의 명령을 보관한다. 전원을 꺼도 지워지지 않는 메모리로 32K 바이트만큼의 용량을 가지고 있다.SRAM프로그램에서 사용하는 데이터를 보관한다. 데이터는 전원이 켜져 있는 동안만 보존되며, 1K바이트만큼의 용량을 가지고 있다.EEPRO.. 2025. 2. 8.
임베디드 소프트웨어를 개발하는 플로우는 어떻게 될까? 아래 책을 보며 임베디드 엔지니어에 대해 공부하고 있습니다!아래는 책 일부를 발췌한 내용에 기반해 작성한 글입니다!일반적인 프로그램은 고급 언어를 사용하여 PC에서 개발한다.고급 언어는 C, Java, C++ 같이 사람이 읽고 이해할 수 잇는 언어를 말한다. PC에서 개발된 프로그램은 임베디드 시스템의 CPU가 이해할 수 있는 형태로 변환한 후에 기기에 내장된다크로스 개발환경아래는 기기에 프로그램을 내장하기까지 일련의 흐름을 설명한다. 임베디드 시스템은 개발환경의 PC와는 달리 CPU에서 동작시키도록 되어 있다. 단, 에디터를 사용하여 PC에서 고급 언어를 프로그래밍해 소스 코드를 작성하는 것까지는 PC용 프로그램 개발과 같다. 다른 점은 소스 코드가 만들어진 후에 도구를 사용하여 임베디드 시스템용의 실.. 2025. 2. 4.
어셈블리어로부터 main 함수가 호출될 때까지의 흐름 추적 아래 책을 보며 임베디드 엔지니어에 대해 공부하고 있습니다!아래는 책 일부를 발췌한 내용입니다.아래는 빌드 흐름이다. 다음의 명령으로 한번에 빌드까지 실시하여 ELF 파일을 작성한다. 이전엔 -Os를 사용했지만, 여기서는 -O0으로 변경하여 최적화 처리를 무효하고 있다.avr-gcc -O0 -Wall -mmcu=atemga328p main2.c -o main2.elf 이 ELF 파일의 내용을 확인해 보자.ELF 파일은 바이너리 파일이므로 avr-abjdump라는 명령어를 사용하여 텍스트 파일로 변환한다.avr-objdump -S main2.elf > main2.s main2.s  →  [ ELF 바이너리를 avr-objdump로 디스어셈블(어셈블리 언어로 풀어쓴 것)한 결과]main2.elf: file .. 2025. 1. 14.