eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikawskaźniki do flash w WinAVRRe: wskaźniki do flash w WinAVR
  • Date: Mon, 30 Jul 2012 10:45:44 +0200
    From: max441 <m...@w...pl>
    User-Agent: Mozilla/5.0 (Windows NT 6.0; rv:14.0) Gecko/20120713 Thunderbird/14.0
    MIME-Version: 1.0
    Newsgroups: pl.misc.elektronika
    Subject: Re: wskaźniki do flash w WinAVR
    References: <e...@g...com>
    <5...@n...home.net.pl>
    <s...@b...pl>
    In-Reply-To: <s...@b...pl>
    Content-Type: text/plain; charset=UTF-8; format=flowed
    Content-Transfer-Encoding: 8bit
    X-Antivirus: avast! (VPS 120729-1, 2012-07-29), Outbound message
    X-Antivirus-Status: Clean
    NNTP-Posting-Host: 212.85.112.42
    Message-ID: <5...@n...home.net.pl>
    X-Trace: news.home.net.pl 1343637959 212.85.112.42 (30 Jul 2012 10:45:59 +0200)
    Organization: home.pl news server
    Lines: 79
    X-Authenticated-User: k...@m...pl
    Path: news-archive.icm.edu.pl!news.icm.edu.pl!nf1.ipartners.pl!ipartners.pl!news.home
    .net.pl!not-for-mail
    Xref: news-archive.icm.edu.pl pl.misc.elektronika:634566
    [ ukryj nagłówki ]

    W dniu 2012-07-27 11:18, Artur M. Piwko pisze:
    > In the darkest hour on Fri, 27 Jul 2012 07:45:33 +0200,
    > max441 <m...@w...pl> screamed:
    >>> 2. Czy tab powinna mieć dwie deklaracje umieszczające łańcuch we Flash? czy albo
    używa się prog_char czy albo PROGMEM?
    >>
    >> Można tak:
    >> prog_char tab[] = {"inny tekst"};
    >> albo tak:
    >> char PROGMEM tab[] = {"inny tekst"};
    >>
    >
    > Nie można ani tak ani tak. W GCC atrybuty dotyczą tylko elementu, przy
    > którym występują. Dzięki powyższym deklaracjom umieścisz tab w program
    > space, ale "inny tekst" nadal będzie w data space. Trzeba to zrobić
    > dwuetapowo:
    >
    > char string[] PROGMEM = "inny tekst";
    > PGM_P tab[] PROGMEM = { string };

    Bardzo ciekawe, a niby dlaczego przytoczone przeze mnie przykłady mają
    umieszczać "inny tekst" w data space a przytoczone przez kolegę:

    char string[] PROGMEM = "inny tekst";

    już nie, skoro to jest dokładnie to samo co moje:

    prog_char tab[] = {"inny tekst"};
    lub
    char PROGMEM tab[] = {"inny tekst"};

    Nie rozumiem po co dodatkowo tworzyć jednoelementową tablicę wskaźników
    do program space, skoro już takim wskaźnikiem jest samo string. Czyli w
    przytoczonym przez kolegę przykładzie tab[0]=string i możemy skopiować
    tekst do zmiennej w data space na 2 sposoby:

    char buffer[20];
    strcpy_P(buffer, (PGM_P)pgm_read_word(&(tab[0]))); //lub zamiast
    &(tab[0]) w tym przypadku można użyć samo tab

    lub dużo prościej bez używania tab

    char buffer[20];
    strcpy_P(buffer, string);

    Przytoczony przez kolegę przykład ma sens jeśli chcemy zadeklarować
    tablicę wskaźników do kilku stringów w program space. Wtedy taka
    konstrukcja:

    char *string_table[] PROGMEM =
    {
    "String 1",
    "String 2",
    "String 3",
    "String 4",
    "String 5"
    };

    faktycznie umieści "String 1", "String 2" itd. w data space i w tym
    przypadku trzeba zrobić to dwuetapowo:

    char string_1[] PROGMEM = "String 1";
    char string_2[] PROGMEM = "String 2";
    char string_3[] PROGMEM = "String 3";
    char string_4[] PROGMEM = "String 4";
    char string_5[] PROGMEM = "String 5";

    PGM_P string_table[] PROGMEM =
    {
    string_1,
    string_2,
    string_3,
    string_4,
    string_5
    };

    Jednak pytanie w wątku dotyczyło umieszczania jednego stringa w program
    space.


Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: