임베디드 106

Stack , Heap

STACK : history기능을 가짐,  Heap : 메모리를 빌려줄 수 있음  stack, heap :  전역변수 배열로 선언되어있음  Stack : 뭔가를 쌓는 구조의 Memory 영역  Stack : LIFO (Last In, First Out) 자료 구조     Push : Stack에 자료를 집어 넣음     Pop  : Stack에서 자료를 빼는 것 ex 1) DOS, UNIX, LINUX cmd 창에서 쓸 수 있는 history기능   ↑ 위쪽 화살표 키를 계속 누르면 가장 최근에 입력했던 command에서부터 다시 보여주줌 ex 2) 우 Window Application 등에서 ctrl - z (취소) 버튼을 계속 누르면 가장 최근에 작업했던 것부터 점점 차례대로 취소해줌  >  Stac..

struct , packed

struct customer {char *name;int height;int weight;} kim[100]; 이라든가, struct customer {char *name;int height;int weight;} *kim;typedef : 기존의 Data형으로 새로운 Data형을 만드는 것 typedef unsigned char byte; : Unsigned 8 bit value type.typedef unsigned char uint8; Unsigned 8 bit value.typedef unsigned short word; Unsinged 16 bit value type.typedef unsigned long dword; Unsigned 32 bit value type. typedef struct ..

온도센서

부품) 3가닥 쇠부분 모듈 쇠 부분에 열 > 저항이 변함 > 전압이 변함 > 변한 수치로 계산해서 온도 측정 (ADC)  DATASEET DAT : DATA IN/OUT 을 pin 하나로 함 onewire.cpp // 예제코드 pde + cpp 코드분석 (pde) OneWire  ds(10); (cpp) OneWire::OneWire(uint8_t pin) { pinMode(pin, INPUT); // INPUT bitmask = PIN_TO_BITMASK(pin); baseReg = PIN_TO_BASEREG(pin); #if ONEWIRE_SEARCH reset_search(); #endif uint8_t OneWire::read() {     uint8_t bitMask;     uint8_t r ..

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..