2025/01/07 4

ATOMIC

int curr_temp[2];//  전역변수로 배열 선언하면// 함수 내부에서 각 요소 값을 지정해주더라도// 값들이 사라지지 않음 void read_temperature_isr(void){      curr_temp [0] = read_temp_door();  /* 문가의 온도계를 읽어 옴 */      curr_temp [1] = read_temp_indoor();  /* 실내의 온도계를 읽어 옴 */} 온도차가 크면 수리공에게 전화하는 시스템 void waiter_task(){     int temp_door;     int temp_indoor;         waiter_task_init();                                           while (1)     ..

Clock Tick ISR

정해진 Tick 마다 ISR 이 걸러줌 > 흘러간 시간 파악   > 얼만큼의 시간이 흐르면 특정동작하도록 할 수 있음: Kernel service  > Timer service Call back Function : 호출될 시간을 Parameter 로 줌 clk_regiseter(key_polling, 100); > 100ms 후에 key_polling 호출  // 일반적으로 5ms 마다 불림Clock Tick ISR1. clk_regiseter 된 Call back Function 들의 시간을 5ms 씩 빼줌2. 5ms 씩 빼다가 0이된 놈들 ( Expire )  > Call back Function 실행3. Linkedlist   Call back 등록  > list : 얼마남지 않은 순서로 등록   ..

선점형 kernel

TCB 관리 , kernel 에게 현재 tast 해야할일 을 알려주기 위한 kernel API    ? wait, send, clr signal() 현재 task 가 wait 상태이며, wait 시그널의 비트and 해서 0이면> wait signal Update ,  가장 높은 우선순위를 찾아 그놈으로 context switching    send_signal() 구현(1)목적지가 wait를 하고있는지 확인해야함 > 그래야 보내주니깐(2) 함수입력할때 확인용 signal 을 대치 해봄   send_signal (목적지tcb, 보낼 signal)1. 목적지tcb ->받는 신호를 백업2. 받는신호를 현재 보낼 signal 과 비트연산> wait 신호와 시그널이 같은지?>wait 시그널=0 ,> 우선순위확인>..

ISR구현

ISR: Interrupt가 걸려 IRQ Exceptin이 발생 > IRQ Handler로 Branch > Interrupt 처리 //Exception Vector AREA    INIT_VECTOR, CODE, READONLY // INIT_VECTOR        CODE32                         ; 32 bit ARM instruction set.        ENTRY        B       Reset_Handler                       ; 0x0        B       Undefined_Handler                 ; 0x4        B       SWI_Handler                         ; 0x8      ..