FW 심화 과정 53

0808 netsted(중첩) / priority(우선순위) Interrupt

/* -> NON ATOMIC OPERATION __set_PRIMASK(1); rGPIOD->ODR = rGPIOD -> ODR ^ (0X1 ATOMIC OPERATION bGPIOD_ODR_13 = 1; bGPIOD_ODR_13 = 0; 위 코드는 main문에서 실행되는 코드 non alias 메모리를 통해서 작동하기 위해서는 __set_PRIMASK 로 임계영역을 설정해줘야 함 alias 메모리를 사용하면, 임계영역 설정해주지 않아도 됨 // priority of irq6 *(char *) 0xE000E406 = 0x30; // priority of irq23 *(char *) 0xE000E417 = 0x40; // priority of irq15 *(char *) 0xE000E428 = 0x50;..

0803 NVIC, BUS Interfaces

- 밑 3버스가 sram과 연결됨 int tmp = *(int *)0x22000000; -> 2200만 번지에서 네바이트를 읽어서 tmp에 대입 위 구문 실행하면 data address bus 실행됨. 이 값이 bus matrix로 들어감. bus matrix 거쳐서 주소가 system bus로 들어감. 8비트에서 1비트만 뽑아내서 data icode P.27 *** Atomic *** rSFR의 끝 두비트는 11로 변경 -> 3 하지만, 인터럽트 발생시점에 따라서 3이 되지 않을 수도 있음 INTERRUPT는 해당 명령어(ORR) 끝나고 실행됨. 하지만 ISR 이 무시됨 따라서 결과는 10 INTERRUPT MASKING DISABLE 이므로 중간에 ISR발생해도 이동하지 않음 실행이 완료된 후 INT..

[C] 유용한 함수작성

- 문자열 길이 구하는 함수 작성하기 int GetStringLength(char data[]) { int count = 0; /* 0이 나올 때까지 문자의 개수를 더한다 */ while (data[count]) count++; /* while(data[count] != 0) count++; 과 동일 */ /* 문자열의 길이를 반환한다 */ return count; } #include /* temp 변수를 이용하여 a와 b의 값을 서로 바꿈 */ void Swap(int *pa, int *pb) { int temp = *pa; /* *pa(start) = 96, *pb(end) = 5 */ *pa = *pb; /* *pa(start) = 5, *pb(end) = 5 */ *pb = temp; /* *pa..

[라즈베리파이] 파이카메라 웹 스트리밍

https://github.com/jacksonliam/mjpg-streamer -> 개발자 git GitHub - jacksonliam/mjpg-streamer: Fork of http://sourceforge.net/projects/mjpg-streamer/ Fork of http://sourceforge.net/projects/mjpg-streamer/ - GitHub - jacksonliam/mjpg-streamer: Fork of http://sourceforge.net/projects/mjpg-streamer/ github.com https://dev-overload.tistory.com/43 -> 참고 [Linux] Raspberry Pi 4B 와 카메라 모듈을 이용한 실시간 스트리밍 구축 ..