본문 바로가기
반응형

전체 글1347

[임베디드/ARM] 인터럽트 처리 (IRQ, GIC) 인터럽트(Interrupt) 란?CPU가 현재 작업을 하다가도 이벤트가 발생하면 그 작업을 중단하고 해당 이벤트를 처리하도록 만드는 것VIC(Vectored Interrupt Controller)• ARM7, ARM9 등 구형 ARM 프로세서에서 사용하는 인터럽트 컨트롤러 • 각 인터럽트의 우선순위, 마스킹 설정 가능 • 소형, 단일코어 기반 시스템에 적합 ex. MCU • 보통 32개의 인터럽트 소스 수 • 벡터 방식 GIC (Generic Interrupt Controller)• GIC은 VIC을 대체한 고성능 확장형 인터럽트 컨트롤러 • ARM Cortex-A 계열(멀티코어 시스템) ex. SoC • 수백 개 이상의 인터럽트 소스 수 • 분산 처리 방식IRQ vs FIQARM은 인터럽트 처리 방식 .. 2025. 7. 7.
[임베디드/펌웨어] UART UART (Universal Asynchronous Receiver/Transmitter)• 직렬 통신을 위한 하드웨어 모듈• 데이터를 하나씩(1 bit) 주고받는 방식 특징• 구현이 간단하고 하드웨어 자원이 적게 듦• 널리 사용되며 많은 디바이스가 지원 보통 콘솔 입출력용으로 사용 터미널 프로그램을 UART 포트와 연결하면 UART 통해서 받은 아스키 코드를 그 코드에 해당하는 문자로 화면에 출력 📌 [NAND Flash] ECC(Error Correction Code) 란? [NAND Flash] ECC(Error Correction Code) 란?들어가며 Digital 신호 처리 과정에서 Error가 발생할 수 밖에 없다. NAND 세대가 거듭될수록 성능이 좋아지지만 그만큼 Error 증가도 있.. 2025. 7. 6.
[C++] enum class와 enum enumenum은 순차적으로 나열된 정수형 상수를 만들 때 사용사용할 때는 enum 키워드 없이 이름을 가져와 사용하면 된다.enum SU { ONE = 1, TWO, THREE, FIVE = 5, SIX,};SU num = ONE;enum 변수 크기는 int형 크기이지만 int 형과는 엄연히 다른 자료형이다.#include using namespace std;enum week { SUN, MON, TUE, WED, THU, FRI, SAT };int main(void){ week w; w = 5; // error w = MON; int n = SUN; // error 자체는 없지만 권장하지 않음} 📌 [C] 열거형 타입 enum 이란? [C/C++].. 2025. 6. 29.
[임베디드] SSD 실제 저장 용량 Q) SSD/HDD 제품 정보와 실제 용량이 다른 이유는 무엇일까?• 용량 표기 방식의 차이 (Decimal vs Binary) • 파일 시스템 및 포맷 손실 • Over-Provisioning (OP, 여유 영역 설정) • 숨겨진 제조사 전용 영역1) 용량 표기 방식의 차이 (Decimal vs Binary)저장할 수 있는 용량 기가바이트(GB)와 테라바이트(TB) 단위가 존재한다. • 비트(bit) = 2진수(binary digits) → 0 or 1 처리 • 바이트(byte) = 1바이트는 8비트. ex) 1101_0010 • 킬로바이트(KB) = PC에서 가장 작은 파일 저장 단위는 보통 4KB이다  1KB = 1024바이트 = 1024 x 8 bit = 8192 bits • 메가바이트(MB) .. 2025. 6. 23.
주파수와 대역폭란 무엇일까? MHz (Megahertz, 메가헤르츠)• Million Cycles Per Second) • 주로 마이크로프로세서의 클럭 속도 표현에 사용 • 1초에 얼마나 많은 신호 변화가 일어나는지 표시 • 1 MHz = 1,000,000 Hz = 초당 100만 번 • 1GHz는 1초에 10억 번 신호 = 연산 가능 횟수도 많음 → 속도와 성능이 높아짐 대역폭• 얼마나 많은 데이터가 "한 번에 지나갈 수 있는가" • 흔히 초당 전송할 수 있는 데이터의 양 (bps, MB/s) 주파수 vs 대역폭✅ 높은 주파수 → 빠른 신호 전송 → 더 많은 데이터 통신 가능 → 대역폭 증가 2025. 6. 20.
[리눅스] vi 명령어 vi 명령어자주 사용하는 vi 명령어 모음집단축키내용i현재 커서 위치에 Inserto아랫줄에 Insertyy현재 줄 복사dd현재 줄 잘라내기p붙여 넣기:w문서 저장:w{파일명}파일명을 지정하면 새 파일로 저장:qvi에서 작업한 것이 없을 때 vi 종료:q!현재 문서 저장하지 않고 닫기:wq현재 문서 저장하고 닫기:set nu라인 번호 출력:set nonu라인 번호 출력 취소:숫자지정한 숫자라인으로 이동:?{문자열}커서 위치 뒤로 문자열 검색:/{문자열}커서 위치 앞으로 문자열 검색:%!xxdHex 형식으로 보기 vi 내용 치환단축키내용:%s{문자열 A}/{문자열 B}파일 전체에서 모든 {문자열 A}을 {문자열 B}로 치환:{범위}s{문자열 A}/{문자열 B}g범위 내 모든 행에서 {문자열 A}을 {문자.. 2025. 6. 8.
[C++] 임시(temporary) 객체 임시 객체• Point p1(1, 2) ; → named object → 선언한 블록을 벗어날 때 파괴 • Point(3, 4); → 임시 객체 (unnamed object) → 선언한 문장의 끝에서 파괴#include struct Point{ int x, y; Point(int a = 0, int b = 0) { std::cout 문장 끝나자마자 소멸되는 것을 확인할 수 있다.[예제] 임시객체 특징• 임시 객체는 rvalue로 등호(=)의 왼쪽에 올 수 없다. • 임시 객체는 주소를 구할 수 없다. (생성자에서 this 사용할 수 있다.)#include using namespace std;struct Point{ int x, y; Point(int a = 0, int b = 0) { cout er.. 2025. 4. 26.
[C++] 소멸자 함수 소멸자클래스 이름과 동일한 이름의 멤버함수로함수명 앞에 「~」 붙여 생성자함수 이름과 구별#include using namespace std;class A{ int no;public: A() {} ~A(); // 마무리 할 작업이 없으면 굳이 명시할 필요는 없음};A::~A(){ cout 특징• return type 명시할 수 없다. • 자동으로 호출되는 멤버함수로 인수 전달 받지 않는 형식 • 체가 메모리에서 제거되기 전 마지막으로 호출되는 함수로  주로 마무리 작업 용도 • delete 키워드 동일한 역할 • friend, static, const로 둘 수 없다.RAII(Resource Acquisition Is Initialization)Bjarne Stroustrup의 “자.. 2025. 4. 25.
[C/C++] 메모리 영역(스택, 힙, 데이터 영역) C++ 프로그램에서 메모리 사용 방식은 크게 4가지 존재한다.• 스택• 힙• 데이터• 코드스택(Stack) 영역• 함수 호출 시 생성되는 지역 변수와 매개 변수가 저장되는 영역• 함수 호출이 완료되면 사라짐void foo(){ int x = 10; // x는 스택에 저장됨}힙(Heap) 영역• 필요에 의해 동적으로 메모를 할당할 때 사용 • new, malloc 등을 통해 메모리 요청 • delete, free 메모리 해제int* ptr = new int; // 힙에 int 저장공간 할당*ptr = 20;delete ptr; // 메모리 해제데이터(Data) 영역• 전역 변수와 static 변수가 할당되는 영역 • 프로그램의 시작과 동시에 할당되고, 프로그램이 종료되어야 메모리에서 소멸int g.. 2025. 4. 20.
[C/C++] 정의된 매크로 (__FUNCTION__ __DATE__ 등) 정의된 매크로매크로 중에는 이미 약속되어 있는 매크로 존재컴파일러 종류와 버전에 따라 다를 수 있다. __FILE__ 전체 디렉터리 경로를 포함한 파일명 __FUNCTION__ 매크로명이 사용된 함수 이름 __LINE__ 매크로명이 사용된 행 번호 __DATE__ __TIME__ 컴파일 시작한 날짜와 시간 [예시 코드]#include void handleError(const char* errorMessage){ std::cerr 결과 예시이외의 다양한 매크로__GNUC__ (GNU 컴파일러 사용 여부 및 버전) __cplusplus (C++ 표준 버전)와 같이 다양한 매크로도 있으니 찾아보면 좋을 것 같다.#include int main(){#if __cplusplus >= 202002L st.. 2025. 4. 12.
반응형