Zig × Arduino Uno에서 L 치카 시리얼 통신을 확인할 수있는 건

안녕하세요. 항상 감사합니다.
이 기사는 【Zig 언어로 Arduino UNO의 L치카 시리얼 통신을 확인할 수 있었다】라는 기사입니다.

지그



Zig에 대해서는 이쪽을 부디.
htps : //지 gぁg. 오 rg

기본 소스 코드



여기 소스 코드로 확인했습니다.

하드웨어 확인 환경



Arduino UNO

소프트웨어 확인 환경



이 master 릴리스 2021-04-20 버전을 사용했습니다.

호스트 PC는 Mac이므로 [zig-macos-x86_64-0.8.0-dev.1983+e2cc02717.tar.xz]를 다운로드했습니다.

환경 구축



다운로드한 Zig 컴파일러를 압축 해제하고 경로를 추가합니다.
echo "export PATH=/Users/k-abe/zig-macos-x86_64-0.8.0-dev.1983+e2cc02717/zig:\$PATH" >> ~/.bash_profile

경로를 로드합니다.
source ~/.bash_profile

zig 컴파일러에 경로가 있는지 확인합니다.
KojinoMacBook-2:~ k-abe$ zig version
0.8.0-dev.1983+e2cc02717

다운로드한 버전과 같은 버전을 읽을 수 있었으므로 패스는 통과했습니다.

빌드



기본 소스 코드의 디렉토리로 이동하고 (build.zig가있는 계층 구조로 이동) 빌드합니다.
KojinoMacBook-2:~ k-abe$ cd /Users/k-abe/Documents/zig_work/avr-arduino-zig/
KojinoMacBook-2:avr-arduino-zig k-abe$ zig build
KojinoMacBook-2:avr-arduino-zig k-abe$ ls
LICENSE     README.md   build.zig   src     zig-cache

zig-cache 디렉토리 아래에 elf 파일이 출력됩니다.



출력된 파일을 file 명령으로 확인해 봅니다.

그래. elf 파일이군요.
KojinoMacBook-2:avr-arduino-zig k-abe$ file /Users/k-abe/Documents/zig_work/avr-arduino-zig/zig-cache/bin/avr-arduino-zig
/Users/k-abe/Documents/zig_work/avr-arduino-zig/zig-cache/bin/avr-arduino-zig: ELF 32-bit LSB executable, Atmel AVR 8-bit, version 1 (SYSV), statically linked, with debug_info, not stripped

쓰기



elf 파일이 생겼으므로 Arduino UNO에 쓰고 동작을 확인해 보겠습니다.

Arduino UNO와 PC를 USB 케이블로 연결합니다.

쓰기시에 필요하므로 디바이스명을 아래의 커맨드로 취득합니다.
KojinoMacBook-2:avr-arduino-zig k-abe$ ls /dev/cu.usb*
/dev/cu.usbmodem141401

쓰기 도구 avrdude에서 씁니다.
KojinoMacBook-2:avr-arduino-zig k-abe$ avrdude -patmega328p -carduino -P/dev/cu.usbmodem141401 -b115200 -D -Uflash:w:/Users/k-abe/Documents/zig_work/avr-arduino-zig/zig-cache/bin/avr-arduino-zig:e

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude: Device signature = 0x1e950f (probably m328p)
avrdude: reading input file "/Users/k-abe/Documents/zig_work/avr-arduino-zig/zig-cache/bin/avr-arduino-zig"
avrdude: writing flash (1048 bytes):

Writing | ################################################## | 100% 0.18s

avrdude: 1048 bytes of flash written
avrdude: verifying flash memory against /Users/k-abe/Documents/zig_work/avr-arduino-zig/zig-cache/bin/avr-arduino-zig:
avrdude: load data flash data from input file /Users/k-abe/Documents/zig_work/avr-arduino-zig/zig-cache/bin/avr-arduino-zig:
avrdude: input file /Users/k-abe/Documents/zig_work/avr-arduino-zig/zig-cache/bin/avr-arduino-zig contains 1048 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 0.15s

avrdude: verifying ...
avrdude: 1048 bytes of flash verified

avrdude: safemode: Fuses OK (E:00, H:00, L:00)

avrdude done.  Thank you.

정상적으로 쓸 수 있었기 때문에 동작 확인해 보겠습니다.

동작 확인



기본 소스 코드는 L 치카와 직렬 데이터 전송을 수행합니다.

시리얼 터미널에서 Arduino에 연결합니다. 시리얼 터미널은 minicom을 사용했습니다. 비트율은 115200을 지정합니다.
KojinoMacBook-2:avr-arduino-zig k-abe$ minicom -D /dev/cu.usbmodem141401 -b 115200



기동시의 시리얼 메세지,!로부터 ~까지의 ASCII코드, L치카를 확인할 수 있었습니다.

확인 내용과 소스 코드/src/main.zig의 처리 내용이 동일한 것을 확인할 수 있었습니다.

감상



Zig Arduino UNO에서도 L 치카 시리얼 통신을 확인할 수있었습니다.
최근에는 Rust 학습을 시작한 적도 있고 Rust의 코드를 많이 보고 있었습니다만 아래가 다르다고 생각했습니다.
  • 메모리 관리

  • Zig의 기본 소스 코드는 main 함수 내에서 전역 변수 ch를 증가시키고 직렬 데이터로 전송합니다.
    Rust에서는 전역 변수를 unsafe로 묶지 않으면 빌드 오류가 발생했습니다.
    Zig는 Rust만큼 메모리 관리에 엄밀하지 않다고 생각했습니다.
    좋은지 나쁜지는 두고, Zig는 C 언어 경험자가 그다지 위화감 없이 사용할 수 있고 배울 수 있을지도 모른다고 생각했습니다.

    임베디드 개발 현장에서 프로그래밍 언어의 선택사항이 늘어나 프로젝트·제품·개발 스타일(신규?파생?)에 의해 최적인 선정이 이루어지면 된다고 생각합니다.

    끝까지 읽어 주셔서 감사합니다.

    좋은 웹페이지 즐겨찾기