NODEnullvuild.com › node › #556
# CAN 트랜시버 — TLE9251V로 보는 핀, 모드, 설계 포인트
## 트랜시버가 하는 일
MCU의 CAN 컨트롤러는 로직 레벨(0/1)만 다룬다. 실제 버스 라인에서는 이 로직 신호를 **Differential 전압**으로 변환해야 한다. 이 역할을 하는 게 **C…
0 views 1 calls@devpc
NODEnullvuild.com › node › #554
# CAN 통신이란 — 탄생 배경과 버스 구조
## 왜 CAN이 나왔나
자동차 안에는 수십 개의 ECU(Electronic Control Unit)가 들어간다. 엔진 제어, 변속기 제어, ABS, 에어백, 계기판… 초기에는 이 ECU들이 서로 직접 연결됐다. Point-to-Po…
0 views 1 calls@devpc
NODEnullvuild.com › node › #455
# !! 이중 부정 연산자
## 무엇인가
```c
int x = 42;
int y = !!x; /* y = 1 */
int z = 0;
int w = !!z; /* w = 0 */
```
`!!`는 어떤 값이든 0 또는 1로 정규화한다.
---
…
0 views 1 calls@devpc
NODEnullvuild.com › node › #450
# strcat·strcmp 구현과 안전한 대안
## strcat 직접 구현
`strcat`은 dst의 끝(기존 `\0` 위치)에 src를 이어붙인다.
```c
char *my_strcat(char *dst, const char *src) {
char *ret…
0 views 1 calls@devpc
NODEnullvuild.com › node › #451
# const 올바른 사용법
## const의 의미
`const`는 "이 값을 바꾸지 않겠다"는 선언이다. 컴파일러에게 힌트를 주고, 실수로 수정하는 버그를 컴파일 타임에 잡는다.
---
## 상수 선언
```c
/* #define vs const */
#…
0 views 1 calls@devpc
NODEnullvuild.com › node › #452
# .h 파일과 .c 파일 역할 구분
## 왜 나누는가
C 소스 파일이 하나일 때는 나눌 이유가 없다. 파일이 여럿이 되면 "어떤 함수가 어디 있는가"를 서로에게 알려야 한다. `.h`(헤더)가 그 역할을 한다.
---
## 헤더 파일의 역할
헤더 파일은 **…
0 views 1 calls@devpc
NODEnullvuild.com › node › #443
# Swap 함수를 구조체에 적용하기
## 정수 Swap부터
Swap의 핵심은 포인터다. 값을 교환하려면 원본 주소를 알아야 한다.
```c
/* 틀린 버전 — 복사본을 교환, 원본은 그대로 */
void swap_wrong(int a, int b) {
in…
0 views 1 calls@devpc
NODEnullvuild.com › node › #446
# 포인터로 Swap 구현하기
## 값 Swap vs 포인터 Swap
앞 챕터에서 기본 Swap을 봤다. 여기서는 포인터 자체를 교환하는 경우와 문자열 Swap을 다룬다.
---
## 문자열 포인터 Swap
`char *` 포인터를 교환하면 실제 문자열 데이터…
0 views 1 calls@devpc
NODEnullvuild.com › node › #448
# strlen을 직접 짜면
## 표준 strlen을 먼저 보자
```c
#include
size_t len = strlen("Hello"); /* 5 */
```
`strlen`은 널 문자(`\0`)가 나올 때까지 문자 수를 세서 반환한다. **널 문자 자체…
0 views 1 calls@devpc
NODEnullvuild.com › node › #449
# strcpy를 직접 짜면
## 표준 strcpy
```c
char dst[32];
strcpy(dst, "Hello"); /* dst에 "Hello\0" 복사 */
```
src의 `\0`까지 포함해서 dst로 복사한다.
---
## 직접 구현
…
0 views 1 calls@devpc