Bienvenue aux nouveaux arrivants sur FantasPic !
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
Modérateur : Jérémy
test sprintl et sprintf sur 18F
- paulfjujo
Expert- Messages : 2589
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
Bonsoir,
je n'avais pas , jusqu'à maintenant utilisé sprintl (lib mikroC)
preferant la fonction de conversion en string : LongToStr
moins gourmande en ressources..
Ne vla t-il pas que ça marche pâ !
l'un de vous peut-il tester celà ?.. aurais-je encore buggué!
ecrit pour un 18F26K22 .. mais doit être semblable pour un autre 18F .
le projet mikroC
qui donne ce resultat
INCORRECT pour le long L1 !
je n'avais pas , jusqu'à maintenant utilisé sprintl (lib mikroC)
preferant la fonction de conversion en string : LongToStr
moins gourmande en ressources..
Ne vla t-il pas que ça marche pâ !
l'un de vous peut-il tester celà ?.. aurais-je encore buggué!
ecrit pour un 18F26K22 .. mais doit être semblable pour un autre 18F .
Code : Tout sélectionner
#define Version "2020_0921"
// 64MHz
#define FOSC_INTERNE
#define PROCESSOR "18F26K22"
#define Directory "C:\\_MikroC\\_MesProjets_MikroC\\_BASE_18F26K22"
#define Source "Base_18F26K22_minimaliste_Test_sprintL"
#define Projet "Base_18F26K22_UART1_Minimaliste_test_sprintl_sprintf_2020.mcppi"
#define Power_Supply "5V"
#define FOSC1 "64MHz"
#define EEPROM "non"
#define LIBRARIES "adc_to_simili_float_str.mcl"
//"18F26K22_Test_lib_LCD_I2C1_Uart1_PCF8754_Inp_EEPROM.ihex"
#define Config "P18F26K22_Fosc_interne_16x4_64MHz.cfgsch"
// ac:pinout
//
/*
PCF8574P-2 8 bits PORT I2C DIP16
Adresse @= 40 + adresse<<1 => @ = 0x46
1 A0=1
2 A1=1
3 A2=0
4 P0
5 P1
6 P2
7 P3
8 VSS GND
9 P4
10 P5
11 P6
12 P7
13 /INT
14 SCL I2C
15 SDA I2C
16 + VDD
*/
#define BAUD 19200 // UART1
#define CLS 12
#define CR 13
#define LF 10
#define TAB 9
#define BACK 8
#define Beep 7 // ou \a
#define Separator 0x20 // space
#define ON 1
#define OFF 0
const char chaine0[]=" Directory: "Directory"\r\n";
const char chaine1[]=" Projet : "Projet "\r\n";
const char chaine2[]=" Alim. = "Power_Supply"\r\n";
const char chaine3[]=" Config : "Config"\r\n";
const char chaine4[]=" FOSC interne "FOSC1"\r\n";
const char chaine5[]=" Source "Source" Version :"Version"\r\n" ;
const char chaine6[]=" Port Hard UART1 19200,N,8,1 (RC6=TX RC7=RX) \r\n";
const char chaine7[]=" Init RA0,1,2 as Analog Input \r\n";
const char chaine8[]=" Test fonction sprintl, sprintf, Librairies MikroC \r\n";
const char chaine9[]=" \r\n";
const char chaine10[]="\r\n";
const unsigned char *RS_Str[]={chaine0,chaine1,chaine2,chaine3,chaine4,chaine5 ,chaine6,chaine7,chaine8,chaine9,chaine10};
const code char mesg0[]=" ";
sbit Led_Rouge at LATA4_bit;
sbit Led_Rouge_Dir at TRISA.B4;
unsigned char TEXTE[80]; // needed also by pointer txt !
unsigned char * txt;
unsigned char CRam1[64];
unsigned int i,j,k,l;
unsigned long L1;
#include "built_in.h" // for Hi Lo ..etc
void Init_Hardware(void) ;
void CRLF1(void);
void UART1_Write_CText(const char *txt);
void Init_Hardware()
{
PORTB = 0xFF;
TRISB = 0x83; // B0,B1 as input ATTENTION B7 B6 for ICSP Pickit3
ANSELB=0;
INTCON2.RBPU=0; // enable All pull up
WPUB=0xFF; // any pin pull up
CM1CON0=0;
CM2CON0=0;
PORTA = 0;
ANSELA=0;
ANSELA.ANSA2=1; // analog input on Port A2 voir page 154
TRISA = 0b00001111 ; // PORTA is RA0,1= analog input RA2=sortie DAC RA3,4,5=Digital output
PORTA=0;
Led_Rouge_Dir=0;
Led_Rouge=OFF;
PORTC = 0x00; // RC0..RC5,RC7 = input RC6=Output
ANSELC=0;
TRISC = 0x00; //
// CM1CON0=0; // disable comparators
TRISC.TRISC3 = 0; // SCL I2C
TRISC.TRISC4 = 1; // SDA I2C
TRISC.TRISC7 = 1; // RX - UART1
TRISC.TRISC6 = 0; // TX - UART1
SLRCON=0; // standard rate for PORTA,B,C,D,E
}
void CRLF1()
{
UART1_Write(CR);
UART1_Write(LF);
}
void Print( char *txt)
{
while (*txt)
UART1_Write(*txt++);
}
void CPrint(const char *txt)
{
while (*txt)
UART1_Write(*txt++);
}
void main()
{
OSCTUNE=0;
OSCCON = 0b01110000 ; //0x70 ; //Oscillateur à 16Mhz si usage PLL
OSCTUNE.PLLEN=1 ; // 1= avec PLL => 32Mhz 0 =sans PLL => 8Mhz
OSCCON2=0;
while (OSCCON.HFIOFS==0); // wait stable oscillator
Init_Hardware() ;
Led_Rouge=ON;
UART1_Init(19200); // Initalize USART (38400,8,N,1)
Delay_ms(100);
UART1_Write(CLS); // Erase screen terminal :it is an option on Vbray Terminal!
CRLF1();
Delay_ms(500);
j=0;
l=0;
txt=&TEXTE[0];
// presentation
for (i=0;i<11;i++)
{
CPrint(RS_Str[i]);
Delay_ms(100);
}
Led_Rouge=OFF;
for(i=0;i<80;i++) TEXTE[i]=0;
txt=&TEXTE[0];
CRLF1();
CPrint( " Tests sur unsigned long L1 \r\n");
L1=123456;
CPrint( " 1) L1=123456 ..avec LongToStr ");
txt=&TEXTE[0];
LongToStr(L1,txt);
Print(txt);
CRLF1();
CPrint( " 2) L1=123456 ..avec sprintL %8d : ");
TEXTE[0]=0;
txt=&TEXTE[0];
L1=123456;
sprintl(txt, "%8d",L1);
Print(txt);
CRLF1();
CPrint( " 3) L1=123456 ..avec sprintL %8u : ");
TEXTE[0]=0;
txt=&TEXTE[0];
L1=123456;
sprintl(txt, "%8u",L1);
Print(txt);
CRLF1();
CPrint( "\r\n sprintf ne peut pas gerer les entiers long !!!!");
CPrint( "\r\n sprintf ne peut pas gerer les octets !!!!\r\n sinon utiliser un cast : (int)byte\r\n");
CRLF1();
CPrint( " Tests sur unsigned int 16 bits K \r\n");
k=65535;
CPrint( " 1) K=65535 ..avec sprintF %8d : ");
TEXTE[0]=0;
txt=&TEXTE[0];
sprintf(txt, "%8d",k);
Print(txt);
CRLF1();
k=65535;
CPrint( " 2) K=65535 ..avec sprintF %8u : ");
TEXTE[0]=0;
txt=&TEXTE[0];
sprintf(txt, "%8u",k);
Print(txt);
CRLF1();
while(1);
}
/*
-------------------------------------------------------------
<FF>
Directory: C:\_MikroC\_MesProjets_MikroC\_BASE_18F26K22
Projet : Base_18F26K22_UART1_Minimaliste_test_sprinl_sprinf_2020.mcppi
Alim. = 5V
Config : P18F26K22_Fosc_interne_16x4_64MHz.cfgsch
FOSC interne 64MHz
Source Base_18F26K22_minimaliste_Test_sprintL Version :2020_0921
Port Hard UART1 19200,N,8,1 (RC6=TX RC7=RX)
Init RA0,1,2 as Analog Input
Test fonction sprintl, sprintf, Librairies MikroC
le projet mikroC
qui donne ce resultat
INCORRECT pour le long L1 !
Directory: C:\_MikroC\_MesProjets_MikroC\_BASE_18F26K22
Projet : Base_18F26K22_UART1_Minimaliste_test_sprinl_sprinf_2020.mcppi
Alim. = 5V
Config : P18F26K22_Fosc_interne_16x4_64MHz.cfgsch
FOSC interne 64MHz
Source Base_18F26K22_minimaliste_Test_sprintL Version :2020_0921
Port Hard UART1 19200,N,8,1 (RC6=TX RC7=RX)
Init RA0,1,2 as Analog Input
Test fonction sprintl, sprintf, Librairies MikroC
Tests sur unsigned long L1
1) L1=123456 ..avec LongToStr 123456
2) L1=123456 ..avec sprintL %8d : -7616
3) L1=123456 ..avec sprintL %8u : 57920
sprintf ne peut pas gerer les entiers long !!!!
sprintf ne peut pas gerer les octets !!!!
sinon utiliser un cast : (int)byte
Tests sur unsigned int 16 bits K
1) K=65535 ..avec sprintF %8d : -1
2) K=65535 ..avec sprintF %8u : 65535
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
test sprintl et sprintf sur 18F
test sprintl et sprintf sur 18F
- paulfjujo
Expert- Messages : 2589
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
Bonsoir Satinas,
je viens tout juste de le decouvrir malgré ce post
OK , ça marche sur long signé ou pas !
au final, sprintl .. à eviter !
je viens tout juste de le decouvrir malgré ce post
https://forum.mikroe.com/viewtopic.php? ... tl#p214675
aCkO
Posts: 1119
Joined: 14 Feb 2011, 05:07
Location: Bar, Montenegro
Contact: Contact aCkO
Re: sprintl help...
Report Quote
#5 Unread post by aCkO » 24 May 2013, 21:51
You cannot use sprintl on unsigned long. Use LongWordToStr from Conversions library.
Regards
OK , ça marche sur long signé ou pas !
Code : Tout sélectionner
CPrint( " Tests sur unsigned long L1 \r\n");
L1=123456;
CPrint( " 1) L1=123456 ..avec LongToStr ");
txt=&TEXTE[0];
LongToStr(L1,txt);
Print(txt);
CRLF1();
CPrint( " 2) L1=123456 ..avec sprintL %8Ld : ");
TEXTE[0]=0;
txt=&TEXTE[0];
L1=123456;
sprintl(txt, "%8Ld",L1);
Print(txt);
CRLF1();
CPrint( " 3) L1=123456 ..avec sprintL %8Lu : ");
TEXTE[0]=0;
txt=&TEXTE[0];
L1=123456;
sprintl(txt, "%8Lu",L1);
Print(txt);
CRLF1();
CPrint( "\r\n sprintf ne peut pas gerer les entiers long !!!!");
CPrint( "\r\n sprintf ne peut pas gerer les octets !!!!\r\n sinon utiliser un cast : (int)byte\r\n");
CPrint( "\r\n malgré l'usage de sprintl dédié aux entiers longs, il FAUT AUSSI specifier L pour le format \r\n");
CRLF1();
CPrint( " Tests sur unsigned int 16 bits K \r\n");
k=65535;
CPrint( " 1) K=65535 ..avec sprintF %8d : ");
TEXTE[0]=0;
txt=&TEXTE[0];
sprintf(txt, "%8d",k);
Print(txt);
CRLF1();
k=65535;
CPrint( " 2) K=65535 ..avec sprintF %8u : ");
TEXTE[0]=0;
txt=&TEXTE[0];
sprintf(txt, "%8u",k);
Print(txt);
CRLF1();
Tests sur unsigned long L1
1) L1=123456 ..avec LongToStr 123456
2) L1=123456 ..avec sprintL %8Ld : 123456
3) L1=123456 ..avec sprintL %8Lu : 123456
sprintf ne peut pas gerer les entiers long !!!!
sprintf ne peut pas gerer les octets !!!!
sinon utiliser un cast : (int)byte
malgré l'usage de sprintl dédié aux entiers longs, il FAUT AUSSI specifier L pour le format
Tests sur unsigned int 16 bits K
1) K=65535 ..avec sprintF %8d : -1
2) K=65535 ..avec sprintF %8u : 65535
au final, sprintl .. à eviter !
test sprintl et sprintf sur 18F
test sprintl et sprintf sur 18F
Roooo la la.
Déjà que l'électronique est pas facile, mais là ils mettent (volontairement) des barons dans les roues non ???
Paulfjujo va devenir debugger officiel chez mikroc non
@++
Déjà que l'électronique est pas facile, mais là ils mettent (volontairement) des barons dans les roues non ???
Paulfjujo va devenir debugger officiel chez mikroc non
@++
Qui est en ligne
Utilisateurs parcourant ce forum : Google [Bot] et 33 invités