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