René skrev:
> unsigned char RTC_getTime(unsigned char *time[]) {
> unsigned char errorStatus;
> unsigned char ret_time[10];
>
> errorStatus = RTC_read();
> if(errorStatus!=0)
> return(errorStatus);
>
> ret_time[9] = 0x00;
> ret_time[8] = ' ';
> ret_time[7] = (SECONDS & 0x0f) | 0x30; // seconds (1's)
> ret_time[6] = ((SECONDS & 0x70) >> 4) | 0x30;
> ret_time[5] = ':';
>
> ret_time[4] = (MINUTES & 0x0f) | 0x30; // min. (1's)
> ret_time[3] = ((MINUTES & 0x70) >> 4) | 0x30;
> ret_time[2] = ':';
> ret_time[1] = (HOURS & 0x0f) | 0x30; // hours (1's)
> ret_time[0] = ((HOURS & 0x30) >> 4) | 0x30;
>
> *time = ret_time;
> return(0);
> }
> unsigned char time[10];
> unsigned char errorCode;
> Her giver den en warning under kompilering:
> if((errorCode=RTC_getTime(&time)) == 0)
> ../display.c:79: warning: passing argument 1 of 'RTC_getTime' from
> incompatible pointer type
time i din main er et simpelt array. Parameteren i din funktion
er et array af pointere (bruges f.eks. ved et array af strenge).
Hvis det er din main-time der er rigtig, skal du blot fjerne *
eller [] fra funktionens parameter.
Der er en fejl i funktionen. Du erklærer en lokal variabel,
ret_time. Den dør når funktionen afsluttes. Derefter er time
udefineret fordi den er sat til at pege på den døde variabel.
Der er flere mulige løsninger:
1. Den simple:
Undlad at bruge en tempvariabel i funktionen og bearbejd den
overførte streng direkte. Det vil virke som du har tænkt.
2. Den også simple hvor man stadig bruger en overflødig
tempvariabel:
Lad funktionen være som nu, men slut med:
strcpy(time,ret_time);
return 0; // (drop overflødige parenteser)
3. Den knap så simple - udnyt tempvariablen:
Lav funktionen som i 2., men indbyg mulighed for at forlade
funktionen midtvejs hvis der opstår en fejl. Derved bevares den
oprindelige time.
--
Bertel
http://bertel.lundhansen.dk/ FIDUSO:
http://fiduso.dk/