Skip to content

won-seoop/semiconductor-shm-viewer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

11 Commits
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

κ³΅μœ λ©”λͺ¨λ¦¬ 기반 쀑앙 집쀑식 μ„€λΉ„ λͺ¨λ‹ˆν„°λ§ μ‹œμŠ€ν…œ

μ„€λΉ„ 곡유 λ©”λͺ¨λ¦¬ 데이터λ₯Ό 메타데이터 기반으둜 νŒŒμ‹±ν•˜μ—¬ μ›Ή λΈŒλΌμš°μ €μ—μ„œ μ‹œκ°ν™”ν•˜λŠ” ν”„λ‘œμ νŠΈμž…λ‹ˆλ‹€.

미리보기

image

문제 상황

Problem

μ„€λΉ„λ§ˆλ‹€ 데이터 ꡬ쑰와 λ©”λͺ¨λ¦¬ μ£Όμ†Œκ°€ 달라, 각각 μ „μš© λͺ¨λ‹ˆν„°λ§ 도ꡬλ₯Ό κ°œλ°œν•΄μ•Ό ν–ˆμŠ΅λ‹ˆλ‹€. 곡톡 둜직으둜 읽을 수 μ—†μ–΄ μœ μ§€λ³΄μˆ˜ λΉ„μš©κ³Ό 개발 μ‹œκ°„μ΄ μ¦κ°€ν•˜λŠ” λ¬Έμ œκ°€ μžˆμ—ˆμŠ΅λ‹ˆλ‹€.


ν•΄κ²° 방법

Solve

곡유 λ©”λͺ¨λ¦¬μ˜ μ‹œμž‘ μ£Όμ†Œμ™€ 메타데이터 CSVλ₯Ό 곡톡 λ°©μ‹μœΌλ‘œ μ²˜λ¦¬ν•˜μ—¬, ν•˜λ‚˜μ˜ λ„κ΅¬λ‘œ λͺ¨λ“  μ„€λΉ„ 데이터λ₯Ό 읽고 μ‹œκ°ν™”ν•©λ‹ˆλ‹€.


핡심 둜직

곡유 λ©”λͺ¨λ¦¬ 읽기

Shared Memory Read Logic

Windows OpenFileMappingW 둜 곡유 λ©”λͺ¨λ¦¬λ₯Ό μ—΄κ³ , MapViewOfFile 둜 μ‹œμž‘ 포인터λ₯Ό νšλ“ν•œ λ’€ 곡톡 νŒŒμ‹± μ—”μ§„(parseShm)에 μ „λ‹¬ν•©λ‹ˆλ‹€.

κ³΅μœ λ©”λͺ¨λ¦¬ μ—΄κΈ° β†’ λ©”λͺ¨λ¦¬ λ§€ν•‘ β†’ μ‹œμž‘ 포인터 νšλ“ β†’ parseShm 전달 β†’ λ ˆμ½”λ“œ μˆ˜ν–‰

곡톡 데이터 νŒŒμ‹± 둜직

Common Data Parsing Logic

메타데이터에 μ •μ˜λœ νƒ€μž… 정보λ₯Ό κΈ°μ€€μœΌλ‘œ 포인터λ₯Ό μ΄λ™ν•˜λ©° 각 ν•„λ“œλ₯Ό ν•΄μ„ν•©λ‹ˆλ‹€.

*reinterpret_cast<const uint16_t*>(ptr)  // UINT16
*reinterpret_cast<const double*>(ptr)    // DOUBLE
*reinterpret_cast<const float*>(ptr)     // FLOAT
cursor += field.size;                    // λ‹€μŒ ν•„λ“œλ‘œ 이동

ν”„λ‘œμ νŠΈ ꡬ쑰

semiconductor_shm_viewer/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ main.cpp              # μ§„μž…μ 
β”‚   β”œβ”€β”€ viewer.cpp/h          # CSV 기반 터미널 λ·°μ–΄
β”‚   β”œβ”€β”€ shm_parser.cpp/h      # 곡톡 νŒŒμ‹± 둜직 (포인터 이동 + νƒ€μž… μΊμŠ€νŒ…)
β”‚   β”œβ”€β”€ field.cpp/h           # ν•„λ“œ νƒ€μž… μ •μ˜
β”‚   β”œβ”€β”€ csv.cpp/h             # CSV νŒŒμ‹±
β”‚   └── wasm_bindings.cpp     # WebAssembly 바인딩
β”œβ”€β”€ web/
β”‚   β”œβ”€β”€ index.html
β”‚   β”œβ”€β”€ app.js
β”‚   β”œβ”€β”€ styles.css
β”‚   β”œβ”€β”€ viewer.js / viewer.wasm  # C++ β†’ WASM 컴파일 κ²°κ³Ό
β”‚   β”œβ”€β”€ guide/                   # μ‚¬μš© κ°€μ΄λ“œ 이미지
β”‚   └── process/                 # 문제/ν•΄κ²°/둜직 이미지
β”œβ”€β”€ data/
β”‚   β”œβ”€β”€ *_metadata.csv        # ν•„λ“œ μ •μ˜ (name, type, size)
β”‚   └── *_output.csv          # μ„€λΉ„ 좜λ ₯ 데이터
β”œβ”€β”€ build_wasm.sh             # WASM λΉŒλ“œ 슀크립트
└── shm_demo/
    └── shm_reader.cpp        # 곡유 λ©”λͺ¨λ¦¬ 읽기 데λͺ¨ (Windows)

μ‹€ν–‰ 방법

터미널 λ·°μ–΄ (C++)

g++ -std=c++17 src/csv.cpp src/field.cpp src/shm_parser.cpp src/viewer.cpp src/main.cpp -o shm_viewer
./shm_viewer

μ›Ή λ·°μ–΄

python3 -m http.server 4173

λΈŒλΌμš°μ €μ—μ„œ μ ‘μ†ν•©λ‹ˆλ‹€.

http://localhost:4173/web/

WASM μž¬λΉŒλ“œ (C++ μˆ˜μ • μ‹œ)

bash build_wasm.sh

μ›Ή λ·°μ–΄ μ‚¬μš© κ°€μ΄λ“œ

Step 1 β€” μ„€λΉ„ 선택

Guide 1

ETCH / PHOTO / TRANSFER 쀑 μ„€λΉ„λ₯Ό μ„ νƒν•˜λ©΄ ν•΄λ‹Ή 데이터가 λ‘œλ“œλ©λ‹ˆλ‹€. TESTλ₯Ό μ„ νƒν•˜λ©΄ 직접 CSVλ₯Ό μ—…λ‘œλ“œν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Step 2 β€” TEST λͺ¨λ“œ 선택

Guide 2

TEST 탭을 μ„ νƒν•˜λ©΄ μ‚¬μ΄λ“œλ°” ν•˜λ‹¨μ— CSV 직접 μ—…λ‘œλ“œ μ„Ήμ…˜μ΄ ν™œμ„±ν™”λ©λ‹ˆλ‹€.

Step 3 β€” 메타데이터 CSV μ—…λ‘œλ“œ

Guide 3

name, type, size ν˜•μ‹μ˜ 메타데이터 CSVλ₯Ό μ„ νƒν•©λ‹ˆλ‹€.

name,type,size
equipmentId,UINT16,2
chuckTemp,DOUBLE,8

Step 4 β€” 데이터 CSV μ—…λ‘œλ“œ 및 적용

Guide 4

μ‹€μ œ 데이터 CSVλ₯Ό μ„ νƒν•œ λ’€ 적용 λ²„νŠΌμ„ λˆ„λ¦…λ‹ˆλ‹€. 포맷이 λ§žμ§€ μ•ŠμœΌλ©΄ 였λ₯˜ λ©”μ‹œμ§€κ°€ ν‘œμ‹œλ˜κ³  μ μš©λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

Step 5 β€” κ²°κ³Ό 확인

Guide 5

상단 λŒ€μ‹œλ³΄λ“œμ—μ„œ μ£Όμš” μ§€ν‘œ 좔이λ₯Ό ν™•μΈν•˜κ³ , ν•˜λ‹¨ ν…Œμ΄λΈ”μ—μ„œ 전체 λ ˆμ½”λ“œλ₯Ό μ‘°νšŒν•©λ‹ˆλ‹€. 컬럼 헀더λ₯Ό ν΄λ¦­ν•˜λ©΄ μ •λ ¬λ©λ‹ˆλ‹€.


메타데이터 포맷

컬럼 μ„€λͺ… μ˜ˆμ‹œ
name ν•„λ“œ 이름 chuckTemp
type 데이터 νƒ€μž… UINT8 UINT16 UINT32 INT8 INT16 INT32 FLOAT DOUBLE CHAR_ARRAY
size λ°”μ΄νŠΈ 크기 8

About

πŸ–₯️ κ³΅μœ λ©”λͺ¨λ¦¬ 기반 쀑앙 집쀑식 μ„€λΉ„ λͺ¨λ‹ˆν„°λ§ μ‹œμŠ€ν…œ

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors