[Arm프로세서] AAPCS: Armv8: 함수를 호출하기 위한 디자인
By Guillermo Austin Kim | 2021년 7월 26일 |
이번 절에서는 AAPCS64 기준으로, 실제 함수를 호출하는 예시 코드와 함께, 함수를 호출하면 SP와 X30 레지스터가 어떻게 바뀌는지 알아보겠습니다. 함수가 호출될 때의 세부 동작 원리 파악하기 여러분이 다음과 같은 함수를 작성했다고 가정하겠습니다. 01 int add_func(int x, int y)02 {03 int result = x + y;04 printf("x:%d, y:%d \n", x, y);05 06 return result;07 } [정보]위에서 든 예시 코드는 6.2 절에서 봤던 코드와 같은데, Armv8 아키텍처 기반의 Arm 코어에서 이 코드를 실행하면 같은 기능을 수행합니다. Armv7 아키텍처 다룬 함수 디자인 규칙은 Armv8 아키텍처에 거의 그대
arm instruction(명령어) - strleb
By Guillermo Austin Kim | 2017년 12월 27일 |
strleb란 명령어를 본 적이 있나요? 전 잘 몰라서요, 이 명령어가 어떻게 동작하는지 테스트를 해봤거든요.그 내용을 정리해서 업데이트할께요. 제가 만난 명령어는 아래와 같거든요.cmp r3, #2 @ 1 //<<--[1]strleb r2, [r0], #1 @ 1 해석을 하면 아래와 같아요."R3이 0x2보다 같거나 작을 경우[1], r2의 하위 2바이트를 r0가 가리키는 주소에 있는 값에 저장한 후 r2를 1만큼 증가시킴" "strltb" 명령어는 아래 단어를 줄인 것 같은데요.Str(Store)|le(Signed less than OR equal) | b(Byte) 이 내용이 머리에 잘 안 들어와서 실제 Trace32로 이 명
[dockcross] Docker를 이용한 크로스 컴파일 툴체인 이용하기
By 지훈현서 | 2017년 9월 23일 |
![[dockcross] Docker를 이용한 크로스 컴파일 툴체인 이용하기](https://img.zoomtrend.com/2017/09/23/a0105618_59c5b6cb372d8.png)
라즈베리파이 버전3 모델B는 CPU 아키텍쳐가 ARM 버전 7 (ARMv7) 이었습니다. 좀 더 구체적으로 어떤 임베디드 장비가 있었는데, $ cat /proc/cpuinfo 를 해 보았더니 CPU type이 유사하여라즈베리 파이에서 $ cat hello.c#include <stdio.h>main(){ printf("Hello world for dockcross!n"); return 0;} 와 같은 파일을 컴파일러가 있는 라즈베리파이에서 정상적으로 컴파일 하여, $ gcc -o hello hello.c 그 hello를 임베디드 시스템에 복사하여 실행하였더니 안되는 것이었습니다. 이리 저리 해 보다, $ gcc -static -o hello hello.c
[ARM] 임베디드 개발자가 반드시 ARM 프로세서를 배워야 하는 이유
By Guillermo Austin Kim | 2020년 7월 14일 |
이번 시간에는 ARM 프로세서를 리눅스 시스템 개발자가 배워야 하는 지 설명합니다. 브링업을 제대로 하기 위해서 임베디드 개발자들이 진행하는 프로젝트의 단계는 '보드 브링업 - 기능 안정화 - 유지 보수'로 분류할 수 있습니다.3단계에서 보드 브링업은 어떤 단계를 거쳐 진행될까요? 과제에 따라 다르지만 개발 업무의 내용을 소개하면 다음과 같습니다. * 부트로더에서 스타트업 코드를 작성 * 메모리와 같은 하드웨어를 초기화 먼저 스타트업 코드를 작성하는 업무에 대해서 조금 더 설명을 드려볼까요?전원이 시스템에 들어오면 가장 먼저 실행되는 코드가 reset 익셉션 벡터 코드입니다. 이 코드에서 기본적인 메모리를 설정을 초기화하고 ARM 모드 별로 스택 사이즈를 지정해야 합니다.이 모든 코드를