2024/12 38

Pointer

Pointer   : 주소를 가리키는 word 크기의 자료 형입니다.   // word형 : 32bit machine > 32bit  64bit machine > 64bit크기 ex) 32bit machine int *address;  address: pointer형 자료,  address 자체의 크기 : 32bit 크기,  address가 가리키는 자료 형 : integer type  int* address 가 맞는 표현  int* : integer type을 가리키는 pointer형이라는 자료 구조, address가 그 자료의 이름    > sizeof(address) = 32 bit, 4byte   address: integer형을 가리킴  address : 주소가 담김  *address: addr..

Context와 AAPCS

Context : 현재 CPU에 대한 모든 정보( == Register들의 현재 값들)    현재 System이 동작하는데 필요한 모든 정보를 담고 있음.  R0~R12 : CPU의 연습장. R13 : Stack Pointer, 현재 CPU가 사용하고 있는 Stack의 주소 중,, 마지막 Push한 Data가 있는 곳의 주소. R14 : Linked Register ::어디서 왔는지, 어디로 돌아가야 하는지에 대한것, R15 : (PC) : 현재 실행 주소 정보 CPSR : 현재 CPU의 상태에 대한 주소.  Register 값들만 잘 보존하면 pc를 왔다갔다 가능  > Function Callvoid ContextDaughter();void ContextMother (void){     나불나불나불~ ..

GPIO >SPI

stm32 cubeide  프로젝트 복사해도 복사한 파일의 값을 변경하면 원래 파일의 정보가 바뀜  > metadata 등의 관계에의해 + 백업 잘해두자,, 다 날려버림 해결책 1. second 로 실행시 ide에 first라고 뜨는데 그거 제거     ** 이때 contents on disk 체크 박스 꼭 해제 2. import projects 3. general > existing projects into workspace 4. second > browse 5. ioc 이름도 secoond 로 변경 // 속성에서 잘 확인 6. 디버그 속성에서도 second.elf로 변경 7. project > clean ------------------------------------------------------..

FND 분석

// SCLK   HAL_GPIO_WritePin(FND_SCLK_GPIO_Port, FND_SCLK_Pin, LOW); HAL_GPIO_WritePin(FND_SCLK_GPIO_Port, FND_SCLK_Pin, HIGH); // HIGH 로 끝나므로 시작도 HIGH // DO (DATA OUT)    if (X & 0x80)     {       HAL_GPIO_WritePin(FND_DIO_GPIO_Port, FND_DIO_Pin, HIGH);     }     else     {      HAL_GPIO_WritePin(FND_DIO_GPIO_Port, FND_DIO_Pin, LOW);     }     send(0xF8); HAL_Delay(1000); > 오실로스코프로 1111 1000 확인 ..

Scatter Loading 주의점, heap 및 stack

1)  우리 나름대로의 Stack과 Heap을 사용하게됨   > 자동으로 Compiler가 만들어주는 Stack과 Heap은 안씀 "그런데, 우리가 만들어낸 image의 ZI에 포함되지 않는 여기서의 Stack과 Heap은 도대체 뭐냐!   Default Memory model > RO, RW, ZI : Application 하나 올린것  Embedded OS (또는 Kernel)같은 복잡한 것이 porting되지 않았음     > Application이 사용하는 Stack과 Standard Library가 사용하는 (malloc같은) Heap인것      >  Compiler가 알아서 Stack과 Heap영역을 만들어줌 /* 스택(stack) 영역 함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는..

Reset Handler에서 main까지 (Entry Point)

ARM core Embedded System Power on == Reset Exception  >  SVC mode > Reset Vector > PC setting    Reset Vector( Low Vector ) : 0x0 // Reset Handler로 branch하는 code가 있음 Exception Vector AREA    INT_VECT, CODE, READONLY CODE32                         ; 32 bit ARM instruction set. ENTRY B       Reset_Handler                       ; 0x0  // Reset Handler로 branch B       Undefined_Handler              ..

SPI통신

SPI데이터 주고받는 선 : 3가닥 ( 클럭, 데이터2 )  > 전압차이 이용 HIGH > LOW or LOW > HIGH 데이터 구분  1. Time base : bps (1초를 쪼개서) 2. CLK : 1주기에 대한 데이터의 값 구분 > SPI : CLK 전이중 > A의선 B의선 두개로 서로 말할 수 있음 반이중 > A와 B 가 하나의 선을 번갈아 사용 > SPI :default 전이중, + 둘다 사용 1:다수 통신  A  1) > B C D       2) > B C D  CLK > B C D >> 단점1)  A입장 >누구한테 말할지 알 수 없음        "    2) BCD입장 > 누가 말하는지 알 수 없음 (SPI 해결)  2) Master, Slave 전용으로 만듬 slave : maste..

FND 모듈제어

모듈 구성 : 메인칩 + 필요한 최소한의 회로   (쪽보드) 제어 단계 1. 칩, 부품 모델명 확인 : TM74HC595 , 7세그먼트  2. 데이터시트 구글링 1) TM74HC595 2) 모듈 자체의 데이터시트 QA , QB, QC ,,, 찾는법  1) 모듈 데이터시트 2) 쇼트테스트 3) 남이 정리한것 찾기 4) 샘플 코드를 구해서, 일단 동작시키고     > 그다음 추리     구글에 칩 sample code 검색.. @ STI 통신 CLK > DI( data )  클럭을 기준으로 데이터를 보냄 GPIO3개 outut > CLK, DATA Input , DATA output @ cpp 코드 > stm 으로 변환 해석 void TM74HC595Display::send(unsigned char X) {..