embedded 개발 블로그
1. 컴퓨터의 기본 구조와 기능

1. 컴퓨터의 특징 자동성, 신속성, 정확성, 대용량성, 범용성, 호환성, 신뢰성, 응용성 2. 컴퓨터의 세대별 구분 1세대 → 5세대 기억소자: 진공관(Tube) → 트랜지스터(Tr) → 집적회로(IC) → 고밀도집적회로(LSI) → 초고밀도집적회로(VLSI) 주기억장치: 자기드럼 → 자기코어 → 반도체기억소자 → LSI → VLSI 사용언어: 저급언어(기계어,어셈블리어) → 고급언어(ALGOL,..) → 고급언어(LISP,...) → 문제지향적 언어 → 인공지능, 객체지향어, 자연어 3. 기억용량단위 1Bit : 정보표현의 최소단위(0,1) 1Byte: 문자표현의 최소단위 KB(Kilo Byte): 2^10 byte MB(Mega Byte): 2^20 byte GB(Giga Byte): 2^30 by..

[IoT] 시리얼 통신의 종류 - UART, SPI, I2C
🖥️ Embedded 2023. 5. 16. 16:52

시리얼 통신은 하나 또는 두 개의 전송 라인을 사용하여 데이터를 송수신하는 통신 방법이다. ■ UART (Universal Asynchronous Receiver/Transmitter) - 정보 교환을 위해 송수신 2개의 데이터 핀 연결을 필요로 하며, 송수신은 동시에 진행될 수 있는 전이중 방식 - 동기화를 위해 별도의 클록을 전송하지 않으므로 통신 이전에 장비간 전송 속도를 동일하게 설정 - 한 번에 하나의 장치만 연결가능한 1:1 통신방식으로 MCU에 UART방식 장치를 2개 연결하려면 2개의 UART 포트가 필요 ■ SPI (Serial Peripheral Interface) - 짧은 거리에서 주변 장치와 고속으로 정보 교환을 위해 사용 - 3개의 데이터 핀 연결과 1개의 제어 핀 연결이 필요하며..

[Git] 협업 Ground Rule
🖧 Infra/Git 2023. 4. 11. 19:44

1. Commit Convention feat : 신규 기능 개발 관련 fix : 오류 수정 관련, 세미콜론 누락 chore : 설정 변경 or 환경 관련 수정 docs : 문서 작성 refactor : 코드 리팩토링, 코드 포맷팅 style : 스타일링 (css) test : 테스트 코드 관련 2. Git Cooperation issue 생성 feature/{name}으로 branch 생성 개발 완료 후 PR 날림 팀원 한 명이 code review 필수 approve 이후 합치기 merge : request 날린 사람이 하기 코드 올린 사람이 conflict 해결!! (+ 셀프 코드 리뷰 생략. 변수명을 셀프 코드 리뷰가 필요 없을 정도로 꼼꼼하게 작성하기!!) 3. Branch Name main d..

[C++] 캡슐화
🍒 Language/C++ 2023. 2. 7. 19:16

캡슐화의 의미 객체는 스스로 독립적이며 기초적인 부품처럼 사용할 수 있다. 캡슐화를 위해 추상화(속성과 동작 정의)와 정보 은폐(외부에서 사용하는 기능만 공개 / 멤버 변수는 숨기고 멤버 함수를 통해 멤버 변수에 접근)가 사용된다. 정보 은폐(몰라도 된다, 몰라야 한다)의 예시 자동차의 예시를 들 수 있다. 자동차를 타는 사람은 타는 방법만 알면 되고 자동차 부품의 내부 동작은 몰라도 된다. 불필요한 정보는 숨김으로써 사용자는 최소한의 정보만으로 부품을 쉽게 사용할 수 있다. 그리고 모터 제어 등 치명적인 부분은 부주의한 사용으로부터 스스로를 방어하기 위해 사용자가 몰라야 한다. 추가로, 몰라야 하는 또다른 이유로는 클래스의 안정적인 기능 개선이 있다. 클래스의 성능을 개선하기 위해 비공개 영역을 수정하..

[C] const, 레퍼런스, 인라인
🍒 Language/C 2023. 2. 7. 19:15

15-1장 1. const 장점 const는 변수를 통제해서 좋다. 변경되지 않아야 하는 변수라면 const를 사용하는 것을 습관화 하는 것이 유지보수 측면에서 좋다. 15-4장 2. 레퍼런스를 사용하는 이유 보기 편하다 16-3장 3. 인라인은 빠르다. 코드가 짧고 간결할 때 사용한다. 속도 문제를 해결한다. 때는 생성자와 파괴자를 일일이 호출한다. (for loop) 컴파일된 함수 코드가 프로그램의 코드 안에 직접 삽입된다. 실행 속도를 고려하여 사용한다. c언어에서 많이 쓴다. 재귀 호출 코드는 인라인 함수를 사용하지 못한다. 속도 측면에서 유리하고, 메모리 측면에서 불리하다. 4. 매크로를 사용하지 않는 이유 디버깅이 되지 않는다. 가장 치명적인 이유이다. ex) opencv dll debug 모..

[SoEn] 15-4장 레퍼런스

15-4.레퍼런스 15-4-가.변수의 별명 레퍼런스(Reference)는 C++에서 새로 추가된 기능이며 변수의 별명(alias)을 정의한다. 별명을 붙이게 되면 한 대상에 대해 두 개의 이름이 생기게 되고 본래 이름은 물론이고 별명으로도 변수를 사용할 수 있다. 레퍼런스를 선언하는 기본 형식은 다음과 같다. type &변수=초기값; 포인터 변수를 선언할 때 구두점 *를 사용하는데 비해 레퍼런스를 선언할 때는 구두점 &를 사용한다. 포인터가 기본 타입에 대한 유도형이듯이 레퍼런스도 유도형이라는 점에서 동일하되 특정 대상체에 대한 별명이므로 선언할 때 어떤 대상체에 대한 별명인지를 반드시 밝혀야 한다는 점이 다르다. 다음이 레퍼런스를 사용하는 가장 간단한 예제이다. 예제 : Ref1 #include "Tu..

article thumbnail
[SoEn] 18장 타입, 전처리기, #pragma

18-1.타입 컴퓨터의 메모리는 0과 1만을 기억할 수 있는 비트로 구성되어 있다. 이 절에서는 이 단순한 비트의 집합으로 큰 수와 복잡한 실수 등이 어떻게 기억되고 관리되는지에 대해 연구해 본다. 이 내용은 당장 실무에 도움을 줄 수 있는 실용적인 이론은 아니므로 꼭 몰라도 상관은 없다. 하지만 타입의 내부 구조를 이해함으로써 컴파일러의 동작을 좀 더 깊이있게 이해하고 메모리에 저장된 값을 직접 평가하고 다룰 수 있는 직관력을 키울 수 있다. 18-1-가.정수의 내부 컴퓨터가 정수를 다루는 방법은 비교적 간단하다. 1과 0을 기억할 수 있는 하나의 비트로 두 가지 상태를 표현할 수 있으며 이런 비트를 여러 개 모으면 1과 0의 조합으로 더 큰 이진수를 나타낼 수 있다. 먼저 부호가 없는 경우의 정수 구..

article thumbnail
[SoEn] 16-3장 인라인 함수

16-3.인라인 함수 인라인 함수, 디폴트 인수, 오버로딩은 C++에서 새로 추가된 기능들이다. 따라서 C 컴파일러에서는 컴파일되지 않는다. 16-3-가.인라인 함수 함수는 반복된 동작을 정의함으로써 프로그램의 기본 부품을 구성하는 단위가 된다. 입력과 출력, 내부 동작을 한 번만 잘 작성해 놓으면 필요할 때마다 불러서 똑같은(또는 비슷한) 작업을 여러 번 수행할 수 있다. 다음 예제는 인수로 전달된 n보다 작은 정수 난수를 하나 생성한 후 돌려 주는 randfunc라는 함수를 정의하고 main에서 이 함수를 세 번 호출한다. 예제 : randfunc #include "Turboc.h" int randfunc(int n) { return rand()%n; } void main() { int i,j,k; ..

[SoEn] 15-1장 const

15-1. const 15-1-가.상수의 정의 키워드 const는 값을 변경할 수 없는 상수를 정의한다. 기본 형식은 다음과 같다. const 타입 변수명=초기값; 변수를 선언하는 일반적인 문장과 비슷하되 앞에 const를 붙이고 뒤에 반드시 초기값을 적어야 한다는 점만 다르다. 다음 예제는 세 개의 상수를 정의하고 있다. 예제 : Const #include const int HourPerDay=24; const int MinPerHour=60; const int SecPerMin=60; void main() { printf("하루는 %d초입니다.\n",HourPerDay*MinPerHour*SecPerMin); } 하루는 24시간이고 한 시간은 60분, 1분은 60초로 정의했다. 24*60*60이라고 ..

[C++] 기본 생성자, 복사 생성자, 복사 대입 연산자
🍒 Language/C++ 2023. 1. 31. 17:54

개념 1. 기본 생성자(Default constructor) 프로그래머가 정의한 생성자가 없는, 자동적으로 컴파일러에 의해 생성되는 생성자를 가리킨다. C++의 경우에는 생성자가 자동으로 생성되었는지나 사용자가 정의했는지와 관련 없이, 인자를 제공하지 않은 생성자를 말한다. 2. 복사 생성자(copy constructor) 어떤 객체의 초기화를 위해 그와 같은 타입의 객체로부터 초기화할 때 호출되는 함수이다. 간단히 왜곡하자면 func A 에 func B 를 복사해주는 것이라고 할 수 있다. 3. 복사 대입 연산자(copy assignment operator) 같은 타입의 다른 객체에 어떤 객체의 값을 복사하는 용도로 쓰이는 함수이다. 간단히 왜곡하자면 func A 에 func B 를 대입해주는 것이라고..