I2C 용 Wire 라이브러리의 대안

Wire 라이브러리. Wire는 매우 잘 작동하지만 I2C 마스터로 작동하려면 Arduino 만 필요하며 Wire 라이브러리는 리소스 :

내 목표는 데이터를 한꺼번에 전송하는 것입니다 (예 : 32 또는 64 바이트). 이 데이터는 이미 SRAM의 어레이에 있습니다. 이제 Wire 라이브러리를 사용할 때 데이터를 두 번째 버퍼로 복사하는 TwoWire::write 함수를 호출합니다. 그 후 WireTWI 라이브러리를 사용합니다. 여기서 twi_writeTo는 데이터를 다시 세 번째 버퍼. “조금 투박하지 않습니까?

DSSCircuits / I2C-Master-Library 를 본 적이 있지만 확실하지 않습니다 현재 3 년이 된 초기 커밋 이후에 커밋이 없었기 때문에 얼마나 성숙했는지.

댓글

  • 실제로 보유하고 있습니까? 램 사용 문제? 문제가되기 전에 무언가를 최적화하는 것은 종종 낭비되는 노력입니다.
  • 모든 것이 및 / 또는 휴대용으로 최적 적으로 작동하도록 만들고 싶습니다. 물론 ATmega 프로그래머 ' 설명서를 받아 주변 장치에 쓸 수 있습니다. 등록합니다.
  • dsscircuits ' Arduino I2C 마스터 라이브러리 웹 페이지에는 I2C의 5 개 버전이 표시됩니다. github 링크가있는 라이브러리입니다. 염두에두고있는 개정판의 시작점 일 것입니다. Wire가 2012 년 1 월 이후 수정 사항이있는 경우 I2C에 추가해야합니다.
  • > I2C 용 Wire 라이브러리의 대안은 직접 작성합니다. i2c는 처음부터 작성하기 쉬운 프로토콜 중 하나입니다.

답변

이의가 없습니다. DSS 회로 I2C 마스터 라이브러리 를 사용하는 것입니다.

몇 년 동안 업데이트되지 않았을 수 있지만 작동하면 작동하지 않습니다. ” 그럴 필요가 없습니다. 마이크로 컨트롤러 용 라이브러리가 새로운 프린터 드라이버, 비디오 드라이버 등을 지원해야하는 것과는 다릅니다.

작동하면 작동합니다.

칩은 변경되지 않았습니다. , 그리고 요즘 업데이트의 유일한 실제 이유는 IDE가 컴파일 오류를 일으키는 방식으로 변경 (또는 컴파일러 변경)하는 경우입니다. 예를 들어, PROGMEM과 같은 일이 더 엄격한 규칙을 갖는 등 최근에 이러한 일이 발생했습니다.

댓글

  • 이 라이브러리는 매우 유망 해 보였지만 실제로는 그렇습니다. AVR 타겟 만 지원합니다. Arduino 코어는 다양한 아키텍처 용으로 개발되었으므로이 라이브러리는 " 모든 Arduino 호환 보드에서 " 작동하지 않습니다. 예를 들어 Adafruit '의 STM32F405 기반 Feather

Answer 호환되지 않습니다 . / h2>

또한 Procyon AVR 라이브러리 도 확인할 가치가 있습니다. 지금은 조금 낡았지만 매우 전문적이고 미니멀합니다. 의존성이 많지 않고 I2C 모듈 만 사용하는 것이 좋습니다. 그 이후로 AVR I2C 부분에는 새로운 것이 거의 없습니다.

답변

Cosa TWI 클래스는 I2C 장치 드라이버 지원에 대한 매우 다른 접근 방식입니다. 버퍼에 추가 SRAM을 전혀 사용하지 않습니다. 장치 드라이버가 차단되지 않는 경우 필요한 버퍼링을 처리해야합니다. 또한 Cosa TWI 클래스는 마스터 / 슬레이브, “레지스터 읽기 데이터 쓰기”패턴 및 멀티 스레딩 사용시 트랜잭션과 같은 I2C 장치와의 일반적인 상호 작용을 지원합니다.

소프트웨어 및 하드웨어 Arduino-TWI 라이브러리를 사용할 수 있습니다. Arduino-GPIO 라이브러리를 사용하며 AVR 및 SAM 기반 보드에서 사용할 수 있습니다.

일부 예 : TWI 스캐너 , DS3231 실시간 클록 / 캘린더 , PCF8574가있는 I2C LCD 어댑터 .

답변

더 쉽게 사용하고 일관된 호출을 위해 직접 2 개의 lib를 만들었습니다.

AVR 대상을위한 1 개 :
cI2C

다른 모든 대상 (기본적으로 Wire 라이브러리의 래퍼)에 대해 동일한 기능을 사용하는 경우 :
WireWrapper

둘 다 IDE 라이브러리 관리자 내에서 사용할 수 있습니다.
둘 다 인터럽트를 사용하지 않고 마스터로 작동하며 서로 다른 슬레이브가있는 서로 다른 대상에서 테스트됩니다.
-CI2C 용 UNO, Nano
-Zero, Due & WireWrapper 용 ESP8266

Answer

상위 질문에 대해 완전히 다른 접근 방식을 사용할 수 있습니다.이에 대한 이유를 제시 한 대안을 요청하십시오. 바이너리에서 사용하지 않는 코드를 제거하는 것입니다. 실제로 대체 라이브러리를 사용하지 않고도 사용하지 않는 코드를 제거 할 수 있습니다. 컴파일 된 바이너리에서 사용하지 않는 코드를 제외하도록 컴파일러와 링커에 지시 할 수 있습니다. 컴파일 플래그 만 사용하세요.

CFLAGS += -Wl,-static CFLAGS += -ffunction-sections CFLAGS += -Wl,--gc-sections 

Rach 함수는 자체 섹션에 있습니다.

LDFLAGS += -Wl,-gc-sections 

사용하지 않는 섹션을 제거하는 링커에 -gc-sections 플래그를 보내도록 GCC에 지시합니다. 그리고 짜잔! 사용하지 않는 섹션은 제거됩니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다