2025/01/19 5

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

UART, DMA

1. DMA 없이 버퍼를 사용하는 경우CPU가 데이터를 한 바이트씩 처리해야 하기 때문에 느려질 수 있습니다.동작 방식:주변 장치(UART, SPI 등)에서 한 바이트 데이터를 수신.CPU가 인터럽트를 받아 데이터 처리.데이터를 버퍼에 저장하거나 출력.이 과정을 데이터의 총 바이트 수만큼 반복.문제점:CPU 부하 증가: 데이터 처리량이 많아질수록 CPU가 모든 바이트를 처리하느라 작업이 지연됩니다.속도 제한: 인터럽트 빈도가 높아지고, 주변 장치와 메모리 간 데이터 이동 시간이 길어질 수 있습니다.실시간성 저하: CPU가 다른 작업을 처리할 시간이 줄어듭니다.2. DMA를 사용한 경우DMA는 CPU의 개입 없이 데이터를 한 번에 블록 단위로 전송하므로 훨씬 효율적입니다.동작 방식:DMA가 특정 메모리 버..