PaulStoffregen / OneWire

Library for Dallas/Maxim 1-Wire Chips
http://www.pjrc.com/teensy/td_libs_OneWire.html
579 stars 382 forks source link

ESP32 compile error #49

Closed lefedor closed 6 years ago

lefedor commented 6 years ago

Hello, have build error on esp32, attaching log:

` Arduino: 1.8.5 (Linux), Board: "Node32s, 80MHz, 921600"

In file included from /home/lefedor/Arduino/libraries/OneWire-master/OneWire.cpp:143:0: /home/lefedor/Arduino/libraries/OneWire-master/util/OneWire_direct_gpio.h: In function 'uint32_t directRead(uint32_t)': /home/lefedor/Arduino/libraries/OneWire-master/util/OneWire_direct_gpio.h:111:13: error: redefinition of 'uint32_t directRead(uint32_t)' IO_REG_TYPE directRead(IO_REG_TYPE pin) ^ In file included from /home/lefedor/Arduino/libraries/OneWire-master/OneWire.h:60:0, from /home/lefedor/Arduino/libraries/OneWire-master/OneWire.cpp:142: /home/lefedor/Arduino/libraries/OneWire-master/util/OneWire_direct_gpio.h:111:13: note: 'uint32_t directRead(uint32_t)' previously defined here IO_REG_TYPE directRead(IO_REG_TYPE pin) ^ In file included from /home/lefedor/Arduino/libraries/OneWire-master/OneWire.cpp:143:0: /home/lefedor/Arduino/libraries/OneWire-master/util/OneWire_direct_gpio.h: In function 'void directWriteLow(uint32_t)': /home/lefedor/Arduino/libraries/OneWire-master/util/OneWire_direct_gpio.h:122:6: error: redefinition of 'void directWriteLow(uint32_t)' void directWriteLow(IO_REG_TYPE pin) ^ In file included from /home/lefedor/Arduino/libraries/OneWire-master/OneWire.h:60:0, from /home/lefedor/Arduino/libraries/OneWire-master/OneWire.cpp:142: /home/lefedor/Arduino/libraries/OneWire-master/util/OneWire_direct_gpio.h:122:6: note: 'void directWriteLow(uint32_t)' previously defined here void directWriteLow(IO_REG_TYPE pin) ^ In file included from /home/lefedor/Arduino/libraries/OneWire-master/OneWire.cpp:143:0: /home/lefedor/Arduino/libraries/OneWire-master/util/OneWire_direct_gpio.h: In function 'void directWriteHigh(uint32_t)': /home/lefedor/Arduino/libraries/OneWire-master/util/OneWire_direct_gpio.h:131:6: error: redefinition of 'void directWriteHigh(uint32_t)' void directWriteHigh(IO_REG_TYPE pin) ^ In file included from /home/lefedor/Arduino/libraries/OneWire-master/OneWire.h:60:0, from /home/lefedor/Arduino/libraries/OneWire-master/OneWire.cpp:142: /home/lefedor/Arduino/libraries/OneWire-master/util/OneWire_direct_gpio.h:131:6: note: 'void directWriteHigh(uint32_t)' previously defined here void directWriteHigh(IO_REG_TYPE pin) ^ In file included from /home/lefedor/Arduino/libraries/OneWire-master/OneWire.cpp:143:0: /home/lefedor/Arduino/libraries/OneWire-master/util/OneWire_direct_gpio.h: In function 'void directModeInput(uint32_t)': /home/lefedor/Arduino/libraries/OneWire-master/util/OneWire_direct_gpio.h:140:6: error: redefinition of 'void directModeInput(uint32_t)' void directModeInput(IO_REG_TYPE pin) ^ In file included from /home/lefedor/Arduino/libraries/OneWire-master/OneWire.h:60:0, from /home/lefedor/Arduino/libraries/OneWire-master/OneWire.cpp:142: /home/lefedor/Arduino/libraries/OneWire-master/util/OneWire_direct_gpio.h:140:6: note: 'void directModeInput(uint32_t)' previously defined here void directModeInput(IO_REG_TYPE pin) ^ In file included from /home/lefedor/Arduino/libraries/OneWire-master/OneWire.cpp:143:0: /home/lefedor/Arduino/libraries/OneWire-master/util/OneWire_direct_gpio.h: In function 'void directModeOutput(uint32_t)': /home/lefedor/Arduino/libraries/OneWire-master/util/OneWire_direct_gpio.h:168:6: error: redefinition of 'void directModeOutput(uint32_t)' void directModeOutput(IO_REG_TYPE pin) ^ In file included from /home/lefedor/Arduino/libraries/OneWire-master/OneWire.h:60:0, from /home/lefedor/Arduino/libraries/OneWire-master/OneWire.cpp:142: /home/lefedor/Arduino/libraries/OneWire-master/util/OneWire_direct_gpio.h:168:6: note: 'void directModeOutput(uint32_t)' previously defined here void directModeOutput(IO_REG_TYPE pin) ^ Error compiling for board Node32s.

This report would have more information with "Show verbose output during compilation" option enabled in File -> Preferences.

`

PaulStoffregen commented 6 years ago

Perhaps you extracted a new ZIP file without deleting the old folder, resulting in a mixture of new and old code?

lefedor commented 6 years ago

No, it's not that case i've checked of cource, and rechecked today. If I delete folder there is no OneWire.h found error.

It compiles fine with this version i've found from last commit: https://github.com/stickbreaker/OneWire

It not compiles with actual repo for esp32.

lefedor commented 6 years ago

I see there are two inclusions for the #include "util/OneWire_direct_gpio.h" in both OneWire.h and OneWire.cpp - could be it's re-declarations are the reason for error?

ghost commented 6 years ago

Same issue here with ESP32 (generic card profile) compilation. It seems that the #def and #undef "strange game" of OneWire_direct_gpio.h make compiler confused! This compiler issue appear in your commit f54f2a 'Move direct I/O macros, prevent leaking to Arduino sketches'

I'm really interested to test it on my ESP32. V2.3.3 is working with a Dallas oneWire sensor but fail if I add a BMP280 on I2C connected to the board. With another I2C, SPI (I have also LCM1602I2C, SSD1306I2C and MAX6675SPI running in the sketch) it is OK. I use Adafruit_BMP280 library, I've to test SparkFun_BME280 if behaviour is different.

ghost commented 6 years ago

I prepare a pull request to resolve compilation error. Undef was a bad idea, or why ?, true and false do the job why TRUE/FALSE to define ? #pragma once is one define/ifdef less...

lefedor commented 6 years ago

I use bme280 over i2c in current project it works fine together with 18b20 at https://github.com/milesburton/Arduino-Temperature-Control-Library + https://github.com/stickbreaker/OneWire library combo variant.

ghost commented 6 years ago

@lefedor Thank you for the advise My conflict is (with ESP32 board) between DALLAS over ONEWIRE and BME280 over I2C. I think @stickbreaker mod are "pull requested" to @PaulStoffregen repo. I prefer follow @PaulStoffregen code which is the arduino library reference and is in phase to correct a wifi ESP32 issue I'm also interested in.

PaulStoffregen commented 6 years ago

fixed https://github.com/PaulStoffregen/OneWire/commit/9e08f4e43eadae975a321c323b85b8d1ddc7aa4a