본문 바로가기

잡동사니

(7)
CAN 통신의 이해 1.1 CAN이란? CAN(Controller Area Network)이란, 차량 내에서 호스트 컴퓨터 없이 마이크로 컨트롤러나 장치들이 서로 통신하기 위해 설계된 표준 통신 규격입니다. 차량 내 *ECU(Electronic control unit)들은 CAN 프로토콜을 사용하여 통신합니다. 초기에는 차량 네트워크용으로 개발되었으나 최근에는 차량뿐만 아니라 산업 전 분야에 폭넓게 적용되고 있으며, 기본적인 시스템 구성은 아래와 같습니다. 1.2 CAN 특징1.2.1 메시지 지향성 프로토콜(Message-Oriented Protocol) CAN은 노드의 주소에 의해 데이터가 교환되는 것이 아니라 메시지의 우선순위에 따라 ID(IDentifier)를 할당하고, 이 ID를 이용해 메시지를 구별하는 방식을 사용..
8비트 MCU 또는 32비트 MCU 선택 기준 매트 사운더(Matt Saunders) 실리콘랩스 마이크로컨트롤러 및 무선 사업부, 필드 마케팅 담당 이사 이 글은 8비트 MCU와 32비트 MCU를 선택하는 데 있어 버스 폭이 MCU의 선택 기준이 될 수 없는 이유에 대해 설명하고자 한다. 임베디드 개발자들은 마이크로컨트롤러에 대해 광범위한 선택을 할 수 있지만 버스 폭이 반드시 성능별로 단계적인 기준으로 적용되지 않기 때문이다. 반도체 제조업체가 32비트 아키텍처를 마이크로컨트롤러에 포팅하기 시작하면서 엔지니어링 커뮤니티에서는 8비트 디바이스가 사라질 것이라는 예측도 있었다. 사실, 8비트 디바이스가 적용된 기기의 사용은 감소해 왔으며 더 이상 시장을 주도하는 위치도 아니다. ▲ MCU 그러나 8비트가 사라지기에는 아직도 먼 이야기다. 실제 32비트..
구조체와 const에 관하여 25 typedef struct Hello Hello; 26 27 /*## class Hello */ 26 29 struct Hello { 30RIC_EMPTY_STRUCT 31}; 32 33 34/* User explicit entries */ /* Operations */ 38 39 /* # operation print () */ 40 void Hello print (Hello* const me); 41 42/* User implicit entries */ 43 *** 44 45 /* Constructors and destructors:*/ 46 47 48 /*## auto generated */ 49 void Hello Init (Hello* const me); 50 51 /*## auto gene..
정수를 문자열로 변환하기 이번에는 정수를 문자열 형태로 변환하는 방법입니다. sprintf 함수를 사용하면 정수를 문자열로 변환할 수 있습니다(stdio.h 헤더 파일에 선언되어 있습니다). sprintf(문자열, "%d", 정수); sprintf(문자열, "%x", 정수); sprintf(문자열, "%X", 정수); 다음 내용을 소스 코드 편집 창에 입력한 뒤 실행해보세요. #define _CRT_SECURE_NO_WARNINGS // sprintf 보안 경고로 인한 컴파일 에러 방지 #include // sprintf 함수가 선언된 헤더 파일 int main() { char s1[10]; // 변환한 문자열을 저장할 배열 int num1 = 283; // 283은 정수 sprintf(s1, "%d", num1); // %d를..
#ifndef ~ #endif 구조체 중복 정의로 인해 발생하는 오류 ☞ 일단 main.c에서 point.h를 포함한다. 그리고 pointOperation.h를 포함하는데, pointOperation.h가 point.h를 포함하므로 결과적으로 main.c는 point.h를 두 번 포함하는 셈이 된다. 전처리기는 이를 문제삼지 않는다. 전처리기는 #include 문의 명령대로 main.c에 구조체 point의 정의를 두 번 포함시킬 뿐이다. 문제는 컴파일러가 일으킨다. 컴파일러는 point 구조체의 정의가 두 번 등장했음 을 인식하고 에러메시지를 발생시킨다. ♠ 중복 정의를 피하기 위한 매크로 #ifndef ~ #endif ☞ ifndef는 "If not defined"의 약자로서 "~을 정의(define)하지 않았다면" 이라는 뜻이다..
메모리 영역(code, data, stack, heap) 프로그램은 크게 instruction(명령)과 data로 구분되며, 일반적으로 4가지, 좀더 세분화 하면 5가지 정도 구분 할 수 있다. --> 아래 그림 참조. 1) code 영역 - 코드 자체를 구성하는 메모리 영역으로 Hex파일이나 BIN파일 메모리다. - 프로그램 명령이 위치하는 곳으로 기계어로 제어되는 메모리 영역이다. 2) data 영역 - 전역변수(global), 정적변수(static), 배열(array), 구조체(structure) 등이 저장된다. 가) 초기화 된 데이터는 data 영역에 저장되고, 나) 초기화 되지 않은 데이터는 BSS (Block Stated Symbol) 영역에 저장된다. - 프로그램이 실행 될 때 생성되고 프로그램이 종료 되면 시스템에 반환 된다. - 함수 내부에 선..
MY PC에서 ROS MASTER를 통해 ethernet 연결된 Device로 접근하는 법 https://answers.ros.org/question/256070/problems-with-communication-between-multiple-machines/