changer la taille du buffer de l'UART

Bonjour à tous,
Je me tourne vers vous pour un problème pourtant déjà traité de nombreuses fois.
Je n'arrive pas à changer la taille du buffer de réception de la liaison série !
suite à une ré-installation, impossible de changer la taille malgré mon intervention sur le fichier :
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\HardwareSerial.h ou j'ai bien positionné les définitions de SERIAL_RX_BUFFER_SIZE à 256. Enregistrement, re-démarage de l'IDE Arduino, rebootage du PC, rien n'y fait !
Je suis sous la dernière version IDE 1.8.5 avec une carte UNO
Si quelqu'un pouvait exécuter ce code pour me dire ce que cela donne. Pour moi, j'ai toujours 64 quelque soit les valeurs enregistrées dans le fichier HardwareSerial.h
Merci d'avance
Beroy40

void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);


Serial.print("Taille buffer RX : ");Serial.println(SERIAL_RX_BUFFER_SIZE);
Serial.print("Taille buffer TX : ");Serial.println(SERIAL_TX_BUFFER_SIZE);  
}

void loop() {
  // put your main code here, to run repeatedly:

}

Ce code devrait fonctionner:

#undef SERIAL_RX_BUFFER_SIZE
#define SERIAL_RX_BUFFER_SIZE (256)

#undef SERIAL_TX_BUFFER_SIZE
#define SERIAL_TX_BUFFER_SIZE (256)
void setup() {

Serial.begin(250000);


Serial.print("Taille buffer RX : ");Serial.println(SERIAL_RX_BUFFER_SIZE);
Serial.print("Taille buffer TX : ");Serial.println(SERIAL_TX_BUFFER_SIZE);  
}

void loop() {
 
}

Bonjour,

Peux-tu donner ton "HardwareSerial.h", modifié.
Je soupçonne une erreur.

Bonjour Bilbo83
Merci de ta réponse
j'ai fais ta première manip. En effet, j'ai bien 256 en réponse.
Comme demandé, voici la partie de "HardwareSerial.h", modifié :

/*
  HardwareSerial.h - Hardware serial library for Wiring
  Copyright (c) 2006 Nicholas Zambetti.  All right reserved.

  This library is free software; you can redistribute it and/or
  modify it under the terms of the GNU Lesser General Public
  License as published by the Free Software Foundation; either
  version 2.1 of the License, or (at your option) any later version.

  This library is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  Lesser General Public License for more details.

  You should have received a copy of the GNU Lesser General Public
  License along with this library; if not, write to the Free Software
  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

  Modified 28 September 2010 by Mark Sproul
  Modified 14 August 2012 by Alarus
  Modified 3 December 2013 by Matthijs Kooijman
*/

#ifndef HardwareSerial_h
#define HardwareSerial_h

#include <inttypes.h>

#include "Stream.h"

// Define constants and variables for buffering incoming serial data.  We're
// using a ring buffer (I think), in which head is the index of the location
// to which to write the next incoming character and tail is the index of the
// location from which to read.
// NOTE: a "power of 2" buffer size is reccomended to dramatically
//       optimize all the modulo operations for ring buffers.
// WARNING: When buffer sizes are increased to > 256, the buffer index
// variables are automatically increased in size, but the extra
// atomicity guards needed for that are not implemented. This will
// often work, but occasionally a race condition can occur that makes
// Serial behave erratically. See https://github.com/arduino/Arduino/issues/2405
#if !defined(SERIAL_TX_BUFFER_SIZE)
#if ((RAMEND - RAMSTART) < 1023)
#define SERIAL_TX_BUFFER_SIZE 256
#else
#define SERIAL_TX_BUFFER_SIZE 256
#endif
#endif
#if !defined(SERIAL_RX_BUFFER_SIZE)
#if ((RAMEND - RAMSTART) < 1023)
#define SERIAL_RX_BUFFER_SIZE 256
#else
#define SERIAL_RX_BUFFER_SIZE 256
#endif

A priori, cela parait correct.
Mais je trouve la solution de ard_newbie plus élégante, en conservant le "HardwareSerial.h" d'origine tu risques moins d'avoir de problèmes de mémoire sur un autre projet ne nécessitant pas 256 octets de buffer.

bilbo83:
Mais je trouve la solution de ard_newbie plus élégante, en conservant le "HardwareSerial.h" d'origine tu risques moins d'avoir de problèmes de mémoire sur un autre projet ne nécessitant pas 256 octets de buffer.

Bonjour,

Le seul problème c'est que ça ne modifie pas la taille des buffers puisque le define est modifié après que HardwareSerial a été compilé.

Beroy40:
Si quelqu'un pouvait exécuter ce code pour me dire ce que cela donne. Pour moi, j'ai toujours 64 quelque soit les valeurs enregistrées dans le fichier

Bonjour,

Chez moi pas de problème, si je mets 256, ton programme m'affiche bien 256.

Par contre j'ai été obligé de modifier les autorisations du fichier HardwareSerial.h pour pouvoir le modifier.

Je suis sous win7 et ide 1.8.3

Bonjour Kamill
J'ai bien peur que tu ais raison !
Moi aussi, j'ai du modifier les autorisations d'accès au fichier pour le sauvegarder.
Dans tout les cas, je pense que cela n'est pas normal. J'ai aussi essayé de ré-installer l'IDE arduino : idem, j'ai aussi ré-installé la version 1.8.3 que j'avais auparavant : idem.
Perso, je ne sais plus quoi faire.
Merci à vous tous pour vos contributions.