Skip to content

๐Ÿฆ€ ARM Cortex-M33 Rust embedded project with comprehensive memory analysis using SungDB MCP. Features Hello World, context switching, clock control, and detailed memory layout verification.

Notifications You must be signed in to change notification settings

passingduck/cortex-m33-rust

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

3 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿฆ€ Cortex-M33 Rust Project

ARM Cortex-M33 ๋งˆ์ดํฌ๋กœ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์œ„ํ•œ Rust ์ž„๋ฒ ๋””๋“œ ์‹œ์Šคํ…œ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์ ํŠธ๋Š” SungDB MCP๋ฅผ ํ™œ์šฉํ•œ ๋ฉ”๋ชจ๋ฆฌ ๋ถ„์„๊ณผ ๋””๋ฒ„๊น… ๊ธฐ๋Šฅ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

๐ŸŽฏ ํ”„๋กœ์ ํŠธ ๋ชฉํ‘œ

  • ARM Cortex-M33์—์„œ Rust ์–ธ์–ด๋กœ ์ž„๋ฒ ๋””๋“œ ์‹œ์Šคํ…œ ๊ตฌํ˜„
  • Hello World ์ถœ๋ ฅ ๋ฐ ๊ธฐ๋ณธ์ ์ธ ์‹œ์Šคํ…œ ๊ธฐ๋Šฅ ๊ตฌํ˜„
  • Context Switch ์‹œ๋ฎฌ๋ ˆ์ด์…˜
  • ํด๋ก ์ œ์–ด ๋ฐ ์ƒํƒœ ์ฒดํฌ ๊ธฐ๋Šฅ
  • SungDB MCP๋ฅผ ํ™œ์šฉํ•œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ ๋ถ„์„ ๋ฐ ๊ฒ€์ฆ

๐Ÿš€ ์ฃผ์š” ๊ธฐ๋Šฅ

1. Hello World ์ถœ๋ ฅ

  • Semihosting์„ ํ†ตํ•œ ์ฝ˜์†” ์ถœ๋ ฅ
  • ์‹œ์Šคํ…œ ๋ฒ„์ „ ๋ฐ ์ƒํƒœ ์ •๋ณด ํ‘œ์‹œ

2. ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ ๋ถ„์„

  • ์Šคํƒ ๋ณ€์ˆ˜ vs ์ „์—ญ ๋ณ€์ˆ˜ ์œ„์น˜ ๋ถ„์„
  • ํ•จ์ˆ˜ ์ฃผ์†Œ (TEXT ์˜์—ญ) ํ™•์ธ
  • ์ƒ์ˆ˜ ๋ฐ์ดํ„ฐ (RODATA ์˜์—ญ) ์œ„์น˜ ์ถ”์ 

3. Context Switch ์‹œ๋ฎฌ๋ ˆ์ด์…˜

  • ARM ๋ ˆ์ง€์Šคํ„ฐ ์ƒํƒœ ์ €์žฅ/๋ณต์›
  • ํƒœ์Šคํฌ ๊ฐ„ ์ปจํ…์ŠคํŠธ ์ „ํ™˜ ๋ฐ๋ชจ

4. ํด๋ก ์ œ์–ด

  • ์‹œ์Šคํ…œ ํด๋ก ํ™œ์„ฑํ™”/๋น„ํ™œ์„ฑํ™”
  • ํด๋ก ์ƒํƒœ ๋ชจ๋‹ˆํ„ฐ๋ง

5. ํž™ ๋ฉ”๋ชจ๋ฆฌ ์—ฐ์‚ฐ

  • heapless ํฌ๋ ˆ์ดํŠธ๋ฅผ ํ™œ์šฉํ•œ ์Šคํƒ ๊ธฐ๋ฐ˜ ์ปฌ๋ ‰์…˜
  • ๋™์  ํฌ๊ธฐ ๋ฒกํ„ฐ ๋ฐ ๋ฌธ์ž์—ด ์ฒ˜๋ฆฌ

๐Ÿ› ๏ธ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ

์‹œ์Šคํ…œ ์š”๊ตฌ์‚ฌํ•ญ

  • Rust: 1.89.0+
  • Target: thumbv8m.main-none-eabihf (Cortex-M33 with FPU)
  • Tools: gdb-multiarch, arm-none-eabi-* toolchain
  • Debugger: SungDB MCP

์˜์กด์„ฑ ํฌ๋ ˆ์ดํŠธ

cortex-m = "0.7"           # ARM Cortex-M ํ•˜๋“œ์›จ์–ด ์ถ”์ƒํ™”
cortex-m-rt = "0.7"        # ๋Ÿฐํƒ€์ž„ ๋ฐ ์‹œ์ž‘ ์ฝ”๋“œ
cortex-m-semihosting = "0.5" # ๋””๋ฒ„๊น…์šฉ semihosting
panic-halt = "0.2"         # ํŒจ๋‹‰ ํ•ธ๋“ค๋Ÿฌ
heapless = "0.8"           # ํž™ ์—†๋Š” ์ปฌ๋ ‰์…˜
embedded-hal = "1.0"       # ์ž„๋ฒ ๋””๋“œ ํ•˜๋“œ์›จ์–ด ์ถ”์ƒํ™” ๊ณ„์ธต

๐Ÿ“ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

cortex-m33-rust/
โ”œโ”€โ”€ ๐Ÿ“„ Cargo.toml           # Rust ํ”„๋กœ์ ํŠธ ์„ค์ •
โ”œโ”€โ”€ ๐Ÿ“„ Makefile             # ๋นŒ๋“œ ์ž๋™ํ™”
โ”œโ”€โ”€ ๐Ÿ“„ README.md            # ์ด ๋ฌธ์„œ
โ”œโ”€โ”€ ๐Ÿ“„ MEMORY_ANALYSIS_REPORT.md  # ์ƒ์„ธ ๋ฉ”๋ชจ๋ฆฌ ๋ถ„์„ ๋ฆฌํฌํŠธ
โ”œโ”€โ”€ ๐Ÿ“ .cargo/
โ”‚   โ””โ”€โ”€ ๐Ÿ“„ config.toml      # Cargo ๋นŒ๋“œ ์„ค์ •
โ”œโ”€โ”€ ๐Ÿ“ src/
โ”‚   โ””โ”€โ”€ ๐Ÿ“„ main.rs          # ๋ฉ”์ธ ์†Œ์Šค ์ฝ”๋“œ
โ””โ”€โ”€ ๐Ÿ“ linker/
    โ””โ”€โ”€ ๐Ÿ“„ memory.x         # ๋ง์ปค ์Šคํฌ๋ฆฝํŠธ

๐Ÿ”ง ๋นŒ๋“œ ๋ฐ ์‹คํ–‰

1. ํ™˜๊ฒฝ ์„ค์ •

# Rust ์„ค์น˜ (์ด๋ฏธ ์„ค์น˜๋œ ๊ฒฝ์šฐ ๊ฑด๋„ˆ๋›ฐ๊ธฐ)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source "$HOME/.cargo/env"

# ARM ํƒ€๊ฒŸ ์ถ”๊ฐ€
rustup target add thumbv8m.main-none-eabihf

# ํ•„์ˆ˜ ๋„๊ตฌ ์„ค์น˜
cargo install cargo-binutils
rustup component add llvm-tools-preview

# ARM GDB ์„ค์น˜ (Ubuntu/Debian)
sudo apt install gdb-multiarch

2. ๋นŒ๋“œ

# ๋ฆด๋ฆฌ์ฆˆ ๋นŒ๋“œ
make release
# ๋˜๋Š”
cargo build --release

# ๋””๋ฒ„๊ทธ ๋นŒ๋“œ
make debug
# ๋˜๋Š”
cargo build

# ๋ฐ”์ด๋„ˆ๋ฆฌ ์ •๋ณด ํ™•์ธ
make size

3. ๋””๋ฒ„๊น…

# SungDB MCP๋ฅผ ์‚ฌ์šฉํ•œ ๋””๋ฒ„๊น…
# (๋ณ„๋„ ํ„ฐ๋ฏธ๋„์—์„œ SungDB MCP ์„œ๋ฒ„ ์‹คํ–‰ ํ•„์š”)

# GDB ์ค€๋น„
make gdb-prep

# ๋ฐ”์ด๋„ˆ๋ฆฌ ์œ„์น˜: target/thumbv8m.main-none-eabihf/debug/main

๐Ÿ”ฌ ๋ฉ”๋ชจ๋ฆฌ ๋ถ„์„ ๊ฒฐ๊ณผ

์ƒ์„ธํ•œ ๋ฉ”๋ชจ๋ฆฌ ๋ถ„์„ ๊ฒฐ๊ณผ๋Š” MEMORY_ANALYSIS_REPORT.md๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์ฃผ์š” ๋ฐœ๊ฒฌ์‚ฌํ•ญ

โœ… ์„ฑ๊ณต์ ์ธ ๋ถ„์„

  • SungDB MCP: ARM Cortex-M33 ์™„๋ฒฝ ์ง€์›
  • ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ: TEXT, RODATA, STACK ์˜์—ญ ์ •ํ™•ํžˆ ๋ถ„์„
  • ํ•จ์ˆ˜ ์ถ”์ : ๋ชจ๋“  ํ•จ์ˆ˜์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ ์ •ํ™•ํžˆ ์‹๋ณ„

โœ… ํ•ด๊ฒฐ๋œ ์ด์Šˆ

  • ์ปดํŒŒ์ผ๋Ÿฌ ์ตœ์ ํ™” ๋ฐฉ์ง€: #[no_mangle], #[inline(never)] ์†์„ฑ์œผ๋กœ ํ•จ์ˆ˜ ๋ณด์กด
  • ์‹ค์ œ ํ•˜๋“œ์›จ์–ด ์ ‘๊ทผ: ptr::write_volatile(), ptr::read_volatile() ์‚ฌ์šฉ
  • ์ „์—ญ ๋ณ€์ˆ˜ ํ™œ์šฉ: ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ ์กฐ์ž‘์œผ๋กœ ์ตœ์ ํ™” ๋ฐฉ์ง€
  • ์‹คํ–‰ ๊ฐ€๋Šฅ์„ฑ ํ™•์ธ: QEMU์—์„œ ์‹คํ–‰ ์‹œ๋„ ์„ฑ๊ณต (lockup๊นŒ์ง€ ๋„๋‹ฌ)

โš ๏ธ ํ˜„์žฌ ์ƒํƒœ

  • ๋ฐ”์ด๋„ˆ๋ฆฌ ์ƒ์„ฑ: ELF ํŒŒ์ผ ์„ฑ๊ณต์ ์œผ๋กœ ์ƒ์„ฑ (128KB)
  • ์‹คํ–‰ ๊ฐ€๋Šฅ์„ฑ: QEMU์—์„œ ๋กœ๋“œ ๋ฐ ์‹คํ–‰ ์‹œ๋„ ํ™•์ธ
  • ๋ฉ”๋ชจ๋ฆฌ ๋ถ„์„: SungDB MCP๋กœ C ํ”„๋กœ์ ํŠธ์™€ ๋™์ผํ•œ ๋ถ„์„ ๋ฐฉ๋ฒ•๋ก  ์ ์šฉ ๊ฐ€๋Šฅ
  • ์ตœ์ ํ™” ๋ฌธ์ œ: Rust์˜ zero-cost abstraction์œผ๋กœ ์ธํ•œ ์ฝ”๋“œ ์ตœ์ ํ™” ํŠน์„ฑ

๐Ÿงช ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ

SungDB MCP ๊ฒ€์ฆ ๊ฒฐ๊ณผ

๊ธฐ๋Šฅ ์ƒํƒœ ์„ค๋ช…
์„ธ์…˜ ๊ด€๋ฆฌ โœ… gdb_start, gdb_terminate ์ •์ƒ
๋ฐ”์ด๋„ˆ๋ฆฌ ๋กœ๋“œ โœ… ELF ํŒŒ์ผ ๋กœ๋“œ ์„ฑ๊ณต
์•„ํ‚คํ…์ฒ˜ ์„ค์ • โœ… ARMv8-M.main ์„ค์ • ์™„๋ฃŒ
๋ฉ”๋ชจ๋ฆฌ ๋ถ„์„ โœ… examine, info files ์ •์ƒ
ํ•จ์ˆ˜ ์ถ”์  โœ… print, info functions ์ •์ƒ

๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ ๊ฒ€์ฆ

  • โœ… TEXT ์˜์—ญ: ํ•จ์ˆ˜๋“ค์ด FLASH(0x10000000~)์— ๋ฐฐ์น˜
  • โœ… RODATA ์˜์—ญ: ์ƒ์ˆ˜๋“ค์ด FLASH์— ์ €์žฅ
  • โœ… STACK ์˜์—ญ: RAM ์ตœ์ƒ์œ„(0x10080000)์—์„œ ํ•˜ํ–ฅ ์„ฑ์žฅ
  • โš ๏ธ DATA/BSS: ์ „์—ญ ๋ณ€์ˆ˜ ์—†์Œ์œผ๋กœ ๋นˆ ์„น์…˜
  • โš ๏ธ HEAP: ํ˜„์žฌ ๋ฏธ์‚ฌ์šฉ (heapless ์‚ฌ์šฉ)

๐Ÿ› ์•Œ๋ ค์ง„ ๋ฌธ์ œ ๋ฐ ํ•ด๊ฒฐ ๋ฐฉ์•ˆ

๋ฌธ์ œ 1: ์‹คํ–‰ ๊ฐ€๋Šฅ ์ฝ”๋“œ ์„น์…˜ ๋ถ€์žฌ

# ํ˜„์žฌ ์ƒํƒœ
$ arm-none-eabi-objdump -h target/thumbv8m.main-none-eabihf/release/main
# โ†’ .text ์„น์…˜ ์—†์Œ, ๋””๋ฒ„๊ทธ ์ •๋ณด๋งŒ ์กด์žฌ

# ํ•ด๊ฒฐ ๋ฐฉ์•ˆ
# 1. ๋ง์ปค ์Šคํฌ๋ฆฝํŠธ ์ˆ˜์ •
# 2. ์‹ค์ œ ํ•˜๋“œ์›จ์–ด ์ ‘๊ทผ ์ฝ”๋“œ ์ถ”๊ฐ€
# 3. ์ปดํŒŒ์ผ๋Ÿฌ ์ตœ์ ํ™” ์„ค์ • ์กฐ์ •

๋ฌธ์ œ 2: ์ฃผ์†Œ 0x00000000 ๋งคํ•‘

// ํ•ด๊ฒฐ ๋ฐฉ์•ˆ
#[no_mangle]
pub extern "C" fn main() -> ! {
    // ์‹ค์ œ ํ•˜๋“œ์›จ์–ด ๋ ˆ์ง€์Šคํ„ฐ ์ ‘๊ทผ ์ถ”๊ฐ€
    unsafe { 
        core::ptr::write_volatile(0x4000_0000 as *mut u32, 0x1234);
    }
    loop {}
}

๐Ÿ”ฎ ํ–ฅํ›„ ๊ณ„ํš

๋‹จ๊ธฐ ๋ชฉํ‘œ

  • ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ Rust ๋ฐ”์ด๋„ˆ๋ฆฌ ์ƒ์„ฑ
  • ์‹ค์ œ ํ•˜๋“œ์›จ์–ด ์ฃผ๋ณ€์žฅ์น˜ ์ œ์–ด ์ฝ”๋“œ ์ถ”๊ฐ€
  • QEMU ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ ํ…Œ์ŠคํŠธ

์ค‘๊ธฐ ๋ชฉํ‘œ

  • ์ธํ„ฐ๋ŸฝํŠธ ํ•ธ๋“ค๋Ÿฌ ๊ตฌํ˜„
  • ํƒ€์ด๋จธ ๋ฐ GPIO ์ œ์–ด
  • RTOS ๊ธฐ๋ฐ˜ ๋ฉ€ํ‹ฐํƒœ์Šคํ‚น

์žฅ๊ธฐ ๋ชฉํ‘œ

  • USB ํ†ต์‹  ๊ตฌํ˜„
  • ๋ฌด์„  ํ†ต์‹  ๋ชจ๋“ˆ ์—ฐ๋™
  • OTA(Over-The-Air) ์—…๋ฐ์ดํŠธ

๐Ÿค ๊ธฐ์—ฌํ•˜๊ธฐ

  1. ์ด ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ Fork
  2. ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ (git checkout -b feature/amazing-feature)
  3. ๋ณ€๊ฒฝ์‚ฌํ•ญ ์ปค๋ฐ‹ (git commit -m 'Add amazing feature')
  4. ๋ธŒ๋žœ์น˜์— Push (git push origin feature/amazing-feature)
  5. Pull Request ์ƒ์„ฑ

๐Ÿ“š ์ฐธ๊ณ  ์ž๋ฃŒ

๊ณต์‹ ๋ฌธ์„œ

๋„๊ตฌ ๋ฐ ํฌ๋ ˆ์ดํŠธ

  • SungDB MCP - FastMCP ๊ธฐ๋ฐ˜ GDB ์„œ๋ฒ„
  • cortex-m - ARM Cortex-M ํ•˜๋“œ์›จ์–ด ์ถ”์ƒํ™”
  • heapless - ํž™ ์—†๋Š” ์ปฌ๋ ‰์…˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

๊ด€๋ จ ํ”„๋กœ์ ํŠธ

๐Ÿ“„ ๋ผ์ด์„ผ์Šค

์ด ํ”„๋กœ์ ํŠธ๋Š” MIT ๋ผ์ด์„ผ์Šค ํ•˜์— ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ LICENSE ํŒŒ์ผ์„ ์ฐธ์กฐํ•˜์„ธ์š”.


๐Ÿ”ฌ ๊ฐœ๋ฐœ์ž: SungDB MCP Team
๐Ÿ“… ์ƒ์„ฑ์ผ: 2024๋…„ 12์›” 4์ผ
๐Ÿ—๏ธ ์•„ํ‚คํ…์ฒ˜: ARM Cortex-M33 (ARMv8-M.main)
๐Ÿฆ€ ์–ธ์–ด: Rust 1.89.0


About

๐Ÿฆ€ ARM Cortex-M33 Rust embedded project with comprehensive memory analysis using SungDB MCP. Features Hello World, context switching, clock control, and detailed memory layout verification.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published