[C] C언어의 extern 키워드
·
소프트웨어/C
extern 키워드는 분할 컴파일 시 외부 소스코드에서 정의한 변수를 현재 소스코드에서도 사용할 수 있도록 해주는 키워드이다.프로젝트에서 전역적으로 참조되는 구조체나, 변수, 함수를 여러 소스코드에서 공유할 때 주로 사용한다. 재미있었던 점은, A.c에서 extern으로 외부 변수를 참조할 경우 해당 변수는 A.c에서만 사용할 수 있지만, A.c가 #include하는 헤더파일에서 extern으로 변수를 가져오면, 그 헤더파일을 포함하는 모든 소스파일에서 해당 변수에 접근할 수 있다는 점이었다. 이는 C 언어의 컴파일 과정과 관련이 있다. 전처리 단계에서 #include된 헤더파일의 내용은 해당 소스파일에 그대로 복사되기 때문에, extern 선언이 포함된 헤더파일을 참조한 모든 소스파일에서 동일한 외부..
[C] C의 파일시스템, fopen_s()
·
소프트웨어/C
C에서 파일의 데이터를 읽거나 쓸 경우 파일 입출력 함수인 fopen_s()를 사용하게 된다. fopen_s의 구문은 다음과 같다.errno_t fopen_s( FILE** pFile, const char *filename, const char *mode);매개변수pFile : 열린 파일에 대한 포인터를 받는 파일 포인터에 대한 포인터이다.filename : 열어야 할 파일의 이름이다.mode : 허용되는 엑세스 형식이다.반환 값성공 시 0이고, 실패 시 오류 코드를 반환한다. 예시 코드// crt_fopen_s.c// This program opens two files. It uses// fclose to close the first file and// _fcloseall to close a..
CAN 통신 이란? (1)
·
Embedded Systems/MCU 기본
목차CAN(Controller Area Network) 버스 개요CAN 버스 특성제어기(Controller)와 송수신기(Transceiver) Controller Area Network(CAN)CAN의 종류1983년에 Benz사의 의뢰로 Bosch에서 개발한 차량 내 장치를 연결하기 위한 직렬 유선통신 네트워크.1991년 CAN 2.0이 발표(ISO 표준 1994년)2012년 CAN-FD 발표(ISO 표준 2015년)2021년 CAN-XL 발표(ISO 표준 2024년)CAN은 ISO에서 표준화된 Serial 통신규격이다(ISO 11898-1, 2, 3)CAN은 차량 내 다양한 장치들을 모두 함께 연결하는 버스 구조이다. CAN의 특징직렬 버스한 번에 1 bit씩 직렬 전송 비차폐 2선 차동 꼬임선(Uns..
현대 NGV "Future Mobility Tech Insight" 정리
·
엔지니어링 뉴스
현대 NGV의 "Future Mobility Tech Insight" 강연을 듣고 정리한 내용입니다. 미래 모빌리티란?미래 모빌리티는 SW로 HW를 제어하고 관리하는 자동차를 의미한다.기존의 ‘달리는 자동차’를 넘어, 다양한 기능과 서비스를 구현하는 플랫폼으로 진화 중이다.왜 SW가 중요한가?SW와 HW가 분리된 구조를 통해 차량의 기능 확장과 업데이트 가능!SW는 단순 보조 도구가 아니라 차량 가치를 결정하는 핵심 요소가 되고있다기능 구독 모델 등 새로운 수익 구조 형성가능시장과 산업 구조 변화2022년: 35.6억 달러 → 2033년: 210억 달러 예상연평균 20% 이상 성장자동차 산업의 중심이 기계에서 SW로 전환중다양한 글로벌 기업(Bosch, Harman 등 부품 기업 및 OEM 기업들)이 진..
[C] C언어의 조건부 컴파일 지시자(#if #ifdef #ifndef #endif)
·
소프트웨어/C
C는 값 또는 식을 기준으로 조건부 컴파일을 수행할 수 있다. #define #define은 을 로 치환해준다.#include #define PI 3.141592int mian(void){ print("%d\n", PI); return 0;}#if 이 참이면, #if와 #endif 사이의 코드를 컴파일한다. 이는 보통 중복 컴파일을 방지하기 위해 사용된다.#if 값 or 식코드#endif #if, #endif 는 전처리기 과정을 거치면 조건이 참인 코드만 남는다.#include #define PI 3.14int main(void){#if PI == 3.14 printf("PI는 3.14");#elif PI > 3.14 printf("PI값이 좀 이상한데?");#endif prinf("PI값..
[C] volatile 키워드
·
소프트웨어/C
volatile 키워드는, 컴파일 시간에 해당 변수를 최적화에서 제외시켜 오류를 방지하는 역할을 한다. volatile에 대한 좋은 정리1. https://m.blog.naver.com/eslectures/80143556699 2. https://blog.naver.com/guile21c/50550159
Timer를 이용한 입출력 제어
·
Embedded Systems
서론STM32를 활용한 임베디드 프로젝트를 진행하며, ST사의 HAL 라이브러리에 익숙하지 않아 프로그래밍 과정에 많은 어려움을 겪는 문제가 생겼다. 따라서, 책 "STM32F 시리즈를 이용한 ARM Cortex-M3/M4 구조와 응용"의 Timer 내용을 공부해 HAL 라이브러리를 활용한 Timer 기능 활용에 익숙해지고자 한다. 1. 범용(General-purpose) 타이머의 구조 및 기능STM32F103RB 보드의 Spec을 기준으로 합니다.1.1 STM32F 타이머 종류General-purpose TimerAdvanced TimerBasic TimerChannel Timer1.2 General-purpose Timer의 구조Prescaler (PSC) : 16비트의 프리스케일러는 공급되는 클럭(..
USB 통신
·
Embedded Systems
서론UART 통신을 공부하면서, USB통신 또한 개념을 잡고자 한다. 책 "STM32F 시리즈를 이용한 ARM Cortex-M3/M4 구조와 응용"을 참고하였다.본론1. USB 통신의 개요1.1 USB의 개요1.1.1 USB(Universal Serial Bus)의 탄생1990년대 이후 PC의 성능이 향상되고 용도가 확장되면서 통신을 해야 할 주변 장치의 종류와 숫자가 급속하게 늘어났다. 이러한 배경에서 기존 사용되던 프린터포트와 RS-232C 직렬포트는 통ㅅ니 속도가 느리고 확장 능력이 제한된다는 한계에 부딛혔다.이러한 단점을 극복하기 위해 1994년 7개의 회사가 주축이 되어 PC와 주변 장치와의 새로운 직렬 통신 방식을 개발하기 시작하였고, 그 결과 탄생한 것이 USB이다. USB는 하나의 host..
UART 통신
·
Embedded Systems
서론임베디드 관련 프로젝트를 하면서 UART 통신을 사용하게 되었는데, 까먹은 개념적 부분이 많아 이를 복습하였다. 책 "STM32F 시리즈를 이용한 ARM Cortex-M3/M4 구조와 응용"을 참고하였다. 본론1. 직렬통신 및 UART1.1 직렬 통신(Serial communication)1.1.1 직렬(Serial) 통신과 병렬(Parallel) 통신컴퓨터와 마이크로프로세서, 그리고 IC 칩들 사이에 데이터를 서로 주고 받는 것을 데이터 통신이라고 한다. 이런 데이터 통신 방식은 여러 가지가 있을 수 있으나, 통신에 사용되는 channel 수를 기준으로 구분하면 직렬 통신과 병렬 통신으로 구분할 수 있다.직렬 통신은 클럭당 1비트의 데이터를 전송하고, 병렬 통신은 클럭당 여러 비트를 전송하는 방식이..
STM32F103RB 보드와 초음파 센서(HC-SR04)를 이용한 거리 측정기 개발 [코드 포함]
·
Projects/Cortex-M3
서론C언어를 활용해 MCU와 센서를 직접 제어하는 Application을 개발해보고자, ST사의 'STM32F103RB'(Nucleo F103RB) 보드와, 초음파 센서인 'HC-SR04'를 활용하여, 초음파로 최대 4m의 거리를 측정하는 시스템을 개발해 보았습니다.개발을 위한 IDE로는 ST사의 'CubeMX'와 ARM사의 'Keil MDK'를 사용하였고, 개발 언어로는 'C'를 사용했습니다. 개발 결과, 최소 2cm부터 최대 400cm까지의 거리를 측정해 UART로 측정 결과를 송신하는 시스템을 개발할 수 있었습니다. 본론프로젝트의 목표는 "초음파 센서를 이용해 거리를 측정한 뒤, 측정된 거리 데이터를 PC로 송신하는 것" 입니다. 1. 시스템 요구사항 선정Echo 이후 다음 Trig까지 최소 10..
인피니언, LG전자와 임베디드 AI 기반 SDV 가속화 위한 전략적 파트너십
·
엔지니어링 뉴스
https://www.aitimes.kr/news/articleView.html?idxno=35015 인피니언, LG전자와 임베디드 AI 기반 SDV 가속화 위한 전략적 파트너십 - 인공지능신문인피니언 테크놀로지스(Infineon Technologies AG)는 소프트웨어 정의 차량(Software Defined Vehicle. 이하, SDV)의 안전성과 효율성을 극대화하고 SDV로의 전환을 가속화하기 위해 LG전자와 협력한다고 22일 밝.www.aitimes.kr기사 날짜: 25.05.22요지:LG전자의 전장 기술과 Infineon Technologies의 반도체 기술이 협력하여, SDV의 안정성과 효율성을 극대화시키는 3가지 핵심 SDV 솔루션들을 개발한다.개발 대상:xDC(Cross Domain C..
[C/C++] #include "ex.h" 과 <ex.h>의 차이
·
소프트웨어/C
#include 는 전처리 과정에서 header.h의 위치를 컴파일러가 설정한 include 디렉터리에서 찾아 인클루드 하라는 지시자이다. #include "header.h"는 소스 코드가 저장된 디렉터리를 우선으로 찾고, 해당 위치에 파일이 없으면 컴파일러가 설정한 include 디렉터리에서 파일을 찾아 인클루드 하라는 지시자이다.
ISTQB [CTFL] 2주 독학 합격 후기 & 합격 팁 !!
·
취업 준비/프로젝트 & 자격증
안녕하세요! ISTQB CTFL 시험을 2주간 독학으로 합격한 방식을 공유해봅니다.도움이 된다면 좋을 것 같습니다! 1. 공부법을 참고한 블로그들1. http://blog.naver.com/jdj1509/222807869139?viewType=pc2. https://solearn.tistory.com/2813. https://velog.io/@bxxloob_-/ISTQB-%ED%95%A9%EA%B2%A9-%ED%9B%84%EA%B8%B0-feat.-%EA%B3%B5%EB%B6%80%EB%B0%A9%EB%B2%95-%EB%B0%8F-%EB%82%98%EB%A7%8C%EC%9D%98-%ED%8C%81 2. 공부 기간총 준비 기간은 2주, 매일 공부하진 않아서 실제 공부 기간은 1.5주 될 것 같습니다.하루..
초소형 원자로의 상용화? 무엇이 달라질까?
·
엔지니어링 뉴스
오늘 신문을 보다, 최근 미국에선 발전용량이 5MW급인 원자로의 상용화가 코앞에 놓였다는 사실을 알게됐다.공학도로서 흥미를 가지지 않을 수 없었다. '아이언맨 가슴에 있던 아크 원자로같은 그런건가..?' 우리가 흔히 쓰는 ChatGPT를 한번 학습하는데 드는 전력량이 미국 5,000가구의 1년 사용 전력량이라고 한다. 이처럼, AI를 학습시키는데는 어마어마한 전력량이 소요된다. 이로 인해, Microsoft, Google, Amazon, OpenAI 등의 AI를 다루는 빅테크 기업들은 부족한 전력을 확보하기 위해 최근 각종 중소형 원자력 에너지 개발 회사들과 전력 계약을 체결중이라고 한다.  다시 초소형 원자로로 돌아와서, 전력에 대한 큰 수요는 기존 천연가스, 친환경, 대형 원자력 발전 등 을 통해 얻..
[독서록] 지금의 조건에서 시작하는 힘
·
Insights/서평
완벽주의를 완성주의로 바꾸는데 큰 도움이 됐던 책이었다. 근 3년간 읽었던 책 중 나에게 가장 긍정적인 영향을 많이 미친 책 중 하나였다.Chapter 1. 시작을 망설이는 당신은 완벽주의자다.완벽주의자들을 요약하면 대략 다음과 같은 5가지 유형으로 나눌 수 있다. 1. 비현실적 기대 = 내가 과연 저 목표를 달성할 수 있을까?2. 과거 곱씹기 = 과거에 실패한 기억에서 벗어날 수 없다.3. 인정받고 싶은 욕구 = 남들이 어떻게 생각할까 두려워.4. 실수할지도 모른다는 염려 = 실수하면 어쩌지?5. 행동에 대한 의심 = 어차피 해도 안 될 텐데 뭐. - 무언가로 인해 스스로에 대한 자신감이 없고 자꾸만 위축된다면, 세상에는 똑같은 문제를 안고도 얼마든지 자신감을 가지고 행복하게 사는 사람이 있다는 사실을..