[C/C++ Tip] 8. 배열과 포인터
·
🔷 C언어 30강
C언어에서 포인터는 변수의 메모리 주소를 저장하는 변수이다. 배열과 포인터는 밀접하게 관련되어 있으며, 이 둘을 연결지어 이해하면 C언어의 메모리 관리에 대한 깊은 이해를 얻을 수 있다. 이번에는 배열과 포인터의 관계에 대해 설명한다.⭐1. 배열과 포인터의 관계​​C언어에서 배열 이름은 배열의 첫 번째 요소를 가리키는 포인터로 사용될 수 있다. 예를 들어, int numbers[5]; 배열이 있다면, numbers는 &numbers[0]와 같은 주소를 가지고 있다. 이것은 배열의 이름이 첫 번째 요소의 주소를 가리키는 포인터로 동작한다는 것을 의미한다.int numbers[5] = {10, 20, 30, 40, 50};int *p = numbers; // 또는 &numbers[0]printf("%d\n"..
[STM32] 3. 내장 LED 제어
·
🧊 STM32
STM32 마이크로컨트롤러를 사용하여 내장된 LED를 제어하는 프로젝트를 구성하는 방법에 대해 설명한다. 이 예제에서는 STM32F103C8T 보드를 사용하고, STM32CubeIDE 환경에서 작업한다고 가정한다. 이 보드에는 일반적으로 PC13 핀에 연결된 내장 LED가 있다.📌 1. 개발 환경 설정먼저 STM32CubeIDE를 설치하고 새 프로젝트를 시작해야 한다. STM32CubeIDE는 STM의 공식 개발 환경으로, 코드 작성, 컴파일, 디버그를 지원한다.STM32CubeIDE 설치: STMicroelectronics 웹사이트에서 다운로드 후 설치한다.새 프로젝트 생성:'File' 메뉴에서 'New' > 'STM32 Project'를 선택한다.사용할 보드나 MCU를 검색하여 선택하고 프로젝트 설..
[C/C++ Tip] 7. 배열의 기초
·
🔷 C언어 30강
C언어에서 배열은 같은 자료형의 변수들을 하나의 이름으로 묶어서 관리하는 자료 구조이다. 배열을 사용함으로써 변수들을 효율적으로 관리할 수 있으며, 인덱스를 통해 각 요소에 접근할 수 있다. 이 글에서는 C언어의 배열 기초, 배열의 선언과 초기화, 그리고 배열을 사용하는 몇 가지 예시를 다룬다.⭐1. 배열의 기본 사용법C언어에서 배열은 다음과 같이 선언한다.자료형 배열이름[배열의 크기];예를 들어, int 자료형으로 10개의 정수를 저장할 수 있는 배열을 선언하려면 다음과 같이 작성한다.int numbers[10];⭐2. 배열의 초기화배열은 선언과 동시에 초기화할 수 있다. 초기화는 배열을 선언하면서 동시에 특정 값으로 각 요소를 설정하는 것을 의미한다. 하지만 특정 값으로 초기화하지 않을 경우, 컴파일..
[C/C++ Tip] 6. UNION 공용체와 STRUCT 구조체로 패킷 만들기
·
🔷 C언어 30강
Union 은 C 언어에서 서로 다른 데이터 타입을 하나의 메모리 공간에서 저장할 수 있게 하는 키워드이다. 이는 구조체(struct)와 비슷하지만, Union  내의 모든 멤버가 같은 메모리 주소를 공유한다는 점에서 차이가 있다. 결과적으로, 한 시점에 하나의 멤버만 저장하고 사용할 수 있으며, 가장 큰 크기의 멤버에 의해 union의 전체 크기가 결정된다. 이를 통해 메모리를 효율적으로 사용할 수 있지만, 멤버 간에 값의 오버라이트가 발생할 수 있다는 점을 유의해야 한다.⭐1. Union 사용법#include union Data { int i; float f; char str[20];};int main() { union Data data; data.i = 10; pri..
[C/C++ Tip] 5. 구조체 패딩의 필요성
·
🔷 C언어 30강
구조체 패딩은 컴퓨터 메모리에서 데이터를 효율적으로 접근하기 위해 사용되는 개념이다. 컴퓨터 아키텍처 대부분은 특정 데이터 타입을 메모리의 정렬된 주소에서 읽고 쓰는 것을 선호한다. 예를 들어, 많은 시스템에서는 4바이트 정수(int)를 4바이트 경계에서 시작하는 메모리 주소에서 접근하는 것이 더 빠르다. 이러한 정렬 요구 사항을 충족시키기 위해 컴파일러는 구조체 내의 필드 사이에 "패딩" 바이트를 추가하여 메모리 접근 속도를 최적화한다.⭐1. 구조체 패딩의 필요성1.1.메모리 접근 속도 최적화: 데이터를 그들의 자연 정렬 경계에 맞춰 저장함으로써, CPU는 메모리에서 데이터를 더 빠르게 읽고 쓸 수 있다.1.2.플랫폼 호환성: 다양한 플랫폼과 아키텍처에서 코드의 동작을 일관되게 유지한다.⭐2. 패딩이 ..
[STM32] 2. STM32 LINK 업데이트
·
🧊 STM32
ATMega는 이제는 놓아주고 STM32로 넘어가는 첫 단계이다. STM32는 STMicroelectronics에서 제작한 마이크로컨트롤러 제품군으로, 주로 32비트 ARM Cortex-M 프로세서를 기반으로 한다. 이 칩들은 고성능, 저전력 소비, 그리고 비용 효율성을 제공하며, 다양한 산업 응용 분야에서 폭넓게 사용된다. STM 칩에 내가 설계한 헥사 파일을 넣을려면 이 STM32 Link가 필요하다. 1. ST-LINK/V2/01-0제품군은 ST-LINK/V2/01-0이다.COM 쪽에 LED가 불이 들어오는 것을 확인할 수 있다. STM32 뿐만 아니라 STM8(bit)도 가능하다.우선, STM32 LINK를 사면 필수적으로 펌웨어 업그레이드를 진행해야 한다.2. STM32 LINK 업그레이드 & ..
[C/C++ Tip] 4. 구조체 활용: 효율적인 데이터 관리
·
🔷 C언어 30강
C언어의 구조체(struct)는 서로 다른 자료형을 하나로 묶어 새로운 형태의 복합 데이터 타입을 정의할 수 있게 해준다. 이는 데이터를 효율적으로 관리하고, 코드의 가독성과 유지 보수성을 향상시킬 수 있는 강력한 도구이다. 이번 포스팅에서는 구조체를 통해 더 깔끔하고 효율적인 코드를 작성하는 몇 가지 팁과 예제를 제공한다.전통적인 프로그래밍 언어에서는 변수를 사용하여 데이터를 저장했다. 그러나 변수만으로는 서로 관련된 여러 데이터 항목을 효율적으로 관리하기 어려웠다. 예를 들어, 학생의 정보(이름, 나이, 성적 등)를 처리하려면 각 항목을 별도의 변수로 관리해야 했고, 이러한 변수들 사이의 논리적 연관성을 코드상에서 명확히 표현하기 어려웠다. 구조체는 이러한 문제를 해결하기 위해 도입되었다. 구조체를 ..
[C/C++ Tip] 3. 코딩 규칙. 변수명 정하기
·
🔷 C언어 30강
C/C++ Tip 관련 세번 째 글이다. 뭘 작성할까 고민 하다가 코딩만큼 중요한 변수명 정하는 것으로 결정했다.변수명 정하기가 중요한 이유는 가독성 때문이다. 가독성이 높은 코드는 내가 아닌 남에게 보여주기 위함이다. 여기서 남이란 후배, 상사 뿐만 아니라 한달 뒤의 '나'도 남에 포함된다. 코드를 봤을 때 결과가 독서하는 것처럼 바로 유추가 되어야 한다.변수명 규칙은 네 개를 꼭 기억하면 된다. 함수의 input parameter(입력 인자, 입력 파라미터)는 i_{변수명} 함수의 output parameter(출력 인자, 출력 파라미터)는 o_{변수명} 함수의 local 변수(로컬, 지역 변수)는 l_{변수명} static 변수(정적 변수) 혹은 전역변수는 {변수명} 하나의 예시를 보겠다.#incl..
[STM32] 1. Cube IDE 시작하기.
·
🧊 STM32
STM32 CUBE IDE로 STM32 마이크로컨트롤러 개발을 시작하는 것은 여러 면에서 유리한다.통합 개발 환경 (IDE): STM32CubeIDE는 코드 편집, 컴파일, 플래싱, 디버깅을 모두 한 곳에서 처리할 수 있는 통합 개발 환경을 제공한다. 이는 개발 과정을 간소화하고 프로젝트 관리를 더 효율적으로 만들어 준다.코드 생성 도구: STM32CubeMX는 초기 프로젝트 설정을 자동화하는 코드 생성 도구로, 핀 설정, 클럭 구성, 미들웨어 선택 등을 시각적 인터페이스를 통해 쉽게 설정할 수 있다. 이 도구는 개발 시간을 단축시키고, 초기 설정 오류를 줄여준다.풍부한 라이브러리 및 예제: STM32CubeIDE는 STM32Cube 라이브러리를 사용하여 HAL(Hardware Abstraction La..
[C/C++ Tip] 2. #define의 목적
·
🔷 C언어 30강
#define은 왜 사용하는 걸까? 단순히 상수 처리하기 위해 define을 사용하는 것일까? 이를 알기 위해선 소스 코드의 변환 과정을 알 필요가 있다. ​ Build의 순서는 아래와 같다. exe 파일 생성 : 소스코드 -> 전처리 -> 컴파일 -> 링크 -> 실행 mcu 헥사 파일 생성 : 소스코드 -> 전처리 -> 컴파일 -> 어셈블리어 변환 -> 헥사 파일 생성 -> MCU 다운로드 ​ C언어를 처음 공부할 때, #define을 사용하지 않으면 전처리 과정을 거치지 않는다고 생각한 적이 있다. #으로 시작하는 문장은 전부 전처리기 지시자임에도 #include는 전처리기라고 생각하지 않았다. 항상 C언어를 실습할 때, 의무적으로 #inlcude 를 작성한 폐해이다. ​ 전처리란 무엇인가? 컴파일 ..
18진수
'분류 전체보기' 카테고리의 글 목록 (6 Page)