Q1. uint8_t a = 0b10110000; a = a | (1 << 2); 결과는?
A1. 0b10110100 → 비트 2가 1로 설정됨 (OR 연산)
Q2. 상위 4비트 유지, 하위 4비트 0으로 만드는 마스크는?
A2. 0xF0 → AND 연산 시 하위 비트 제거됨
Q3. 타이머 인터럽트 기반 흐름?
A3. 타이머 설정 → 인터럽트 발생 → ISR 실행 → 상태 업데이트
Q4. 상태머신: 정지 → 상승 → 도착 흐름을 위한 입력 조건은?
A4. 상승 버튼 입력 + 현재층 < 목표층 조건 만족 시
Q5. ROM / RAM / Flash / SRAM / DRAM 차이?
A5.
Q6. I2C 특징 2가지?
A6. 슬레이브 주소 기반 통신 / SCL-SDA 단선 통신 / 멀티마스터 지원
Q7. 72MHz 클럭에서 1초 루프 = 몇 사이클?
A7. 약 72,000,000 사이클
Q8. MOV R0, #0x10 → 의미는?
A8. R0 레지스터에 0x10 저장
Q9. SoC 설계 Flow?
A9.
1. Specification 정의
2. 아키텍처 설계
3. RTL 설계
4. 시뮬레이션
5. 합성(Synthesis)
6. 배치배선(Layout)
7. DRC/LVS 확인
8. Tape-out
9. Bring-up
10. 펌웨어 개발
Q10. IP란?
A10. Intellectual Property: UART, SPI, I2C 등의 재사용 가능 설계 블록
Q11. MMIO란?
A11. Memory-Mapped I/O: 메모리 주소처럼 레지스터 접근
Q12. Bootloader 역할?
A12. MCU 초기 부팅, 사용자 코드 로딩, 업데이트 수행
Q13. Bring-up 시 첫 확인 항목?
A13. 전원, 클럭, MMIO 접근 가능 여부
Q14. Bare-metal이란?
A14. OS 없이 하드웨어 직접 제어 (MCU 전용 방식)
Q15. FOTA란?
A15. Firmware Over-The-Air: 무선 펌웨어 업데이트
Q16. Embedded Flash vs External Flash 차이?
A16.
Q17. Bring-up 디버깅 방법 3가지?
A17.
Q18. Timer vs PWM 차이?
A18.
Q19. LED 끄는 코드 (MMIO)?
A19. REG &= ~(1 << n); → n번 비트를 0으로
Q20. UART 115200bps에서 1byte 전송 시간?
A20. 약 86.8μs (10bit 기준)
Q21. Flash 메모리 갱신 절차?
A21. 블록 단위 Erase → Page 단위 Write
Q22. Stack Overflow 원인?
A22. 무한 재귀 / ISR에서 큰 지역 변수 사용
Q23. Device Tree란?
A23. 리눅스에서 하드웨어 설정을 커널에 전달하는 구조
Q24. JTAG의 용도?
A24. 디버깅, 레지스터 접근, 메모리 확인, 펌웨어 다운로드
Q25. AHB와 APB의 차이는?
A25.
Q26. Cortex-M4와 M0의 차이점?
A26.
Q27. 인터럽트 벡터 테이블은 어떤 역할을 하나요?
A27.
각 인터럽트에 대한 ISR 주소를 저장해 MCU가 인터럽트 발생 시 해당 위치로 점프하도록 한다.
Q28. 벡터 테이블이 위치하는 기본 주소는 어디인가요?
A28.
일반적으로 0x00000000 또는 ROM 영역. 일부 MCU는 RAM에 위치하도록 재배치 가능.
Q29. Logic Analyzer의 활용 예시는?
A29.
I2C, SPI 등 디지털 신호의 타이밍 분석, 버그 추적
Q30. 디버깅 시 SWD와 JTAG의 차이?
A30.
Q31. printf 디버깅이 어려운 환경에서 주로 사용하는 기법은?
A31.
GPIO 토글, LED 점멸, Logic Analyzer, Watchdog 리셋 확인
Q32. 링커 스크립트에서 .text, .data, .bss의 의미는?
A32.
.text: 실행 코드 .data: 초기화된 전역/정적 변수 .bss: 초기화되지 않은 변수 Q33. static 변수는 어느 영역에 저장되나?
A33.
초기화된 변수 → .data, 초기화 안된 변수 → .bss
Q34. 스택(Stack)과 힙(Heap)의 차이점?
A34.
malloc() 사용, 수동 해제 필요Q35. SPI 통신 구성 요소?
A35.
MOSI, MISO, SCK, SS (Slave Select)
Q36. I2C와 UART의 주요 차이점은?
A36.
Q37. UART 송신 코드 예시 (레지스터 기반)?
A37.
while (!(USART1->SR & USART_SR_TXE));
USART1->DR = 'A';
Q38. SPI 통신에서 MSB First란?
A38.
데이터 전송 시 상위 비트부터 먼저 전송
Q39. Pull-up 저항은 언제 사용되나?
A39.
I2C 통신, 스위치 입력 안정화, Floating 방지용
Q40. MCU가 GPIO 핀에서 값을 읽을 때 입력이 Floating이면 어떤 문제가 생기나?
A40.
예측 불가능한 동작, 오작동 가능 → Pull-up/down 저항 필요
Q41. 옴의 법칙이란?
A41.
전압(V) = 전류(I) × 저항(R) → V = IR
Q42. 직렬 연결된 100Ω과 200Ω 저항의 합성 저항은?
A42.
100 + 200 = 300Ω
Q43. 병렬 연결된 100Ω과 200Ω 저항의 합성 저항은?
A43.
1 / (1/100 + 1/200) = 66.67Ω
Q44. 전압 분배 법칙이란?
A44.
직렬 연결된 저항에서 원하는 지점의 전압:
Vout = Vin × (R2 / (R1 + R2))
Q45. 커패시터는 어떤 상황에서 충전/방전을 하나요?
A45.
전압 변화 시 충전/방전하며, DC에서는 오픈 회로처럼 동작, AC에서는 주파수 의존적으로 동작
Q46. 바이패스 커패시터는 어떤 용도로 사용되나?
A46.
전원선에서 노이즈 제거, IC 근처에 배치
Q47. 다이오드의 역할은?
A47.
한 방향으로만 전류 흐름을 허용 (정류, 보호 등)
Q48. 쇼트키 다이오드의 특징은?
A48.
낮은 순방향 전압(약 0.2~0.3V), 고속 스위칭
Q49. Zener 다이오드는 어떤 용도에 쓰이나요?
A49.
역방향으로 동작하여 전압 레귤레이터로 사용
Q50. NPN 트랜지스터의 동작 조건은?
A50.
베이스에 전압이 걸려야 전류가 흐름 (베이스-이미터 전압 V_BE ≈ 0.7V 이상 필요)
Q51. Pull-up 저항이 없는 상태에서 버튼을 누르지 않았을 때 입력 핀의 상태는?
A51.
Floating 상태 → 값이 불안정함
Q52. 전압원과 직렬 연결된 LED에 저항 없이 바로 연결하면 어떤 일이 생길까?
A52.
과전류로 인해 LED 손상 또는 파손
Q53. 오실레이터 회로의 목적은?
A53.
주기적인 파형(클럭)을 생성하여 MCU 등의 타이밍 소스로 사용
Q54. RC 회로에서 커패시터 충전 시간은 어떻게 계산하는가?
A54.
시간 상수 τ = RC → 5τ 이후 약 99% 충전됨
Q55. 쇼트 회로(Short circuit)란?
A55.
거의 0Ω 경로로 인해 과전류가 흐르는 상태 → 발열, 손상 가능
Q56. 퓨즈(Fuse)의 역할은?
A56.
과전류 발생 시 회로를 차단하여 보호
Q57. GND(접지)는 왜 필요할까?
A57.
공통 기준점 제공, 전압 차 계산 기준, 회로 안정성 보장
Q58. 입력 임피던스가 높은 회로는 어떤 장점이 있을까?
A58.
신호 소스를 방해하지 않음 → 측정기, 연산증폭기 등에 사용
Q59. 아날로그 신호를 MCU에서 읽을 수 있도록 하는 회로는?
A59.
ADC (Analog to Digital Converter)
Q60. Pull-up과 Pull-down 회로의 차이?
A60.
Q61. RTOS의 주요 구성 요소 3가지는?
A61.
1. Task (또는 Thread)
2. Scheduler
3. Inter-task Communication (Queue, Semaphore 등)
Q62. Preemptive Scheduling이란?
A62.
우선순위가 더 높은 Task가 실행 중인 낮은 Task를 중간에 끊고 실행되는 방식
→ 실시간성 확보에 적합
Q63. Semaphore와 Mutex의 차이점은?
A63.
Q64. RTOS에서 context switch란?
A64.
현재 Task의 상태(레지스터 등)를 저장하고 다른 Task로 전환하는 과정
Q65. Task가 Block 상태에 들어가는 경우는?
A65.
Delay, Semaphore 획득 대기, Queue 메시지 수신 대기 등
Q66. RTOS에서 Stack Overflow를 방지하기 위한 방법?
A66.
Q67. RTOS 없이 구현된 코드와 비교하여 RTOS의 장점은?
A67.
Q68. DMA의 장점은?
A68.
CPU의 개입 없이 주변장치와 메모리 간 데이터를 전송하여 CPU 부하를 줄임
Q69. DMA는 어떤 종류의 전송을 지원하나요?
A69.
Q70. 인터럽트와 폴링 방식의 차이는?
A70.
Q71. Nested interrupt란?
A71.
인터럽트 중에 더 높은 우선순위의 인터럽트가 발생하여 중첩 실행되는 것
Q72. NVIC는 무엇인가?
A72.
Nested Vectored Interrupt Controller –
Cortex-M MCU에서 인터럽트 우선순위, Enable/Disable을 관리
Q73. 인터럽트 우선순위를 설정할 수 있는 이유는?
A73.
더 긴급한 작업을 빠르게 처리할 수 있도록 하기 위해
(예: 타이머 인터럽트 > 버튼 입력)
Q74. DMA와 인터럽트를 병행하여 사용할 수 있나요?
A74.
가능. DMA 완료 시 인터럽트를 발생시켜 처리 흐름 제어
Q75. 인터럽트 핸들러 안에서 긴 연산을 수행하면 어떤 문제가 발생하나요?
A75.
Q76. 연산 증폭기(Op-Amp)의 가장 대표적인 두 가지 구성 방식은?
A76.
Q77. 트랜지스터 스위칭 회로에서 베이스 저항이 필요한 이유는?
A77.
과도한 베이스 전류로 인한 과열 및 손상 방지
Q78. 클램핑 회로란?
A78.
출력 전압을 특정 범위로 제한하는 회로 (예: 다이오드로 ±0.7V 제한)
Q79. 파워 레일(Power Rail)이란?
A79.
PCB에서 전원(VCC, GND)을 배분하는 주요 배선 경로
Q80. 오실로스코프로 관찰 가능한 정보는?
A80.
전압의 시간 변화, 파형 모양, 진폭, 주기, 주파수, 노이즈 등
정답:
해설:
직렬 회로에서는 흐르는 전류가 동일하므로 저항이 많을수록 전압이 많이 걸린다. 병렬 회로는 각 지점의 전압이 동일하지만 저항값에 따라 분기된 전류가 다르게 흐른다.
예: LED를 병렬 연결하면 각각 동일한 전압이 걸리므로 저항을 따로 달지 않으면 과전류가 흐를 수 있음.
정답:
커패시터는 전압이 변화할 때만 전류를 흐르게 하기 때문에, 정전압인 DC는 차단, 변화하는 AC는 통과시킨다.
해설:
커패시터는 충전과 방전을 반복하면서 전류를 흐르게 한다.
응용: 커플링(Coupling) 커패시터는 AC만 통과시키기 위해 사용됨.
정답:
해설:
인덕터는 자속(자기장)을 이용하여 전류를 저장함. 전류 변화가 급격하면 반발력(유도 기전력)이 생겨서 변화율을 낮춘다.
필터 회로에서 커패시터와 함께 사용되어 고/저역 필터 설계 가능
정답:
해설:
전압 변화가 지수 함수 형태로 이루어지며, 시간 상수는 회로의 반응 속도를 결정한다.
예: 전원 스위치 딜레이, 버튼 디바운싱, ADC 안정화 시간 등에 활용됨
정답:
해설:
센서의 저항값이 바뀌면 브리지 회로에서 출력 전압이 발생 → 이를 측정하여 물리량(압력, 온도 등)으로 변환 가능
예: 스트레인 게이지, 온도 센서 회로
정답:
이상적인 Op-Amp는 입력 간 전압 차가 0이 되도록 작동하므로, 극히 작은 입력 전압에도 큰 출력 변화가 발생한다.
해설:
이러한 특성으로 정밀한 증폭, 비교기, 필터 등 다양하게 활용됨.
정답:
해설:
고주파 노이즈를 GND로 우회시켜 전원 안정성을 높인다. 특히 디지털 회로나 MCU 근처에서는 0.1µF 커패시터를 많이 사용한다.
정답:
아니요. 게이트는 절연되어 있어 전류가 거의 흐르지 않음
해설:
MOSFET은 Gate-Oxide 절연막이 있어, 전압에 따라 채널이 열릴 뿐 전류는 흐르지 않는다.
→ 따라서 전압 제어 소자, MCU의 GPIO로 직접 제어 가능
정답:
| 항목 | BJT | FET |
|---|---|---|
| 제어 방식 | 전류 제어 (베이스 전류) | 전압 제어 (게이트 전압) |
| 입력 임피던스 | 낮음 | 높음 |
| 속도 | 느림 | 빠름 |
| 전력 소모 | 높음 | 낮음 |
해설:
FET는 고속 스위칭과 저전력으로 현대 회로에 더 적합. BJT는 고전력 증폭기 등에 사용됨.
정답:
신호 손실, 반사, 왜곡을 방지하여 에너지 전달 효율을 높이기 위함
해설:
특히 고주파(예: RF, 고속 데이터)에서는 송신단과 수신단의 임피던스를 맞추지 않으면 신호 반사가 발생. 일반적으로 50Ω 또는 75Ω으로 설계함.
분야: SoC 설계 흐름
정답:
해설:
현대 SoC는 수많은 IP 블록의 조합으로 구성되며, 이들을 AMBA, Wishbone, Avalon 같은 버스로 연결해 하나의 칩을 구성함.
분야: MCU 메모리 매핑
정답:
해설:
ARM이나 RISC-V 기반 시스템은 대부분 MMIO를 사용. 메모리처럼 포인터로 제어 가능하여 코드가 간결함.
분야: 저장장치
정답:
해설:
Firmware 부트는 보통 Embedded Flash에서 시작하고, 외부 Flash는 리소스 저장용 등으로 사용.
분야: MCU 주변장치
정답:
해설:
PWM은 내부 Timer의 기능을 기반으로 하며, LED 밝기/모터 속도 제어 등 아날로그 제어에 사용.
분야: 실시간 시스템
정답:
해설:
CPU와 DMA가 동시에 메모리를 접근하면 데이터 충돌 가능성 있음. 이를 방지하려면 Cache Clean/Invalidate 처리와 Memory Barrier 사용이 필요함.
분야: 실무 디버깅
정답:
1. UART printf: 코드 진행 상태, 변수값 확인
2. GPIO 토글: 특정 시점 신호를 논리분석기/오실로스코프로 확인
3. JTAG 디버깅: 브레이크포인트, 스텝 실행, 메모리 확인 가능
해설:
보드 Bring-up 시 printf보다 GPIO나 JTAG이 더 신뢰성 있는 디버깅 방법이다.
분야: SoC 개발 과정
정답:
1. Specification 정의
2. RTL 설계 (Verilog/VHDL)
3. Simulation & Functional Verification
4. Synthesis
5. Floorplanning & Placement
6. Routing
7. Static Timing Analysis
8. DRC/LVS
9. Tape-out
10. Bring-up & Validation
해설:
실제 칩을 만들기 전 모든 단계에서 기능, 전기적, 시간적 특성을 검증해야 함. Verification이 전체의 60% 이상 차지.
분야: 디지털 회로
정답:
해설:
버튼 입력이나 외부 신호가 연결되지 않은 순간에 예상치 못한 동작(노이즈 유입)을 막아줌.
분야: 전원 회로
정답:
해설:
민감한 아날로그 회로에는 LDO, 고전력 회로에는 스위칭 사용. 전력 효율/발열 고려.
정답:
해설:
예를 들어, 전역 변수 수정 중 인터럽트가 발생해 같은 데이터를 참조하면 충돌 발생.
__disable_irq() 또는 뮤텍스 등으로 보호 필요.
좋아! 컴퓨터 구조는 펌웨어/SoC/임베디드 쪽 모두에서 매우 중요한 기초지식이라, 지원자가 꼭 알고 있어야 해.
아래는 펌웨어 엔지니어 및 하드웨어 기반 개발자를 위한 컴퓨터 구조 핵심 개념 문제 10선이야.
문제 + 정답 + 해설 형식으로 줄게.
정답:
해설:
하버드 구조는 동시에 명령어 fetch와 데이터 access가 가능하여 빠르지만, 구현 복잡도가 높음.
폰 노이만 구조는 단순하지만 명령어/데이터 충돌(Bottleneck) 발생 가능.
정답:
해설:
IF → ID → EX → MEM → WB의 각 단계를 나눠 여러 명령어를 동시에 실행시킴.
하지만 데이터/제어 해저드 같은 문제도 함께 생김.
정답:
해설:
자주 사용하는 데이터를 미리 저장하여 빠르게 접근.
L1, L2, L3 등 계층 구조를 갖고, Hit/Miss 개념이 중요.
정답:
해설:
캐시 설계는 이 지역성 개념을 바탕으로 함. 예: 블록 단위로 캐시하기.
정답:
해설:
실시간 반응이 필요한 시스템은 인터럽트 방식 사용.
단, 인터럽트 과다하면 Context Switch 오버헤드가 생김.
정답:
해설:
ARM은 대표적인 RISC 구조, 인텔 x86은 CISC.
RISC는 파이프라이닝과 병렬처리에 유리함.
정답:
해설:
주소 버스, 데이터 버스, 제어 버스로 구성됨.
버스 폭이 클수록 더 많은 데이터 전송 가능.
정답:
해설:
명령어 실행 후 PC는 자동으로 증가하거나 분기 명령에 따라 수정됨.
정답:
1. Fetch (명령어 읽기)
2. Decode (해석)
3. Execute (실행)
4. Memory Access (필요시)
5. Write Back
해설:
이 과정을 반복하면서 프로그램 실행이 이루어짐.
정답:
해설:
주소 공간을 효율적으로 분할하고, 메모리 보호와 가상메모리 구현 가능.
문제:
32비트 숫자 0x12345678을 메모리에 저장할 때,
정답:
12 34 56 78 78 56 34 12해설:
대부분의 x86, ARM Cortex-M은 Little Endian 사용
정답:
예시:
8비트 값 10110100에서
해설:
이 개념은 시리얼 통신, 쉬프트 연산, 부호 판단 등에 매우 중요.
부호비트가 MSB 위치에 있을 경우, 1이면 음수(2의 보수 표현).
문제:
8비트로 -5를 2의 보수로 표현하면?
정답:
00000101 11111010 11111011해설:
2의 보수는 컴퓨터에서 음수를 표현하는 표준 방식이야.
MSB가 1이면 음수, 0이면 양수로 해석함.
정답:
해설:
C에서 int와 unsigned int 구분은 중요!
덧셈, 비교, 시프트 연산에서 오류가 발생할 수 있음.
정답:
x << n: x를 n비트 왼쪽으로 이동, 곱하기 2ⁿ x >> n: x를 n비트 오른쪽으로 이동, 나누기 2ⁿ주의:
문제:
레지스터 0b10101101에서 4번째 비트를 1로 만들고 싶다. 어떤 연산을 해야 할까?
정답:
reg |= (1 << 3); // 0-index 기준, 4번째 비트는 비트 3
해설:
|=는 OR 연산 → 해당 위치를 1로 만든다 &), OR (|), XOR (^), NOT (~)은 하드웨어 제어 기본정답:
*(volatile uint32_t*)0x40021000 = ...) IN, OUT)이 있음 (주로 x86)해설:
ARM 기반 임베디드 시스템은 대부분 MMIO 사용.
메모리와 동일한 방식으로 장치를 제어할 수 있음.
정답:
해설:
8비트는 0~255 범위의 숫자(256개) 표현 가능.
기억: 1 nibble = 4 bit, 2 nibble = 1 byte
문제:
레지스터에서 5~3번 비트(3bit)만 추출하려면?
정답:
(value >> 3) & 0x07
해설:
0b00000111 (0x07)로 마스킹하여 3비트만 추출정답:
해설:
4바이트 정렬된 시스템에서 int는 0, 4, 8 주소에 있어야 함.
정렬되지 않으면 접근이 느려지거나 하드웨어 오류 발생 가능.
정답:
해설:
CPU는 오직 전송 명령만 내리고, 그 이후 데이터 전송은 DMA 컨트롤러가 수행.
→ CPU의 부하 감소 + 빠른 전송 가능.
예: UART 수신 버퍼 → 메모리 저장, SPI 연속 전송 등.
정답:
해설:
MMU는 OS가 메모리를 효율적으로 관리할 수 있도록 지원함.
임베디드 고성능 OS(Linux 등)에서는 MMU가 필수적이지만, RTOS에서는 없을 수도 있음.
정답:
해설:
RTOS는 실시간 처리를 보장하는 운영체제로, 미션 크리티컬 임베디드 시스템에 주로 사용됨.
Ex: FreeRTOS, RTX, Zephyr
lw 명령어는 어떤 역할을 할까?정답:
lw x5, 0(x10) → x10 주소에서 32비트 데이터를 읽어 x5에 저장해설:
lw = load word (32-bit) 정답:
해설:
DSP(Digital Signal Processor)는 반복적인 수치 연산이 많기 때문에 데이터와 명령어를 동시에 읽는 구조가 효율적임.
정답:
종류:
해설:
Set-associative는 성능과 구현 복잡도의 균형점.
Miss율, Hit시간 등을 비교할 때 중요.
정답:
해설:
CPU는 인터럽트가 발생하면 IVT를 참조해 해당 ISR을 실행함.
ARM Cortex-M에서는 벡터 테이블이 메모리 주소 0x00000000에서 시작함.
정답:
해설:
일반 SRAM보다 빠르고, 캐시 대신 사용되기도 함.
실시간 응답이 필요한 코드나 데이터 저장에 사용.
→ RTOS 커널, 인터럽트 핸들러 등.
정답:
해설:
비싼 고속 메모리를 적게 사용하고, 저속 대용량 메모리는 캐시로 보완하는 구조.
속도 차이가 클수록 캐시 성능이 중요해짐.
정답:
해설:
인터럽트 지연은 실시간 시스템에 치명적이기 때문에 짧고 빠른 처리가 필수.
보통 ISR에서는 flag만 세우고, 처리는 다른 쓰레드에서 진행.
정답:
해설:
인터럽트는 효율적이고 반응이 빠름.
폴링은 CPU 자원을 소모하지만 구현은 단순.
정답:
해설:
Semaphore는 동기화, 이벤트 알림용.
Mutex는 자원 보호 전용, 소유권 개념이 있음.
정답 (일반적 플로우 순서):
1. RTL 코딩 (Verilog/VHDL)
2. 시뮬레이션
3. Synthesis (논리합성)
4. Place & Route
5. Timing 분석
6. GDSII 생성
7. 칩 제조
해설:
FPGA일 경우는 GDSII 단계 없이 Bitstream으로 종료.
정답:
해설:
비동기 클럭 사이에는 메타스테이블 상태가 발생할 수 있어.
해결책은 동기화 회로 (Synchronizer), FIFO 등.
정답:
해설:
멀티코어 SoC에서는 한 CPU가 수정한 데이터를 다른 CPU가 읽을 때 문제가 발생할 수 있음.
해결 방법: MESI protocol, snooping, write-through 등.
정답:
해설:
SoC에서 파워 최적화를 위해 널리 쓰임.
예: 사용하지 않는 peripheral 블록에 클럭 차단.
정답:
해설:
부팅 시 CPU는 이 주소의 값을 읽고, 해당 주소로 PC를 설정하여 실행 시작.
정답:
__enable_irq() or PRIMASK/BASEPRI 설정)해설:
NVIC를 지원하는 Cortex-M에서는 우선순위 기반 중첩 인터럽트가 가능.
정답:
해설:
SoC 내부에서 8MHz 외부 클럭을 72MHz, 168MHz 등으로 증폭.
변동 없는 안정적 출력 유지.
정답:
해설:
다단계 부트 시스템에서 Stage 1이 ROM에 있고, Stage 2가 Flash → RAM으로 펌웨어 로딩 후 실행함.
→ 펌웨어 업데이트, 보안 부트에도 관여.