임베디드 106

I2C 구조

I2C // IIC 클럭동기방식  onewire 는 시간으로 구분했음 주소를 불러서 각 SLAVE 구별 특징 1. 8bit 씩 주고받음 2. 7bit 주소공간 ( 128개) // ex) 0x78 > 0111 1000  > 111 1000만보냄 3. 400Khz 전송속도 4. sleep 모드 > 주소 인식으로 일어남 5. 동기방식 6. 선 두가닥 7. 기본 HIGH // 클럭 발생 주체는 master  기본구조 0. 클럭 HIGH> DA: HIGH 1. 클럭 HIGH > DA : LOW 2. 클럭 LOW > DA : HIGH 3. 다시 클럭 HIGH > 이때 DA 를 읽음 4. 쭉하다가 5. 클럭 HIGH > DA : LOW 계속유지 6. 클럭 HIGH 유지 , > DA: HIGH 7. 기본값 WRITE ..

선점형 Multitasking

선점형 (Preemptive) Multitasking  :  비선점형 (Non-preemptive) Multitasking :  " 하나의 Task가 Scheduler로부터 CPU를 사용권을 할당 받았을 때,        >   Task가 자발적으로 CPU 사용권을 반납할 때까지 강제적으로 CPU의 제어권을 빼앗을 수 없는 방식    선점형 (Preemptive) Multitasking  : Scheduler의 필요에 따라 Task로부터 CPU의 제어권을 강제적으로 빼앗음        >  Task가 실행될 수 있도록 Task의 실행 순서를 결정하는 방식 Multitasking :                시분할 방식 : 동시에 뭔가를 동시 다발적으로 일을 하는 것                     ..

코드 분해

코드 분해 최대한 간단히 > 시간축소 + write 함수가 있으면 그동안 방해받지 않도록 보호해주어야함 @Ds18b20_Init();@ uint8_t isTemperSensorInit(){ return m_init; } //  init이 잘됐는지 확인용 bool Ds18b20_Init_simple (){ m_init = 0; // 처음에는 0 OneWire_Init(&OneWire,_DS18B20_GPIO ,_DS18B20_PIN); //OneWireDevices = OneWire_First(&OneWire); OneWire.ROM_NO[0] = 0x00; OneWire.ROM_NO[1] = 0x00; OneWire.ROM_NO[2] = 0x00; OneWire.ROM_NO[3] = 0x00; OneWi..

Task Service

Task : 하나의 일 단위로 쪼갬  >  누군가가 일을 시키면 일을 하는 상태,      누구라도  기다리고 있는 상태     누군가 일을 시킨 상태 >State Transition Diagram그렇다고.. 자기 state를 누구한테 보여주거나, 관련된 Data를 저장 > X    >  이런 일을 하는 단계들이 있다 정도>    Kernel Level에서 관리  ( Task Level : X )   : TCB 에 있음  기본적인  Task의 state, 구조.void waiter_task(){         waiter_task_init();   /* 여기까지 ①번 init state > 지나자 마자 ②번 wait state */                                        w..

문제원인

문제원인 7세그먼트  1. 동시에 같은숫자 O 2.      "   다른숫자 X  > 1 , 2, 3 ,4 를 각각 빠르게 껏다켰다     > 눈에는 다르게 켜진컷 처럼 보임  그러느라 while 문은 하나여서 다른 일을 못함 > timer   : 숫자표현 > main      : printf("hello\r\n"); >> 세그먼트 + UART 동시실행 근데.. 7세그먼트 표현    |     온도 가져옴 : GPIO 신호 만듬  |    : GPIO 신호 만듬 > 온도 쪽에서 GPIO 쓰다가 세그먼트에서 갑자기 그걸 뻇어감  > 온도에서 끝나면 세그먼트로 넘어가게 해주어야함 문제해결 1. 하드웨어적으로 > 불가..   >  모듈 구조 : 7세그먼트 + 쉬프트 레지스터  a) 7세그먼트  : 3.3v >..

장치 통합

현재 세그먼트 과정 1 > 2 > 3 > 4 순서대로 킴 + void send_port(unsigned char X, unsigned char port) {     send(X);  // 첫 번째 데이터 전송     send(port);     HAL_GPIO_WritePin(FND_RCLK_GPIO_Port, FND_RCLK_Pin, GPIO_PIN_RESET);     HAL_GPIO_WritePin(FND_RCLK_GPIO_Port, FND_RCLK_Pin, GPIO_PIN_SET); } void digit4_temper(int n, int replay) {   int n1, n2, n3, n4;   n1 = (int)  n % 10;   n2 = (int) (n % 100)/10;   n3 = (..

Task 구조, signal

void main () {        Lamp_init();        while (1)       {             Lamp_on();             time_wait (100); /* wait 100uS */               Lamp_off();             time_wait (100); /* wait 100uS */       } }  Motor도 움직이고싶다.     >  또하나의 main()함수 생성 void main() {         Motor_init();        while (1)       {             Motor_on();             time_wait (100); /* wait 100uS */             Moto..

난방실 만들기

HAL_GPIO_TogglePin(GPIOx, GPIO_Pin); 알아서 on/off 해줌 static 파일내 전역변수 원래 함수끝나면 그 안에서 소멸인데 static으로하면 계속 유지됨 //파일내에선 ex) static uint8_t m_state=0; void heaterControll(uint8_t onoff){ HAL_GPIO_WritePin(RELAY_ON_OFF_CTRL_GPIO_Port, RELAY_ON_OFF_CTRL_Pin, onoff); m_state=onoff; } uint8_t getHeaterState(){ return m_state;  // 함수 내에서는 m_state 에 대한 선언 없어도 사용가능 // 그값은 heeaterControll 에서 사용된 그 값이 유지됨 } 열거형 ..

Embedded Software는 무한 Loop

대부분의 Embedded System : 특정한 목적을 가진 System   >  목적달성 > 한 개의 Software가 동작    >  대부분 무한 Loop를 이용해서 구현  > Embedded System의 기능 + Hardware Control도 구현 while (1) { 뭐라뭐라뭐라 void main () {    Lamp_init();    while (1)    {       Lamp_on();       wait (100); /* wait 100uS */       Lamp_off();                  wait (100); /* wait 100uS */    } } }  100uS동안 Lamp가 켜져 있고, 100uS동안 Lamp가 꺼져 있고를 반복하는 Embedded Syst..

6장) RTOS, Kernel

RTOS, 요즘은 Kernel what is Kernel?  OS 없을 때 : User가 모든 기능을 Software가 처리하도록 처음부터 끝까지 작성 OS 등장 :  Software > Hardware에 자동으로 Loading, 실행해 주는 Monitoring 환경         > 실행만 하면 자동으로 Memory에 Loading ex) DOS  모든 Software 공통점 :  I/O   :  Input을 받고 Output을 해주는 Architecture 사용 ex) 키보드, 모니터    >  Monitoring 환경에 아예 집어 넣고 사용  " Operating System "   >  실행만 해주면 자동으로 Memory에 올려서 실행 가능하게 만들어줌 + I/O를 사용할 수 있도록 해줌 (옛날엔..