Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Conversione da intero a stringa con PIC 18f452

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] Conversione da intero a stringa con PIC 18f452

Messaggioda Foto Utentealukard990 » 26 apr 2013, 10:20

Salve a tutti,
ho scritto questo semplice codice di conversione da intero a stringa :
Codice: Seleziona tutto
#include <stdio.h>
#include <string.h>

void intTostring(int number, char* output)
{
char buffer[3]; // 3 digit buffer
sprintf(buffer,"%d", number);
strcpy(output, buffer);
}


per visualizzare il risultato ho collegato il PIC ad un hitachi 44780. La conversione funziona ma il compilatore mi indica il seguente warning "type qualifier mismatch in assignment" alla riga 7, potreste indicarmi dove sbaglio? Grazie mille :-)
Avatar utente
Foto Utentealukard990
0 2
 
Messaggi: 11
Iscritto il: 21 lug 2012, 16:54

2
voti

[2] Re: Conversione da intero a stringa con PIC 18f452

Messaggioda Foto UtenteDirtyDeeds » 26 apr 2013, 10:53

Leggi questa discussione sul forum della microchip.

Però lasciati dire che quella funzione, per come è fatta, è abbastanza uno spreco ;-) Piuttosto definisci una macro:

Codice: Seleziona tutto
#define INTTOSTRING(number,output) sprintf((output), "%d", (number))


o se proprio vuoi definire una funzione, elimina il buffer, tanto c'è già output (purché tu l'abbia dimensionato correttamente nel codice chiamante):

Codice: Seleziona tutto
void inttostring(int number, char* output)
{
  sprintf(output,"%d", number);
}
It's a sin to write sin instead of \sin (Anonimo).
...'cos you know that cos ain't \cos, right?
You won't get a sexy tan if you write tan in lieu of \tan.
Take a log for a fireplace, but don't take log for \logarithm.
Avatar utente
Foto UtenteDirtyDeeds
55,9k 7 11 13
G.Master EY
G.Master EY
 
Messaggi: 7012
Iscritto il: 13 apr 2010, 16:13
Località: Somewhere in nowhere

0
voti

[3] Re: Conversione da intero a stringa con PIC 18f452

Messaggioda Foto Utentealukard990 » 26 apr 2013, 11:12

mi scuso per la mia "nabbaggine" ma da poco mi sto approcciando a questo mondo, comunque grazie per il consiglio lo terrò a mente
Avatar utente
Foto Utentealukard990
0 2
 
Messaggi: 11
Iscritto il: 21 lug 2012, 16:54

0
voti

[4] Re: Conversione da intero a stringa con PIC 18f452

Messaggioda Foto Utentealukard990 » 26 apr 2013, 12:10

Ho letto il manuale utente del compilatore C18, se ho capito bene la sprintf i float non li converte giusto?
Avatar utente
Foto Utentealukard990
0 2
 
Messaggi: 11
Iscritto il: 21 lug 2012, 16:54

0
voti

[5] Re: Conversione da intero a stringa con PIC 18f452

Messaggioda Foto UtenteDirtyDeeds » 26 apr 2013, 19:46

Non conosco il C18, i microcontrollisti ti sapranno dire qualcosa di più, ma mi sembra ragionevole che la printf per un microcontrollore non abbia implementate tutte le specifiche di formato: è una funzione complessa e implementarla completamente porterebbe via parecchia memoria al micro. Meglio allora se ti fai tu una funzione di conversione da floating point a stringa, tenendo conto dei limiti dei numeri che devi trattare.
It's a sin to write sin instead of \sin (Anonimo).
...'cos you know that cos ain't \cos, right?
You won't get a sexy tan if you write tan in lieu of \tan.
Take a log for a fireplace, but don't take log for \logarithm.
Avatar utente
Foto UtenteDirtyDeeds
55,9k 7 11 13
G.Master EY
G.Master EY
 
Messaggi: 7012
Iscritto il: 13 apr 2010, 16:13
Località: Somewhere in nowhere

0
voti

[6] Re: Conversione da intero a stringa con PIC 18f452

Messaggioda Foto Utentealukard990 » 27 apr 2013, 11:03

Volendo fare una funzione di conversione come dovrei ragionare? Non so da dove cominciare (non voglio alcun codice,altrimenti come imparo :-) )
Avatar utente
Foto Utentealukard990
0 2
 
Messaggi: 11
Iscritto il: 21 lug 2012, 16:54

0
voti

[7] Re: Conversione da intero a stringa con PIC 18f452

Messaggioda Foto Utenteposta10100 » 27 apr 2013, 11:35

alukard990 ha scritto:Non so da dove cominciare

Potresti cominciare da qui.

Descrive come un numero a virgola mobile è implementato in memoria.
Da li poi puoi scrivere la funzione per convertirlo in stringa.

O_/
http://millefori.altervista.org
Tool gratuito per chi sviluppa su millefori.

Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. (A. Einstein)
Se non c'e` un 555 non e` un buon progetto (IsidoroKZ)

Strumento per formule
Avatar utente
Foto Utenteposta10100
5.550 4 10 13
Master EY
Master EY
 
Messaggi: 4832
Iscritto il: 5 nov 2006, 0:09

0
voti

[8] Re: Conversione da intero a stringa con PIC 18f452

Messaggioda Foto Utentealukard990 » 28 apr 2013, 14:10

Per quanto riguarda la conversione da intero a stringa poiché lo schermo LCD accetta in input solo stringhe di caratteri, ho convertito un intero secondo questo codice (senza usare la sprintf):
Codice: Seleziona tutto
#include "myfunction.h"

void intTostring(int number,char* output)
{
int i=0;
unsigned int divisore=1000;
for(i=0;i<4;i++)
{
  output[i]=(number/divisore)+0x30;
  number=number%divisore;
  divisore=divisore/10;
}
}

Ho usato un vettore di char con 4 locazioni poiché il mio progetto riguarda acquisizione di un segnale analogico su 10 bit. Per la conversione dei float vi farò sapere al più presto
Avatar utente
Foto Utentealukard990
0 2
 
Messaggi: 11
Iscritto il: 21 lug 2012, 16:54

0
voti

[9] Re: Conversione da intero a stringa con PIC 18f452

Messaggioda Foto UtenteIvanSB » 28 apr 2013, 19:02

alukard990 ha scritto:Salve a tutti,
ho scritto questo semplice codice di conversione da intero a stringa :
Codice: Seleziona tutto
#include <stdio.h>
#include <string.h>

void intTostring(int number, char* output)
{
char buffer[3]; // 3 digit buffer
sprintf(buffer,"%d", number);
strcpy(output, buffer);
}


per visualizzare il risultato ho collegato il PIC ad un hitachi 44780. La conversione funziona ma il compilatore mi indica il seguente warning "type qualifier mismatch in assignment" alla riga 7, potreste indicarmi dove sbaglio? Grazie mille :-)


Starei attento a quel char[3].
la famiglia printf opera su C string che quindi includono lo \0 a fine stringa. Da cui 3 cifre -> 4 char.
Il sistema è contorto, non si capisce perché il giro con strcpy, la extra chiamata a funzione e il buffer supplementare specialmente in ambito embedded.

Per una roba del genere anche se in ambito embedded per questioni di memoria/risorse si può essere più tolleranti nell'uso delle macro io eviterei.

Guarda come è definita la sprintf, potrebbe essere che stai usando un char mentre è definita su unsigned char o whatever.

Prova a fare cast sia sul format che cambiare tipo al buffer.

Su embedded visto che la famiglia printf è un bel malloppone e può consumare parecchio stack può essere che manchi di qualche cosa o sia implementata diversamente dallo std. Vale la pena farsi una cultura.

Giacchè stai usando un display magari ti avrai bisogno di diverse funzionalità della famiglia delle funzioni printf e quindi potrebbe non essere il tuo caso ma appunto considerando il precedente paragrafo potrebbe essere conveniente che tu ti scriva un set di funzioni per conversioni. Occhio però ai buffer overflow per esempio.

Va beh mi darei un 4 in italiano ma non ho voglia di sistemare.
Avatar utente
Foto UtenteIvanSB
 
Messaggi: 14
Iscritto il: 25 mar 2013, 17:14

0
voti

[10] Re: Conversione da intero a stringa con PIC 18f452

Messaggioda Foto UtenteTardoFreak » 29 apr 2013, 0:00

In questo articolo puoi trovare alcune funzioni utili.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

Prossimo

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti