AVRGCC a texty

Marek Pavlů marekpavlu@mybox.cz
Pátek Srpen 20 15:54:13 CEST 2004


Zdravim,

Tvrdite, ze mate avrgcc, tak predpokladam, ze k tomu mate i dokumentaci.
Alespon WinAvr ji tam ma uz cca rok(tot doba, po kterou si s tim hraju:)
v html a dobre se s tim pracuje...

Takze se proste podivate do dokumentace a zjistite, ze existuje nejaky
typ
prog_char  a pointer na tento typ PGM_P


Potom v dokumentaci taky zjistite, ze pro tyto pointry existuje sada
standardnich funkci:

void *  memcpy_P (void *, PGM_VOID_P, size_t) 
int  strcasecmp_P (const char *, PGM_P) __ATTR_PURE__ 
char *  strcat_P (char *, PGM_P) 
int  strcmp_P (const char *, PGM_P) __ATTR_PURE__ 
char *  strcpy_P (char *, PGM_P) 
size_t  strlcat_P (char *, PGM_P, size_t) 
size_t  strlcpy_P (char *, PGM_P, size_t) 
size_t  strlen_P (PGM_P) __ATTR_CONST__ 
int  strncasecmp_P (const char *, PGM_P, size_t) __ATTR_PURE__ 
char *  strncat_P (char *, PGM_P, size_t) 
int  strncmp_P (const char *, PGM_P, size_t) __ATTR_PURE__ 
char *  strncpy_P (char *, PGM_P, size_t)


Osobne bych dal prednost tomu, ze si udelam tu funkci takto:

void Outtext(PGM_P text)
{
	unsigned char data;
	while(1)
	{
		memcpy_P((void*)&data,text,1);
		if(data==0) break;
		UART_transmit(data);
		text++;
     }
}


Pak tu funkci muzete volat:

const prog_char text1[] = "Text1";

Outtext(text1);

Nebo:

Outtext(PSTR("Text2"));

Oba zpusobu budou rovnocenne...

Mno, jeste koukam, ze by ten pointer PGM_P mel byt pretypovan na
PGM_VOID_P,
ale to uz mit na funkci vliv nebude, stejne to bude povazovat jako
pointer na nejmensi datovy typ...
Pripadne by to melo byt takto:
memcpy_P((void*)&data,(PGM_VOID_P)text,1);


Ja si hraju s Nut/OS a tam se napr. pro ten string vytvori trocha mista
v pameti RAM podle delky stringu. Ten se nakopiruje do vyhrazene pameti
a pak z ni se teprve tahaji jednotlive byty. Nakonec zase pamet vraci na
haldu...

Takze neni pointer jako pointer :)))))))))).



S pozdravem,
                        Marek Pavlu


//-----Original Message-----
//From: hw-list-bounces@mailman.nethouse.cz [mailto:hw-list-
//bounces@mailman.nethouse.cz] On Behalf Of Jan Smrz
//Sent: Friday, August 20, 2004 1:39 PM
//To: [HWnews]
//Subject: Re: AVRGCC a texty
//
//Jestli nebude problem v tom, ze k datum ve FLASH se musi pristupovat
//trochu jinak, napr. jak uvedl Kosta __lpm_inline(*char), nebo napr.
fce
//pgm_read_byte(*char) apod.
//
//J.S.
//
//Milan wrote:
//> 1/ Mam otazku:
//>     Ako to skonci pri pokuse s:
//>        void Outtext(const char  __attribute__((progmem)) *text)
//> 2/ Co tak skusit najobecnejsi tvar a nechat to na kompilator ako si
//poradi:
//>
//>        void Outtext(char *text)
//>
//> Milan
//>
//> ----- Original Message -----
//> From: "Kovar Milan" <mkovar@seznam.cz>
//> To: "[HWnews]" <hw-list@mailman.nethouse.cz>
//> Sent: Friday, August 20, 2004 12:52 PM
//> Subject: Re: AVRGCC a texty
//>
//>
//>
//>>>Problem je v tom, ze neposlete ani kousek Vasi rutinky :-)))
//>>
//>>Cely testovaci programek posilam.
//>>At pouzije jeden, nebo druhy tvar deklarace, vzdy se vypisuje jen
text,
//>>ktery je primo v parametru, ovsem ten se kopiruje do RAM. Text z
//>>konstanty se nevypisuje.
//>>Pouzivam AvrEdit V3.5
//>>
//>>
//>>#include <stdlib.h>
//>>#include <stdio.h>
//>>#include <string.h>
//>>#include <io.h>
//>>#include <interrupt.h>
//>>#include <sig-avr.h>
//>>#include <pgmspace.h>
//>>
//>>const unsigned char __attribute__((progmem)) text1[]="Ahoj";
//>>
//>>
//>>void UART_transmit(unsigned char data)
//>>     {
//>>     while (!(UCSRA&(1<<UDRE)));
//>>     UDR=data;
//>>     }
//>>
//>>void Outtext(const char * __attribute__((progmem)) text)
//>>/*void Outtext(const char *text)*/    {
//>>     while(*text)
//>>         {
//>>         UART_transmit(*text++);
//>>         }
//>>     }
//>>
//>>int main(void)
//>>     {
//>>     UBRRH=0x00;
//>>     UBRRL=0x33;
//>>     UCSRB=(1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
//>>     UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
//>>     do
//>>       {
//>>         Outtext(text1);
//>>         Outtext("text1");
//>>       }
//>>     while (1);
//>>     }
//>>
//>>
---
avast! Antivirus: Odchozi zprava cista.
Virova databaze (VPS): 0434-1, 17/08/2004
Testovano: 20.8.2004 14:56:53
avast! (c) copyright 2000-2003 ALWIL Software.
http://www.avast.com



---
avast! Antivirus: Odchozi zprava cista.
Virova databaze (VPS): 0434-1, 17/08/2004
Testovano: 20.8.2004 15:08:52
avast! (c) copyright 2000-2003 ALWIL Software.
http://www.avast.com







Další informace o konferenci Hw-list