TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Medusa en 25 de Abril de 2018, 21:14:26
-
Hola Todos, estoy usando el CCS v4.73, por favor alguien me podria decir cual es mi error en este codio:
#include <18F4620.h>
#fuses HS,NOWDT,WDT32768,NOPROTECT,NOLVP,NOBROWNOUT
#use delay(clock=20MHz)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)// RS232 Estándar
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int j,i;
char Cabecera1[]={0x00, 0x11, 0x00, 0x0D, 0x81};
char Buffer[10];
void main(){
j=0;
for (i=0; i<5; i++){
sprintf(Buffer[j+i],"%02X",Cabecera1[i]);
}
while(TRUE);
}
Al correr el programa yo espero encontrar en Buffer los valores de Cabecara1, pero esto no sucede, Buffer permanece vacio, sin data
Por que no funciona la funcion Sprintf?
-
Lo correcto:
sprintf(Buffer
,"%02X",Cabecera1
[i
]);
ya que sprintf es:
int sprintf ( char * str
, const char * format
, ...
);
el primero argumento es un PUNTERO al buffer que vas a usar, luego esta el formato y sus demas variables.
el puntero al primer valor de Buffer, es Buffer o tambien que es lo mismo que &Buffer[0]. O sea el puntero al primer elemento de buffer.
Si vos haces Buffer[j+i] , lo que estas haciendo es darle como puntero el valor que se encuentra dentro del Buffer en la posicion i+j, suponete que sea 0, entonces le estas dando un puntero a 0, y por ende jamas va a llenar buffer.
-
Tenés 3 errores.
1- El que señaló Killerjc, le estás pasando a sprintf el valor que se encuentra en Buffer[i+j], no su dirección.
Debió ser: sprintf(&Buffer[j+i],"%02X",Cabecera1[i]);
2- Estás metiendo en Buffer de a 2 caracteres e incrementás la posición de a 1
Debió ser: sprintf(&Buffer[j+2*i],"%02X",Cabecera1[i]);
3- sprintf convierte a Asciiz (termina el string con un 0 ) por lo tanto cuando escribas el último caracter va a escribir un 0 en la posición 11.
Buffer debe ser de 11 caracteres o vas a pisar la variable que se ubique después.
Debió ser: char Buffer[11];
-
Gracias! por la corrección, funciona... ((:-))