분류 전체보기 (8) 썸네일형 리스트형 Qt를 활용한 네트워크 실전 프로그래밍 (1) 목적 Qt Framework에서 제공하는 QTcpSocket, QThread Class를 활용하고 Half-sync, half-async 동기화 패턴을 적용한 이더넷 네트워크 상에서의 동기식 쓰기, 비동기식 읽기 요청을 지원하는 TCP Client Application을 개발하는 절차와 방법을 설명한다. 개요 Qt는 네트워크 프로그래밍을 위한 풍부한 Socket API를 지원하고 단일 thread에서 signal/slot 방식으로 socket 이벤트를 처리할 수 있게 함으로써 보다 쉬운 네트워크 개발 환경을 제공한다고 한다. 실제로 Qt Creator에서 제공하는 샘플 코드를 통해 간단한 TCP/IP 프로토콜 기반의 server, client를 쉽게 만들어 볼 수 있다. 하지만 실제 업무에서 Qt를 활용.. QT Application 개발 환경에 Crypto++ 라이브러리 추가 방법 목적 Windows + MinGW 개발 환경에서 QT Framework을 사용한 보안 application 을 개발하는 과정에서 Crypto++ 라이브러리 추가에 성공한 방법을 공유하려고 한다. 개요 Crypto++ 라이브러리는 C++ 언어로 작성된 암호화 알고리즘을 제공하는 라이브러리로 난수 생성, Hash 함수, MAC 알고리즘, 공통키 암/복호화 알고리즘, 공개키 암/복호화 알고리즘, 키 생성 및 전자서명 알고리즘등 보안 어플리케이션 개발에 필요한 대부분의 API를 제공한다. QT는 desktop application 개발을 위한 framework 및 SDK를 제공하며 C++과 Python 언어를 지원한다. QT는 MSVC와 같이 Cross Platform 개발 환경을 지원하므로 동일한 C++ 소스.. 객체지향 C 프로그래밍 C 프로그램을 C++, C# 프로그램 처럼 하나의 소프트웨어 개발 프로젝트에서 차지하는 프로그램의 크기가 점점 증가하고 시장의 요구에 따른 소프트웨어 개발 기간은 점차 줄어듦에 따라 기존에 만든 소스 코드의 일부만 수정하여 다시 사용할 수 있는 이식성과 기존 코드에 새로운 기능을 쉽게 추가할 수 있는 확장성이 소프트웨어의 품질을 좌우하는 매우 중요한 요소가 되었다. 1. 절차 지향 -> 데이터 지향 소프트웨어 개발 초등학생 시절 (1990년대 초반) 방과 후 수업반으로 컴퓨터 반에서 프로그래밍을 배웠었는데, 선생님께서는 가끔 팩맨 같은 간단한 게임 프로그램 소스 코드를 출력해 오신 뒤에 학생들에게 직접 타이핑해서 실행해 보게 하셨던 기억이 난다 당시에는 빨리 타이핑해서 게임을 플레이하는게 목적이었기 때문.. AUTOSAR 플랫폼 기반 개발 방식 (이식성과 확장성 그리고 객체지향) 안녕하세요 최근 자율 주행 전기차가 미래 성장동력원으로 주목 받고 있습니다. 언론에 보도된 것처럼 고성능의 전기차 자율 주행 부품 개발을 위해 대기업간에 합작 회사를 만들기도 하고 기존 자동차 회사들은 경쟁력 있는 솔루션 회사를 인수 합병하여 경쟁력을 확보하려는 움직임이 두드러지고 있습니다. 이미 다른 회사에서는 고도화된 전기차 아키텍처를 구현하고 점차 가격 경쟁력을 높여가며 점차 성능이 뛰어난 자율 주행 전기차를 양산하고 있습니다. 자동차에 들어가는 전장 부품 네트워크 구조도 기능별로 별도의 ECU가 탑재되어 서로간의 통신을 통해 차량을 제어하는 방식에서 자율 주행, 주차를 포함한 큰 범주의 도메인별로 ECU가 통합된 도메인 아키텍처, 여기에 더해 차량을 소수의 구획으로 구분하여 하나의 ECU에서 해당.. [2] 계수기 (Counter) 1. 계수기(Counter)가 하나만 있을 경우 특정 Task가 일정한 실행 횟수에 도달했을 때 어떠한 함수를 호출하려는 경우 실행 횟수를 계산하기 위해 Task 내부에 실행 횟수를 카운트 하는 정적 변수를 정의하는 경우가 있다. 예를 들어 1ms 마다 호출되는 Task가 있는데 이 Task가 처음 호출된 시점부터 시작해서 10ms 시점에 Task의 동작 상태를 알려주는 경우, 이 Task는 호출될 때마다 호출 횟수를 저장하는 정적 변수를 1씩 증가시키면서 이 변수가 10에 도달했을 때 특정 함수를 호출한다. 다음의 예제는 이러한 경우를 설명하기 위해 만든 간단한 코드이다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 2.. [1] 다중화 (Multiplexer) 프로그램의 실행 흐름을 변경하는 방법으로는 if-else 문이나 switch-case 문과 같은 분기문을 사용하여 조건에 따라 다음에 실행될 구문을 선택하는 방법이 있고 C 언어에서는 함수 포인터를 사용하여 실행될 구문의 주소를 변경하는 방법이 있다. 두 가지 방법을 비교하여 서로간에 어떠한 차이가 있고 어떻게 활용할 수 있는지 확인해 보고자 한다. 1. 초기화 (Initialize) 초기화 과정과 같이 주기적으로 반복 실행되는 함수가 처음 호출되었을 때만 특정 코드를 실행시켜야 하는 경우 다음과 같이 코드를 작성하곤 한다. 여기서 task_main 함수는 주기적으로 반복 실행되는 함수이다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include voi.. 프로그램의 구성 프로그램은 크게 명령어 코드와 데이터로 나눌 수 있다. C 컴파일러를 기준으로 본다면 명령어 코드는 함수에 대응하며 데이터는 전역 변수와 정적 지역 변수에 해당한다. 또한 함수 안에 정의된 static 한정자가 붙지 않은 변수와 상수는 스택 변수로 명령어 코드에 포함된다. static 한정자가 붙을 경우 정적 변수로 데이터에 포함된다. 이것은 컴파일러 기준으로 프로그램을 보았을 때 명령어 코드와 데이터를 구분한 것이며 프로그래밍 언어를 작성하고 해석하는 프로그래머 기준으로 소스 코드를 바라본다면 특정한 숫자 값, 문자열 그리고 동작 상태를 나타내는 값들이 데이터에 해당하고 그 외의 텍스트들이 작업을 수행하는 명령어 코드에 해당할 것이다. 프로그래밍 언어를 사용하여 프로그램을 작성할 때 보통 코드와 데이터.. 임베디드 소프트웨어의 특징 만약에 아두이노(Arduino) 개발 환경을 사용하여 블루투스로 조종하는 무선 RC카를 만들어 본 경험이 있다면 이미 임베디드 소프트웨어 개발 경험을 해 본 것이나 다름이 없다. 임베디드 소프트웨어의 개발 환경은 윈도우즈나 리눅스가 탑재된 일반 PC에서 동작하는 소프트웨어의 개발 환경과는 다르다 1. CPU의 성능, 메모리의 크기가 상대적으로 제한되어 있다. 스마트폰, 자동차, TV, 로봇, 비행기, 가전 등에 탑재되는 임베디드 소프트웨어는 분야에 따라 차이가 있기는 하지만 PC에서 구동되는 소프트웨어보다 더 느린 속도의 명령어 처리 장치(CPU)가 탑재되며 더 작은 크기의 기억 장치(메모리)를 사용할 수 있다. 하지만 최근 스마트폰에 탑재되는 메모리 용량은 PC의 메모리 용량과 비슷한데 이는 스마트폰이.. 이전 1 다음