Go Down

Topic: [résolu] 2 libraries utilisées: Conflit PSTR ? (Read 2 times) previous topic - next topic

tochinet

Il y a un autre moyen à mon avis : définis 2 PSTR : tu changes les définitions par exemple en PSTRE pour EtherCard et PSTRR pour RF24.  Puis dans le sketch tout ce qui a trait à EtherCard tu utilises PSTRE et pour RF24 PSTRR. Comme ce sont des macros, de toute façon à la compilation c'est remplacé par autre chose.

Pour les chaines de caractère, je crois qu'on de doit pas forcément mettre les "\" de continuation. Ce n'est nécessaire que à l'intérieur de #define etc. Sinon, les retours lignes sont traités comme du "whitespace" normal.

atlas2003

Bonsoir

Merci pour vos réponses.
J'ai essayé dans la library RF24 de remplacer tous les PSTR par PSTR2 et laisser tel quel dans la librarie ethercard mais ca ne fonctionne pas. Ca me fait plein d'erreur comme par exemple l'objet SPI qui est indéfini (??)
Mais j'ai l'impression que ce doit forcement être PSTR car cela decoule du fichier "avr/pgmspace.h"

Je vais faire le prototype minimum.
Merci beaucoup!

atlas2003

Ok, pour faire un prototype le plus simple qui ne fonctionne pas, c'est très simple

Il faut installer les deux librairies:
RF24
https://github.com/maniacbug/RF24/archive/master.zip
Et Ethercard
https://github.com/jcw/ethercard/archive/master.zip

Ensuite, dans les exemple fournit avec Ethercard, il y a pachube.ino

Si on compile comme cela, ça fonctionne, mais dès qu'on ajoute l'inclusion de RF24 (#include <RF24.h>), ca ne fonctionne plus

L'exemple complet AVEC l'inclusion de rf24:

Code: [Select]
// Simple demo for feeding some random data to Pachube.
// 2011-07-08 <jc@wippler.nl> http://opensource.org/licenses/mit-license.php

#include <EtherCard.h>
#include <RF24.h>   // L'INCLUSION QUI PAUSE PROBLEME !!!!!!!!!!!!

// change these settings to match your own setup
#define FEED    "5942"
#define APIKEY  "bXkPFCiYm57f7flLyD86bm0HK3TXsfuQF-Jeyh3HeMg"

// ethernet interface mac address, must be unique on the LAN
byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };

char website[] PROGMEM = "api.pachube.com";

byte Ethernet::buffer[700];
uint32_t timer;
Stash stash;

void setup () {
  Serial.begin(57600);
  Serial.println("\n[webClient]");

  if (ether.begin(sizeof Ethernet::buffer, mymac) == 0)
    Serial.println( "Failed to access Ethernet controller");
  if (!ether.dhcpSetup())
    Serial.println("DHCP failed");

  ether.printIp("IP:  ", ether.myip);
  ether.printIp("GW:  ", ether.gwip); 
  ether.printIp("DNS: ", ether.dnsip); 

  if (!ether.dnsLookup(website))
    Serial.println("DNS failed");
   
  ether.printIp("SRV: ", ether.hisip);
}

void loop () {
  ether.packetLoop(ether.packetReceive());
 
  if (millis() > timer) {
    timer = millis() + 10000;
   
    // generate two fake values as payload - by using a separate stash,
    // we can determine the size of the generated message ahead of time
    byte sd = stash.create();
    stash.print("0,");
    stash.println((word) millis() / 123);
    stash.print("1,");
    stash.println((word) micros() / 456);
    stash.save();
   
    // generate the header with payload - note that the stash size is used,
    // and that a "stash descriptor" is passed in as argument using "$H"
    Stash::prepare(PSTR("PUT http://$F/v2/feeds/$F.csv HTTP/1.0" "\r\n"
                        "Host: $F" "\r\n"
                        "X-PachubeApiKey: $F" "\r\n"
                        "Content-Length: $D" "\r\n"
                        "\r\n"
                        "$H"),
            website, PSTR(FEED), website, PSTR(APIKEY), stash.size(), sd);

    // send the packet - this also releases all stash buffers once done
    ether.tcpSend();
  }
}


Et ce que cela renvoit:

Code: [Select]
pachube:62: error: __c causes a section type conflict
pachube:62: error: __c causes a section type conflict
pachube:56: error: __c causes a section type conflict



Je vous remercis vraiment beaucoup. Si j'arrive a être "decoincé", ça va être la fête :)

barbudor

Problème reproduit, simulé mais pas entièrement compris.

1) Dans ton INO, ajouter #include <SPI.h> avant Ethercard et RF24
Code: [Select]
#include <SPI.h>
#include <EtherCard.h>
#include <RF24.h>


2) Dans RF24_config.h remplacer #if 1 par #if 0
Code: [Select]
// Avoid spurious warnings
#if 0
#if ! defined( NATIVE ) && defined( ARDUINO )
#undef PROGMEM
#define PROGMEM __attribute__(( section(".progmem.data") ))
#undef PSTR
#define PSTR(s) (__extension__({static const char __c[] PROGMEM = (s); &__c[0];}))
#endif
#endif


Mais je ne comprend pas à la base le conflit créé
Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

atlas2003

Ok

Est ce que tu veux dire qu'en faisant cela, tu as résolu le conflit? Je ne suis pas sur de comprendre.
De mon coté je viens d'essayer et malheureusement ça me créer d'autre erreur que voici:

Code: [Select]
/home/nicolas/arduino-1.0.2/libraries/RF24/RF24.cpp: In member function 'void RF24::csn(int)':
/home/nicolas/arduino-1.0.2/libraries/RF24/RF24.cpp:22: error: 'SPI' was not declared in this scope
/home/nicolas/arduino-1.0.2/libraries/RF24/RF24.cpp:23: error: 'SPI_MODE0' was not declared in this scope
/home/nicolas/arduino-1.0.2/libraries/RF24/RF24.cpp:24: error: 'SPI_CLOCK_DIV4' was not declared in this scope
/home/nicolas/arduino-1.0.2/libraries/RF24/RF24.cpp: In member function 'uint8_t RF24::read_register(uint8_t, uint8_t*, uint8_t)':
/home/nicolas/arduino-1.0.2/libraries/RF24/RF24.cpp:43: error: 'SPI' was not declared in this scope
/home/nicolas/arduino-1.0.2/libraries/RF24/RF24.cpp: In member function 'uint8_t RF24::read_register(uint8_t)':
/home/nicolas/arduino-1.0.2/libraries/RF24/RF24.cpp:57: error: 'SPI' was not declared in this scope
/home/nicolas/arduino-1.0.2/libraries/RF24/RF24.cpp: In member function 'uint8_t RF24::write_register(uint8_t, const uint8_t*, uint8_t)':
/home/nicolas/arduino-1.0.2/libraries/RF24/RF24.cpp:71: error: 'SPI' was not declared in this scope
/home/nicolas/arduino-1.0.2/libraries/RF24/RF24.cpp: In member function 'uint8_t RF24::write_register(uint8_t, uint8_t)':
/home/nicolas/arduino-1.0.2/libraries/RF24/RF24.cpp:89: error: 'SPI' was not declared in this scope
/home/nicolas/arduino-1.0.2/libraries/RF24/RF24.cpp: In member function 'uint8_t RF24::write_payload(const void*, uint8_t)':
/home/nicolas/arduino-1.0.2/libraries/RF24/RF24.cpp:110: error: 'SPI' was not declared in this scope
/home/nicolas/arduino-1.0.2/libraries/RF24/RF24.cpp: In member function 'uint8_t RF24::read_payload(void*, uint8_t)':
/home/nicolas/arduino-1.0.2/libraries/RF24/RF24.cpp:133: error: 'SPI' was not declared in this scope
/home/nicolas/arduino-1.0.2/libraries/RF24/RF24.cpp: In member function 'uint8_t RF24::flush_rx()':
/home/nicolas/arduino-1.0.2/libraries/RF24/RF24.cpp:150: error: 'SPI' was not declared in this scope
/home/nicolas/arduino-1.0.2/libraries/RF24/RF24.cpp: In member function 'uint8_t RF24::flush_tx()':
/home/nicolas/arduino-1.0.2/libraries/RF24/RF24.cpp:163: error: 'SPI' was not declared in this scope
/home/nicolas/arduino-1.0.2/libraries/RF24/RF24.cpp: In member function 'uint8_t RF24::get_status()':
/home/nicolas/arduino-1.0.2/libraries/RF24/RF24.cpp:176: error: 'SPI' was not declared in this scope
/home/nicolas/arduino-1.0.2/libraries/RF24/RF24.cpp: In member function 'void RF24::begin()':
/home/nicolas/arduino-1.0.2/libraries/RF24/RF24.cpp:340: error: 'SPI' was not declared in this scope
/home/nicolas/arduino-1.0.2/libraries/RF24/RF24.cpp: In member function 'uint8_t RF24::getDynamicPayloadSize()':
/home/nicolas/arduino-1.0.2/libraries/RF24/RF24.cpp:529: error: 'SPI' was not declared in this scope
/home/nicolas/arduino-1.0.2/libraries/RF24/RF24.cpp: In member function 'void RF24::toggle_features()':
/home/nicolas/arduino-1.0.2/libraries/RF24/RF24.cpp:661: error: 'SPI' was not declared in this scope
/home/nicolas/arduino-1.0.2/libraries/RF24/RF24.cpp: In member function 'void RF24::writeAckPayload(uint8_t, const void*, uint8_t)':
/home/nicolas/arduino-1.0.2/libraries/RF24/RF24.cpp:726: error: 'SPI' was not declared in this scope


Je ne comprend vraiment pas. Surtout que j'ai bien ajouté le include spi au tout debut

Go Up