Hola!

Registrándote como bakuno podrás publicar, compartir y comunicarte en privado con otros bakuos :D

Regístrame ya!

Duda en C plano

SevEd

Bovino maduro
Desde
23 Ago 2009
Mensajes
413
Que tal carnalitos del corral

Pues heme aqui una vez mas, solicitando ayuda

El problema es el siguiente:
Crear las siguientes funciones en ensamblador y en C (en C no puede utilizarse ninguna libreria, C plano).
1) void memcpy(unsigned char* bpSource, unsigned char* bpDest, unsigned short wStringSize)
-Copia los datos del bloque apuntado por lbpSource al bloque apuntado por lbpDest.

2) void
memset(unsigned char* bpDest, unsigned char bByteToFill, unsigned short wStringSize)
-Rellena el bloque apuntado por lbpDest con el dato indicado por bByteToFill.

3) unsigned char
findmax(unsigned char* bpDest, unsigned short wStringSize)
-Devuelve el numero sin signo mayor encontrado en el bloque de memoria apuntado por lbpDest

4) unsigned char
findmin(unsigned char* bpDest, unsigned short wStringSize)
-Devuelve el numero sin signo menor encontrado en el bloque de memoria apuntado por lbpDest

5) unsigned char
memcmp(unsigned char* bpSouce, unsigned char* bpDest, unsigned short wStringSize)
-Compara las cadenas apuntadas por bpSource y bpDest y devuelve un 1si las cadenas son iguales o un 0 si
son distintas

6) unsigned char*
findchar(unsigned char* bpString, unsigned char bCharToFind)
-Entrega la Dirección donde se encuentra el valor bCharToFind en la cadena bpString. En caso de no
encontrar datos, regresa un apuntador a null.

7) unsigned char
Sort (unsigned char* bpString, unsigned short wStringSize)
-Ordena de menor a mayor, en el mismo sitio, los datos contenidos en el buffer apuntado por lbpString.

8) unsigned short
sprintf (unsigned char * bpBuffer, unsigned char * bpFormat, void* vpaList)
-Formatea los datos indicados en el buffer siguiendo el formato indicado por bpFormat.
Ya he hecho las primeras 7 en ensamblador y en C, pero la ultima no veo como atacar, la verdad me he bloqueado

Esta funcion debe hacer lo mismo que el la funcion printf de C

unsigned short
sprintf (unsigned char * bpBuffer, unsigned char * bpFormat, void* vpaList)

* bpFormat = entrega el formato en Hexadecimal (%x), Decimal (%d), Caracter (%c), Cadena (%s), por lo que este apuntador debe ser un vector

* vpaList = apuntador a vector de variables que se pueden introducir

* bpBuffer = vector inicializado con una cadena, en la cual ya se encuentran varios elementos (%x)

De esto no se como hacer que el programa al ver un %d, %x... me imprima en el formato deseado el valor guardado de la variable a la que apunta la lista de varaibles

Tienen alguna idea??

Gracias hermanos
 
Alguien me apoyo con esto

1. Almacenas en una lista los parámetros que quieras pasarle a esa nueva función
2. A la función le pasas esa lista y su tamaño.

Por ejemplo:

lista = {1,2,3}

mifuncion(lista,3)

Otra solución mejor aún si vas a imprimir tipos de datos es crearte un struct con dos campos: tipo del dato (d,i,f,c,s,etc) y dato.

La lista estaría hecha de esos structs.
Pero... esa lista no me limita?? Digo esa lista tiene cierto numero de elementos (parametros), no?

Alguien podria orientarme?
 
Alguien me apoyo con esto

Pero... esa lista no me limita?? Digo esa lista tiene cierto numero de elementos (parametros), no?

Alguien podria orientarme?

Así como está, la lista tiene sólo 3 elementos, pero bien puedes extenderla acorde a tus necesidades.

Si quieres ayuda, especifica algo más claro, así es demasiado general y parece que quieres que te hagan la tarea.
 
Claro que no Zephyros, no quiero que me hagan la tarea, solo pido algo de orientacion.

Especificamente tengo que crear la funcion sprintf(), para ello esta prohibido utilizar librerias (stadio, stdlib, etc.).

La funcion debe ser capaz de dar formato a cuatro tipos de dato
%d - decimal
%x - hexadecimal
%c - caracter
%s - cadena

A esta funcion se le puede insertar una cantidad ilimitada de parametros (variables) ademas de que puedes darles el formato indicado anteriormente

Este es el prototipo que quieren que haga
//Prototipo
unsigned short sprintf (unsigned char * bpBuffer, unsigned char * bpFormat, void* vpaList);
Ahora bien, de acuerdo con lo que decia un camarada de otro foro
1. Almacenas en una lista los parámetros que quieras pasarle a esa nueva función
2. A la función le pasas esa lista y su tamaño.

Por ejemplo:

lista = {1,2,3}

mifuncion(lista,3)

Otra solución mejor aún si vas a imprimir tipos de datos es crearte un struct con dos campos: tipo del dato (d,i,f,c,s,etc) y dato.

La lista estaría hecha de esos structs.

Dentro haces un bucle para recorrer la lista entera y listo
Por lo que hago esta estructura

//Declaracion de una estructura
typedef struct
{
unsigned char bTipoDato[3]; //Vector para guardar los 4 tipos de formato
unsigned char bDato; //Elemento donde se guardara el dato
}param;

unsigned char *bauCMsg[] ;

void vpaList={param 1,param 2,param 3,param 4,param 5}//Lista 5 parametros con respectivo formato

unsigned short sprintf (unsigned char * bpBuffer, void* vpaList, 5);
Es todo lo que entiendo de momento, la verdad es que ya no se que hacer y el profesor que nos imparte la clase se rie de nosotros diciendo "No que si sabian C"

main{
bauCMsg[] = {"Microcontrollers! %d ...%x ...%c ...%s "};
sprintf (&bauCMsg[], ...) //No se como llamar a la funcion
}

unsigned short sprintf (unsigned char * bpBuffer, void* vpaList, 5)
{
unsigned short wCounter;
unsigned char wDec[]='%d';
unsigned char wHex[]='%x';
unsigned charwCad[]='%s';
unsigned char wCar[]='%c';
wCounter=sizeof(bauCMsg[]);
while(wCounter--){
if (*bauCMsg[]++ == wDec[])
??
if (*bauCMsg[]++ == wHex[])
??
if (*bauCMsg[]++ == wCad[])
??
if (*bauCMsg[]++ == wCar[])
??
}
}
Tengo las dudas:
Los valores param 1, 2 ,etc... los debo predefinir dentro del main o fuera de?
Como hago para que a la hora de llamar a la funcion?
No se como hacer que la funcion extraiga de bauCMsg[] al ver %d de el formato de decimal y asignarle el valor de 1.bDato

Espero no haberlos enredado mas

A quien me pueda ayudar estaré muy agradecido, quien no pueda, gracias por tomarse el tiempo de leer
 
Volver
Arriba