Discussion:
Datos Variables
(demasiado antiguo para responder)
Plextor
2007-04-10 10:27:55 UTC
Permalink
Hola,

Tengo una tarjeta de Entradas/Salidas, la cual tiene 3 puertos
configurables independientemente como entradas o salidas.

Según la API del fabricante, con una función de la API debo
especificar como están configurados dichos puertos, por ejemplo:
Puerto A= Entrada, Puerto B= Salida y Puerto C= Entrada.

Hasta aquí todo correcto, pero yo quiero encapsular esa llamada por
otra que me retorne una estructura con dos campos entradas y salidas.
pero claro la longitud es variable según la configuración de puertos,
ya que si configuro todos los puertos como Entradas en la estructura
quedaría la variable Entrada con 3 Bytes y Salidas con 0 Bytes.

¿Alguna Idea?

Un saludo,
Plextor
Zara
2007-04-10 11:16:30 UTC
Permalink
Post by Plextor
Tengo una tarjeta de Entradas/Salidas, la cual tiene 3 puertos
configurables independientemente como entradas o salidas.
Según la API del fabricante, con una función de la API debo
Puerto A= Entrada, Puerto B= Salida y Puerto C= Entrada.
Hasta aquí todo correcto, pero yo quiero encapsular esa llamada por
otra que me retorne una estructura con dos campos entradas y salidas.
pero claro la longitud es variable según la configuración de puertos,
ya que si configuro todos los puertos como Entradas en la estructura
quedaría la variable Entrada con 3 Bytes y Salidas con 0 Bytes.
¿Alguna Idea?
Lo mejor que se me ocurre, que no incluya llamadas a "malloc" que
luego se olviden de "free":

#define MAX_SALIDAS 4 /* sutsituir por lo que sea correcto */
#define MAX_SALIDAS 4 /* sutsituir por lo que sea correcto */

typedef struct entra_sale_ {
unsigned char entradas[MAX_ENTRADAS];
unsigned char salidas[MAX_SALIDAS];
size_t entradas_validas,salidas_validas;
} entra_sale;


... y se me puede haber desliazado algún error en el typedef, yo uso
mucho el C++ y se tengo el C puro y duro algo oxidado. pero creo que
se entiene lo que quiero decir.

salu2


Zara
Antoine Leca
2007-04-11 07:46:52 UTC
Permalink
Post by Plextor
Tengo una tarjeta de Entradas/Salidas, la cual tiene 3 puertos
configurables independientemente como entradas o salidas.
Hasta aquí todo correcto, pero yo quiero encapsular esa llamada por
otra que me retorne una estructura con dos campos entradas y salidas.
pero claro la longitud es variable según la configuración de puertos,
ya que si configuro todos los puertos como Entradas en la estructura
quedaría la variable Entrada con 3 Bytes y Salidas con 0 Bytes.
struct targeta { unsigned char puertoA, puertoB, puertoC; };

int/*resultado de la operación*/ hacerAlgo(int mando,
struct targeta *entradas, struct targeta *salidas);

Se rellena la estructura "entradas" con los debidos valores en los puestos
correspondientes, se llama a la función y se lee les resultados en la
estructura "salidas".
Según la manera de programar la tarjeta, se puede poner como parte del
"mando" una indicación de cuales son los puertos de entrada y los de salidas
(1 significa puerto A es de salida, 2 lo mismo para puerto B, 4 para puerto
C; mando==7 significa todos de salida, ==0 todos de entrada).

Tienes un ejemplo muy parecido con el interfaz con el firmware (bios/dos) en
arquitectura x86-16 (la función se llama int86(), y la estructura es union
REGS).


Antoine

Loading...