2012-04-03 48 views
41

Estoy haciendo un vector de "puntos de referencia" en el Arduino. Cada waypoint es un objeto. El Arduino obviamente necesitará almacenar múltiples waypoints para la navegación del waypoint. Pero en lugar de almacenar estos waypoints en una matriz preprogramada estándar, el usuario deberá poder agregar, eliminar puntos de referencia y moverlos. Desafortunadamente, Arduino no ofrece un tipo de vector como biblioteca incorporada.Vectores en Arduino

Actualmente estoy contemplando dos opciones:

  1. En Container for objects like C++ 'vector'?, alguien publicó una biblioteca de propósito general. No contiene ninguna eliminación de índice u operaciones de movimiento. Pero contiene algunas estrategias de administración de memoria.

  2. he utilizado malloc, dealloc, calloc en el pasado. Pero no me gusta esa opción en absoluto, especialmente con las clases. ¿Pero esta es una mejor opción en mi senario?

¿Cuál es el mejor camino para bajar?

+3

Es posible que desee ver aquí: http://andybrown.me.uk/ws/2011/01/15/the-standard-template-library-stl-for-avr-with-c-streams/ – paulsm4

Respuesta

48

Standard C++ for Arduino podría ser una opción. Le permite usar el STLvector en Arduino.

+0

Wow , ese conjunto de bibliotecas es bastante impresionante. Gracias por ese hallazgo! – jakebird451

+6

Como un aparte, es muy útil mencionar el tipo de Arduino que estás usando. Una solución que funciona en un Mega 2560 es menos probable que funcione en los Arduinos más pequeños y más viejos. Solo una sugerencia. No dude en ignorar :) –

+2

Esta biblioteca es increíble. – PixMach

1

El arduino tiene memoria limitada, por lo que necesita saber cuántos puntos intermedios permitirá. En ese caso, una matriz simple para mantener los punteros de memoria (direcciones) de los puntos de referencia asignados proporcionará la secuencia/orden que necesita. Mantener una ranura de matriz libre como área de trabajo permitirá mover los puntos de referencia (reordenados).

4

Parece que desea implementar una lista vinculada simple. Una lista vinculada le permite mover objetos (puntos de referencia, en su caso) sin la sobrecarga asociada con vectores C++.

Aquí hay una implementación on GitHub.

+0

No entiendo muy bien su ejemplo en la parte superior del Github. ¿Alguna posibilidad de que muestres un código de muestra y un resultado esperado, un estilo la php.net? –

+0

Si bien este enlace puede responder la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace de referencia. Las respuestas de solo enlace pueden dejar de ser válidas si la página vinculada cambia. - [De la opinión] (/ reseña/mensajes de baja calidad/18589237) – kritzikratzi

0

También podría tener una matriz fija de estructuras de puntos de referencia e incluir una variable en la estructura si el waypoint está en uso o no. Al agregar un waypoint, todo lo que tiene que recorrer es recorrer la matriz hasta que encuentre una estructura que no esté en uso.