임베디드 106

2장 이어서

1. .Preprocessor (.i) .c -> .s -> .o -> .elf -> bin  #ifdef :: 2중 define 막기위함 2. sta tic ::  C++ : protect     > 자기 함수, .c파일내에서만 global          > exturn 불가 3. Volatile : 같은 주소에 값을 연달아 넣을때 최적화방지 4. symbol : 자신만의 주소를 갖는 단위 :: global     local : 자신만의 주소 X  5. const : ReadOnly : 값 따로 못줌   ex) const int i;  > i 는 쓰레기값으로 평생 살아야함                   i=3; >> X 컴파일에러  6. RO, RW : read / write    > ROM 에 저..

2장 정리

1. word : CPU 가 한번에 처리할 수 있는 크기 2. Thumb mode : 과거에 쓰던거라서..   > uint16_t 짜리 data 를 uint32_t 버퍼에 넣는거랑 비슷함      // 2번 가져오지뭐,, 3. ARM mode     normal : USR , 나머지 : privileged       >> USR -> privileged X 4. 모드별 Register N : Negative : 마이너스2) Z : Zero : 0 일때 3) C : Carry : 자리올림.4) V : over flow 하위 7 bit : IRQ        6 bit : FIQ       > 0 :: enable        5 bit : Thumb       0~4 bit : 현재 mode  SPSR  ..

1장 이어서

13.  Ripple 제거 : DC의 흔들림 (약간의 AC) 제거하기 위함 ( 보통] 캐페시터 사용) 14. CONTROL/ : High > T1 : ON  > 0V: T2의 Emittor쪽 > T2 : OFF  > OUT : 0V (R2)                   : Low > T1 : OFF > INPUT > T2 : ON > OUT : INPUT // R2 : 평소에 0V 묶기 위한 High Active Pull Down 15. IC chip : NC : No Connection 16. Register : Flip Flop의 집합  // FLip Flop(Latch) : 1bit 정보저장 input 이 새로 들어올때까지 data out 을 유지함 > Memory 기능 17.    Bus(lo..

1장 정리안된부분

1. cos2ㅠft :       시간영역) 시간과 신호크기에 대한 주파수 ( 2가지성분)  : AC  // 극성이 바뀜 // 주파수 O      주파수영역) 주파수에 대한 주파수크기(진폭) ( 1가지성분)       : DC // 극성 유지( AC의 평균값 )  // 주파수 0// 주파수 크기 == 진폭2. FFT   : 세상의 모든 신호를 cos 과 sin의 무한한 합으로 나타낼 수 있다. ( DC + AC )   /*cos⁡(2πt) ::  주기가 1 , f = 1Hz > FFT     :  Δf = 1/T 시간을 길고 짧게 짤라서 그때의 주파수를 재해석함   > 가능한 모든 주파수의 영역을 계산// 함수 그래프처럼 일부를 짜르는 것이 아님.  ex)cos(2πft) :: 무한한 시간에서도 진폭이 ..

Excetption , JTAG, ICD (완)

Memory Map :: 다른데는 다 FF 인데 > 0xFD 이면 > SDRAM 불량 ICE : In-Circuit Emulator   Host의 Debugger > Taget 의 Regi, memory내용 > 실시간 읽고쓰기 + break point + step : go-break 를 한번에 해줌  > step-by-step 으로 관찰가능 > with Host ) USB , Ethernet , Paralled 로 통신   with Target ) JTAG    > HW pin 직접 control 가능 ARM : JTAG MACRO cell 존재 : bountdary scan 기술적용    > CPU상황 모니터링 JTAG : 프로세서를 들여다 볼수있음 + memory access , CPU 하는일 중간에..

watch dog Reset in ISR

High Reset Vector : 0xFFFF0000  Reset 발생  system mode (USR)R14 값 OR13 : ISR 처리 한 후 > system mode 의 stack 의 시작부분을 가르킴  // push 한 부분을 다 pop 했으므로   > 근데 여기서의 R13은 그렇지 않음 //system Mode 의 stack 시작은 0x00FEEE730 부터! >>>ISR 을 처리하다가 HW reset 즉, Watchdog Time out으로 죽었다는걸 유추가능 자 그다음, USR 의 R14 : 0x47B1 로 가보면.. 000047AC|       bl   0x11280000047B0 |       ldr r0,0x4844 0x47B0 으로 들어오기 위해 47AC 에서 R14에 47B1 을 ..

0x0 go

Reset_Handler 에서 멈춤 !> Reset 걸림 >HW reset 외에 또 reset 이 있나? > 없음>SW 적으로 PC의 0x0 에 우연히 들어가게 되어 발생함>Reset Vector 가 High Vector 가아닌 Low Vector에 걸림 ( PC : 0 ) >>stack 을 깨먹는 드러운 상황이 아니고서는 LR을 뒤져보는것이 매우 효율적  R14 : 0x00EDCF3B    > 최하위 bit 1 :       1 : thumb mode 로 복귀     0;  ARM mode로 복귀// CPSR 이 하위 bit 5 가 thumb/ ARM 현재 상태 나타내는 구별 >> Thumb mode로 돌아오므로     : 0xEDCF3A ( 0xEDCF3B -1 ) 로 돌아올 준비를 함 0xEDCF3..

Abort is ISR - IRQ mode 에서의 Abort

Abort 발생 SPSR : 8000003F :  8000 0000 0000 0000 0000 0000 0011 1111    > 11111 (하위 5bit ) : System mode                                  > ISR을 실행하는 mode    > R14 를 확인해보자 (Abort의 R14는 믿을만함 )                                 // 넘어간 후에발생한 상황이므로 > R14 : 0x476A  clock_tick_isr() 이라는 함수에서 ABORT 발생   > clock tick interrupt 가 발생할때마다 불리는 ISR 이 아닐까?  typedef struct{  boolean (* HWIO_OP)(void);  void (* HW..

Stack corruption

prefetch_handler :: prefetch Abort 가 난상황!     R14 : 0x2   >> ?? 모름>R13 확인 ( SP) 인데 이전 mode 의 R13을 확인해야함    > Abort mode의 stack 을 가르키고있음 (  현재 error는 prefetch Abort인데) 이전 mode의 상태는 SPSR에 저장되어있음   :  40000033 == 0011 0000 0000 0000 0000 0000 0011 0011    > 10011 (하위 0~4bit ) : SVC mode    >  1 (하위 5 bit ) : Thumb 모드  >SVC 의 R13 확인 : 0x0116FD24   FFFFFFFF 만있다.. +SVC R14도 FFFFFFFF....>>>이럴때는  stack ..