Slide 1

Slide 1 text

try! Swi! Embedded with Raspberry Pi Pico Swi! Expands! #2 yochidros (Yoshiki Miyazawa)

Slide 2

Slide 2 text

Who am I? Name => yochidros Job => So!ware Engineer Company => bitkey (2024/01 ~ ) X => Github => https://x.com/yochidros https://github.com/yochidros

Slide 3

Slide 3 text

https://www.swi!.org/blog/embedded-swi!-examples/

Slide 4

Slide 4 text

΍ͬͯΈΔ

Slide 5

Slide 5 text

1. ϥεύΠ picoΛങ͏ (792ԁ) • 2. swi! snapshot൛ΛΠϯετʔϧ 3. GCC ARM ToolchainͷΠϯετʔϧ • 4. pico-sdkͷμ΢ϯϩʔυ • 5. swi!-embeded-examplesͷμ΢ϯϩʔυ • https://www.switch-science.com/products/6900 https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads https://github.com/raspberrypi/pico-sdk https://github.com/apple/swi!-embedded-examples ※ɹswi! snapshot version: org.swi!.59202404131a (4/13)

Slide 6

Slide 6 text

0:00 / 0:09

Slide 7

Slide 7 text

swi! ͰϥζύΠಈ͍ͨ!

Slide 8

Slide 8 text

add_executable(swift-blinky)

Slide 9

Slide 9 text

add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/_swiftcode.o

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

Arm Cortex-M0+ → ARMv6-M COMMAND ${SWIFTC} -target armv6m-none-none-eabi

Slide 12

Slide 12 text

• -mfloat-abi=soft : gccͷ੔਺ԋࢉͰුಈখ਺఺ԋࢉΛ ΤϛϡϨʔτ • -fshort-enums:ɹenumͷαΠζΛͪΐ͏ͲΑ͘͢Δ -Xcc -mfloat-abi=soft -Xcc -fshort-enums

Slide 13

Slide 13 text

• -function-sections : ηΫγϣϯ͝ͱʹؔ਺Λग़ྗ • -enable-experimental-feature Embedded:ɹswi! embedded mode • -wmo: ࠷దԽ • -parse-as-library: ϥΠϒϥϦͱͯ͠ղੳ -Xfrontend -function-sections -enable-experimental-feature Embedded -wmo -parse-as-library

Slide 14

Slide 14 text

`$\( echo '$`' | tr '\;' '\\n' `$\( echo '$`{CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES}' | tr ' ' '\\n' -import-bridging-header ${CMAKE_CURRENT_LIST_DIR}/BridgingHeader.h ${CMAKE_CURRENT_LIST_DIR}/Main.swift -c -o ${CMAKE_CURRENT_BINARY_DIR}/_swiftcode.o

Slide 15

Slide 15 text

@main struct Main { static func main() { // PICO_DEFAULT_LED_PIN = GP25 let led = UInt32(PICO_DEFAULT_LED_PIN) gpio_init(led) // gpio番号を初期化 gpio_set_dir(led, /*out*/true) // 出力に設定 while true { gpio_put(led, true) // high sleep_ms(250) gpio_put(led, false) // low sleep_ms(250) } } }

Slide 16

Slide 16 text

https://github.com/apple/swi!-embedded-examples? tab=readme-ov-file#community-examples

Slide 17

Slide 17 text

੍໿͕͋Δ • printؔ਺͕StaticStringͱIntegerͷΈαϙʔτ • String (։ൃத) • Existential • Weak/ unowned reference • VarArgs • Swi! Concurrency (Single thread modeͷΈactor,task͕ར༻Մ ೳ) • heap allocation͕ར༻Ͱ͖ͳ͍৔߹ ▪ Class, Array, Dictionary ▪ function capture https://github.com/apple/swi!/blob/main/docs/EmbeddedSwi!/EmbeddedSwi!Status.md

Slide 18

Slide 18 text

pico, pico-w atomicؔ਺͕llvmͱgccͰҰக͠ͳ͍ error: ld returned 1 exit status ... arm-none-eabi/bin/ld: _swiftcode.o: in function `$ss10swi...` undefined reference to `__atomic_load_4' undefined reference to `__atomic_fetch_add_4' undefined reference to `__atomic_fetch_sub_4' undefined reference to `__atomic_compare_exchange_4' undefined reference to `__atomic_store_4'

Slide 19

Slide 19 text

Wrap up • swi! embedded͕೤͍ • experimental&։ൃதͷͨΊར༻Ͱ͖Δػೳ͕ ݶΒΕΔ • c/c++ ͷinterop΋ར༻Ͱ͖ΔͷͰطଘͷc/c++ࢿ ࢈Λར༻Ͱ͖Δ

Slide 20

Slide 20 text

https://github.com/apple/swi!/tree/main/docs/EmbeddedSwi!

Slide 21

Slide 21 text

FIN