Buffer Genuino 101

Buenas,

Necesito mandar por el serial port 122 bytes, sin embargo sólo consigo enviar 64 bytes, leyendo la documentación parece que el buffer está limitado.

Sabéis si al genuino 101 se le puede ampliar el buffer al menos a 128 bytes?

Graciaaaas.

Fuera de cualquier función, prueba agregando la siguiente línea:

#define SERIAL_TX_BUFFER_SIZE 128

Nótese que la línea no debe terminar en ;

Puedes ampliar el bufer mas todavía (si lo necesitas y tienes suficiente memoria) por ejemplo

#define SERIAL_TX_BUFFER_SIZE 128
#define SERIAL_TX_BUFFER_SIZE 256

Además puedes hacer que los bufers de TX y de RX sean de distinto tamaño, lo que te permitirá utilizar mejor la memoria disponible cuando tu programa tenga distintas necesidades de transmision y de recepcion

#define SERIAL_TX_BUFFER_SIZE 128
#define SERIAL_RX_BUFFER_SIZE 32

Algo debe pasar porque no se altera nada, no se si hay una limitación física, he cambiado también el archivo HardwareSerial.h

Alguna pista?

gracias

Tendría que ver en los archivos que le dan las definiciones necesarias (Arduino/hardware/arduino). El corazón de un 101 no es un AVR; así que ahí nos cambian las reglas de lo que popularmente conocemos como "Arduino".

Si compilas con el IDE Arduino, usas las librerias Arduino, por lo tanto parece lógico suponer que la funcionalidad se respeta.

Puede ocurrir que la version del IDE que usas no permita esos cambios.

  • versiones anteriores a la 1.6.x (creo recordar) no permiten redimensionar los bufers asignando un tamaño de 64 bytes (si la memoria es mayor de 1024 bytes) a ambos bufers (TX y RX)
  • versiones posteriores permiten ampliar los bufers, y la 1.8.1 permite hacer lo que te comentaba en mi post

Tendras que ver cual es tu version.

Saludos.

Buenas,

Tenía la versión 1.0.5, he instalado la versión 1.07, tras haber tenido que solucionar un problema de permisos, adjunto solución de paso.

AppData\Local\Arduino15\packages\Intel\hardware\arc32\1.0.7

cambiar el archivo platform.txt

from

recipe.hooks.objcopy.preobjcopy.1.pattern=cp -f "{build.path}/{build.project_name}.elf" "{build.path}/../arduino101_sketch.debug.elf"
recipe.hooks.objcopy.preobjcopy.1.pattern.windows=cmd /C copy /y "{build.path}{build.project_name}.elf" "{build.path}..\arduino101_sketch.debug.elf"

to

##recipe.hooks.objcopy.preobjcopy.1.pattern=cp -f "{build.path}/{build.project_name}.elf" "{build.path}/../arduino101_sketch.debug.elf"
##recipe.hooks.objcopy.preobjcopy.1.pattern.windows=cmd /C copy /y "{build.path}{build.project_name}.elf" "{build.path}..\arduino101_sketch.debug.elf

Tras esto compila, y ahora a solucionar el problema del buffer.. en los archivos HardwareSerial.h no viene ningun valor para cambiar el tamaño, viene en RingBuffer.h el cual viene por defecto 256.

Sin embargo en la libreria SoftwareSerial.h viene por defecto 64, lo he cambiado a 128 y nada igual.

Alguna pista en este embrollo?

Gracias.

Genuino 101 con Arduino 1.0.7 me parece que no van... verifica por favor!!

Como dice Lucario el Genuino 101 tiene 2 cores

two tiny cores, an x86 (Quark) and a 32-bit ARC architecture core, both clocked at 32MHz

por ende si luego miras Arduino IDE te envia a versión 1.8.1 que creo exagerado pero si mal recuerdo desde la 1.6.algo funciona

Revisé y acá esta

ARDUINO 1.6.8 - 2016.03.09

[ide]

[core]

  • avr: fixed USB_SendControl(...) for buffer with len > 64. Thanks @NicoHood
  • avr: fixed yield() usage inside delay(). Thanks @vbextreme
  • sam: fixed USB descriptor length
  • avr: reduced boiler-plate for ISR declarations. Thanks @paulo-raca
  • avr: added Timer3 support for atmega1284/1284p. Thanks @feilipu
  • sam: added USB CDC send break support and readBreak API

[libraries]
* Added support for Arduino/Genuino 101 to: TFT, Ethernet, SD

  • SD: the library is now board-agnostic. Thanks @feilipu

Gracias, he probado con la 1.07 y compila bien, pero el buffer sigue sin ampliarse a 128. Debe haber algún archivo que no he modificado, pero no se cual es.

IDE 1.6.1 o superior.

Alfaville:
Si compilas con el IDE Arduino, usas las librerias Arduino, por lo tanto parece lógico suponer que la funcionalidad se respeta.

Puede ocurrir que la version del IDE que usas no permita esos cambios.

  • versiones anteriores a la 1.6.x (creo recordar) no permiten redimensionar los bufers asignando un tamaño de 64 bytes (si la memoria es mayor de 1024 bytes) a ambos bufers (TX y RX)
  • versiones posteriores permiten ampliar los bufers, y la 1.8.1 permite hacer lo que te comentaba en mi post

Tendras que ver cual es tu version.

Saludos.

Buenas, la versión del ide es la última la 1.8.1, y la de la tarjeta Genuino 101, es la intel 1.0.7 (la última).

Por tanto entiendo que no es un problema de versiones.

Si estás usando el IDE 1.8.1, efectivamente no es un problema de versiones.

Asegurate de hacer los #define al comienzo del programa, antes de iniciar el Serial, y comprueba la sintaxis:

#define SERIAL_TX_BUFFER_SIZE 128  // por ejemplo
#define SERIAL_RX_BUFFER_SIZE 128  // por ejemplo

Ten en cuenta que si la sintaxis no es correcta no te dará ningun error al compilar, pero tampoco vas a modificar nada.

Saludos