전체 글311 실무에서 꼭 알아야 할 네이밍 규칙 완벽 가이드 개발을 하다 보면 "이 변수 이름을 뭐라고 지을까?"라는 고민을 자주 하게 됩니다. 좋은 코드의 첫 걸음은 바로 일관된 네이밍 규칙에서 시작됩니다. 오늘은 실무에서 반드시 알아야 할 네이밍 규칙들을 정리해보겠습니다.왜 네이밍 규칙이 중요할까?네이밍 규칙은 단순히 코딩 스타일의 문제가 아닙니다. 다음과 같은 이유로 매우 중요합니다:가독성 향상: 일관된 규칙으로 코드를 더 쉽게 읽을 수 있습니다팀 협업: 모든 개발자가 같은 규칙을 사용하면 의사소통이 원활해집니다유지보수성: 나중에 코드를 수정할 때 의도를 파악하기 쉽습니다전문성: 업계 표준을 따르는 것은 개발자의 기본 소양입니다1단계: 기본 네이밍 케이스 이해하기먼저 주요 네이밍 케이스들을 정의해보겠습니다:PascalCase (파스칼 케이스)정의: 모든 단어.. 임베디드 관련 카테고리/C++ 2025. 8. 7. C++ constexpr과 전역변수: 컴파일 시점 상수와 링크 에러 해결법 1. constexpr의 기본 개념C++에서 constexpr은 컴파일 시점에서 값이 결정되는 상수 표현식을 의미하는 키워드입니다. 이 키워드는 변수와 함수 모두에 사용할 수 있으며, 컴파일러가 컴파일 단계에서 가장 먼저 처리합니다.constexpr int MAX_SIZE = 100; // 변수에 사용constexpr int square(int x) { // 함수에 사용 return x * x;}2. constexpr vs const static: 정의 시점의 차이constexpr과 const static의 주요 차이점은 언제 값이 정의되는가에 있습니다. 2-1. constexpr의 특징컴파일 시점에서 값이 결정됨컴파일러가 값을 미리 계산하여 상수로 치환런타임 오버헤드가 없음2-2. const .. 임베디드 관련 카테고리/C++ 2025. 8. 6. ARM64 CPU 구성요소별 하드웨어 구현 방식 ― 파이프라인과 캐시, 연산 유닛의 실제 설계 접근서론ARM 아키텍처는 단순히 명령어 집합(RISC)에 그치지 않고, 각 구성요소를 전력 효율성과 고성능의 균형을 고려하여 설계합니다. 이 글에서는 ARM64 CPU의 주요 구성요소들이 실제 실리콘에서 어떻게 구현되는지, 어떤 방식으로 동작하고 상호작용하는지를 설명합니다.1. Instruction Fetch Unit (명령어 패치 유닛)기능다음에 실행할 명령어를 프로그램 카운터(PC)에 따라 메모리에서 가져옵니다.하드웨어 구성PC 레지스터: 현재 명령어의 주소 보관.Branch Predictor: 분기 명령어를 미리 예측하여 성능 저하를 줄임.Pre-fetch Queue: 여러 명령어를 미리 가져와 파이프라인에 밀어 넣음.ITCM (Instruction T.. 임베디드 관련 카테고리/Embedded System 2025. 7. 30. ARM64 CPU는 왜 저전력인가? 서론: x86과 ARM, 무엇이 다른가최근 모바일 디바이스, 임베디드 시스템, 그리고 서버 영역에 이르기까지 ARM64(또는 AArch64) CPU의 채택이 빠르게 확산되고 있다. 특히 NVIDIA Jetson TX2, Android 스마트폰, Apple의 M1 시리즈, AWS Graviton 서버에 이르기까지 ARM 기반 CPU가 폭넓게 활용되는 이유는 무엇일까?그 중심에는 바로 저전력(high-efficiency) 설계라는 강력한 하드웨어적 특성이 있다. 본 글에서는 ARM64 CPU의 구조와 설계 방식을 분석하고, 전통적인 x86/x64 아키텍처와 어떤 점이 다르며, 왜 전력 효율에서 우위에 있는지를 구체적으로 설명한다.1. ARM64와 x86/x64의 아키텍처 차이1.1 CISC vs RISC C.. 임베디드 관련 카테고리/Embedded System 2025. 7. 29. 오디오 통신의 기본 용어 정리 및 패킷 크기 계산 오디오 스트리밍 시스템을 설계하거나 구현할 때, 데이터 흐름을 구성하는 핵심 단위들을 정확히 이해하는 것이 중요합니다. 이 글에서는 오디오 통신에서 자주 등장하는 핵심 용어들 ― 샘플(Sample), 프레임(Frame), 버퍼(Buffer), 패킷(Packet) ― 을 정리하고, 실질적인 패킷 크기 계산 방법까지 예시와 함께 설명합니다.1. 오디오 데이터의 기본 단위샘플(Sample)오디오 신호를 디지털로 표현한 하나의 데이터 단위를 샘플이라고 합니다. 일반적으로 int16_t 또는 float 형태로 표현되며, 하나의 채널에서 특정 시점의 음압 레벨을 나타냅니다.예를 들어, 16비트 오디오에서는 1 샘플이 2 바이트(16비트) 크기를 가집니다.프레임(Frame)프레임은 모든 채널의 샘플을 모은 단위입니다.. 임베디드 관련 카테고리/Streaming 2025. 7. 28. C++ 정적 라이브러리 vs 동적 라이브러리 비교 프로젝트 프로젝트 배경임베디드 개발에서의 라이브러리 의존성 문제NVIDIA Jetson 시리즈(TX2, ORIN 등)에서 임베디드 개발을 진행하다 보면 다음과 같은 상황을 자주 경험하게 됩니다:문제 상황:TX2 보드에서 개발하고 빌드한 프로젝트가 정상 작동동일한 코드를 ORIN 보드로 업그레이드하여 새로 빌드빌드는 성공하지만 실행 시 다양한 오류 발생일반적인 오류 사례:# 라이브러리 버전 불일치./my_app: /usr/lib/aarch64-linux-gnu/libopencv_core.so.4.2: version `OPENCV_4.5' not found# 라이브러리 경로 문제./my_app: error while loading shared libraries: libcudnn.so.8: cannot open sha.. 임베디드 관련 카테고리/C++ 2025. 7. 8. Bazel과 nlohmann/json을 활용한 멀티스레드 안전 싱글턴 패턴 구현 이번 포스트에서는 Bazel 빌드 시스템을 사용하여 외부 라이브러리(nlohmann/json)를 다운로드하고, 멀티스레드 환경에서 안전하게 작동하는 싱글턴 패턴을 구현하는 방법을 소개합니다.프로젝트 개요이 프로젝트의 핵심 목표는 다음과 같습니다:외부 라이브러리 관리: nlohmann/json 라이브러리를 온라인에서 다운로드하여 정적 라이브러리로 링크설정 파일 관리: JSON 설정 파일을 바이너리와 함께 배포하고 런타임에 읽기멀티스레드 안전성: 싱글턴 패턴으로 구현된 설정 클래스를 여러 스레드에서 안전하게 사용프로젝트 구조├── MODULE.bazel├── repositories.bzl├── BUILD├── config.json├── third_party/│ ├── BUILD│ └── nlohman.. 임베디드 관련 카테고리/C++ 2025. 7. 7. Bazel을 활용한 정적 라이브러리 빌드 실전 가이드 이전 포스트에서 라이브러리 의존성 문제와 해결 방법에 대해 다뤘습니다. 이번에는 Google의 Bazel 빌드 도구를 활용하여 동적 라이브러리 중 필요한 부분만 정적 라이브러리로 변환하는 구체적인 방법을 살펴보겠습니다.Bazel이란?Bazel은 Google에서 개발한 빌드 도구로, 대규모 프로젝트에서 빠르고 안정적인 빌드를 제공합니다. 특히 다음과 같은 장점이 있습니다:증분 빌드: 변경된 부분만 다시 빌드병렬 빌드: 멀티코어 환경에서 효율적인 빌드재현 가능한 빌드: 동일한 입력에 대해 항상 동일한 출력크로스 플랫폼 지원: Linux, macOS, Windows 지원Bazel의 핵심 장점: 온라인 의존성 관리Bazel의 가장 큰 장점 중 하나는 온라인에서 특정 라이브러리 버전을 자동으로 다운로드하여 정적 .. 임베디드 관련 카테고리/C++ 2025. 7. 7. C++ 프로젝트에서 라이브러리 의존성 문제 해결하기 C++ 프로젝트를 진행하면서 가장 골치 아픈 문제 중 하나는 바로 라이브러리 의존성 문제입니다. 내 개발 환경에서는 완벽하게 작동하던 코드가 다른 환경에서는 빌드조차 되지 않는 경험, 한 번쯤은 겪어보셨을 것입니다. 이번 포스트에서는 이러한 문제의 원인과 해결 방법을 정리해보겠습니다. 정적 라이브러리 vs 동적 라이브러리정적 라이브러리 (Static Library)정적 라이브러리는 여러 오브젝트 파일(.o)들을 하나의 아카이브 파일(.a)로 묶어놓은 것입니다. 컴파일 시점에 실행 파일에 포함되어 배포되므로, 실행 시 별도의 라이브러리 파일이 필요하지 않습니다.동적 라이브러리 (Dynamic Library)동적 라이브러리는 실행 시점에 외부에서 불러와 사용하는 라이브러리입니다. Linux에서는 .so(S.. 임베디드 관련 카테고리/C++ 2025. 7. 7. CMake와 Meson에서 만든 정적 라이브러리 .a 파일, 호환이 될까? C++ 프로젝트를 빌드할 때 자주 사용되는 빌드 시스템인 CMake와 Meson, Bazel.이 두 빌드 시스템은 내부 구조가 다르지만, 둘 다 .cpp 파일을 컴파일해 .o를 만들고, .o를 모아서 .a라는 정적 라이브러리를 생성한다는 점은 같습니다.그렇다면,CMake로 만든 .a 정적 라이브러리 파일을 Meson 프로젝트에서 사용할 수 있을까요?혹은 그 반대는 가능할까요?결론부터 말씀드리면, 가능합니다. 하지만 몇 가지 조건을 만족해야 해요.정적 라이브러리 .a의 정체정적 라이브러리(.a)는 여러 개의 오브젝트 파일(.o)을 묶은 압축 파일로, 실행파일을 만들 때 링커가 참조하는 대상입니다.📦 예시:ar rcs libmylib.a file1.o file2.o이 파일은 libmylib.a라는 이름의 .. 임베디드 관련 카테고리/C++ 2025. 4. 11. C++ 빌드 개념과 오브젝트 파일(.o), 정적 라이브러리(.a), 링커 이해하기 C++ 개발을 시작하면 반드시 마주치는 개념 중 하나가 바로 오브젝트 파일(.o), 정적 라이브러리(.a), 그리고 **링커(Linker)**입니다.특히 CMake나 Meson처럼 빌드 시스템을 사용하여 다양한 디렉터리로 나뉘어진 프로젝트를 빌드할 때, 이 구조에 대한 이해는 필수예요.이 글에서는 빌드 과정을 쉽게 설명하고, 실무에서 자주 겪는 정적 라이브러리 연동과 링커의 역할까지 함께 정리해보겠습니다.🛠️ C++ 빌드 과정, 단계별로 이해하기C++ 프로그램은 아래와 같은 과정을 거쳐서 실행파일이 됩니다.1. 전처리 (Preprocessing)#include, #define, #ifdef 같은 전처리 지시문을 처리하는 단계입니다..cpp 파일에서 헤더 파일들을 실제 코드로 치환해 .i 파일을 만들어냅.. 임베디드 관련 카테고리/C++ 2025. 4. 11. JAX에 대해 알아보자 GPU 가속 + 자동 미분의 끝판왕, 그리고 NumPy와의 완벽한 호환성 🧠 JAX란?JAX는 NumPy와 같은 API를 제공하면서 GPU 가속과 자동 미분 기능까지 지원하는 차세대 수학 라이브러리입니다.요약하자면,NumPy + Autograd + XLA = JAX🧩 JAX의 주요 기능기능설명jnp (JAX NumPy)NumPy와 거의 동일한 문법으로 GPU 연산 가능grad()함수의 도함수를 자동으로 구함 (Autograd)jit()연산을 Just-In-Time 컴파일하여 속도 향상vmap()벡터화 자동 처리 (for문 없이도 여러 입력 처리)GPU/TPU 가속코드 수정 없이 자동으로 GPU에서 연산 실행⚙️ 설치 방법기본 설치 (CPU만):pip install jax jaxlibGPU 사용 환경 .. 임베디드 관련 카테고리/Embedded System 2025. 4. 8. 이전 1 2 3 4 ··· 26 다음 728x90 반응형