Velikost referencovaného pole – Mikrokontroléry – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Velikost referencovaného pole – Mikrokontroléry – Fórum – Programujte.comVelikost referencovaného pole – Mikrokontroléry – Fórum – Programujte.com

 

Mario10
Newbie
25. 4. 2011   #1
-
0
-

čau lidi. jak zjistím velikost referencovaného pole v paměti programu?

static const char testData[]PROGMEM="Ahoj svete";

static void sendMsg(PGM_P data)
{
uint8_t len=sizeof(*data); // vrací 2B ???
for(uint8_t i=0;i<len;i++)
usartTx(pgm_read_byte(&data[i]));
}


Pokud je pole v RAM tak funkce sizeof(*data) vrátí normálně 11.

Nahlásit jako SPAM
IP: 89.103.21.–
KIIV
~ Moderátor
+43
God of flame
25. 4. 2011   #2
-
0
-

s programovou pameti se pracuje pres specialni makra..
prekvapive 2B budou nejspis velikost ukazatele, kde se retezec nachazi,.. takze jedine pouzit nejaky pstrlen nebo si to zkopirovat a pak teprve zjistit velikost

Nahlásit jako SPAM
IP: 93.91.152.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Mario10
Newbie
25. 4. 2011   #3
-
0
-

To KIIV : dík, toho jsem se obával. Teďka používám strlen_P protože zatím mám v polích jen uint8_t (=char)

Nahlásit jako SPAM
IP: 89.103.21.–
KIIV
~ Moderátor
+43
God of flame
25. 4. 2011   #4
-
0
-

To Mario1 : tak kdyz mas ty pole vzdy stejne velky tak se delka da ulozit taky - at se nepocita pokazdy znova

Nahlásit jako SPAM
IP: 93.91.152.–
Program vždy dělá to co naprogramujete, ne to co chcete...
AB
~ Anonymní uživatel
41 příspěvků
25. 4. 2011   #5
-
0
-

Proč ne jednoduše

unsigned char str1[] PROGMEM = "ABCDEFG";

uint8_t size;

int main()
{

size=sizeof(str1);

Nahlásit jako SPAM
IP: 217.115.249.–
AB
~ Anonymní uživatel
41 příspěvků
26. 4. 2011   #6
-
0
-

Ve funkci pošleme délku pole jako argument



const char str1[] PROGMEM = "ABCDEFG";

static void sendMsg(const char* data, uint8_t size)
{
for(uint8_t i=0;i<size;i++)
usartTx(pgm_read_byte(&data[i]));
}

int main()
{
sendMsg(str1, sizeof(str1));

Nahlásit jako SPAM
IP: 217.115.249.–
Mario10
Newbie
27. 4. 2011   #7
-
0
-

To KIIV : jasně to by taky šlo, ale těch polí mám několik desítek o různé délce.
Buď bych musel mít podle uživatele AB stejný počet globálních proměnných pro jejich délky a nebo je mít uloženy v PROGMEM a když změním text tak měnit i uloženou délku a to je spousta místa pro chyby.
Raději v každé funkci zavolám strlen_P (a uložím do lokální proměnné pokud to bude potřeba)

Nahlásit jako SPAM
IP: 83.69.34.–
AB
~ Anonymní uživatel
41 příspěvků
27. 4. 2011   #8
-
0
-

Buď bych musel mít podle uživatele AB stejný počet globálních proměnných pro jejich délky a nebo je mít uloženy v PROGMEM a když změním text tak měnit i uloženou délku a to je spousta místa pro chyby.



Asi jsi špatně porozumněl.

První příklad ukazuje, že funkce sizeof() zjistí délku i u pole umístěného ve FLASH.

Ve druhém příkladu pošleme funkci délku pole jako argument.
Ale neposíláme žádnou připravenou hodnotu. Žádné proměnné pro délku nezavádíme.
Délku pole zjistí právě funkce sizeof(), podívej se na volání funkce v main().

Prostě voláš
sendMsg(str1, sizeof(str1));
sendMsg(str2, sizeof(str2));
sendMsg(pole1, sizeof(pole1));

Výhoda je, že to funguje nejen pro stringy ale pro každé pole.

Nahlásit jako SPAM
IP: 217.115.249.–
Mario10
Newbie
28. 4. 2011   #9
-
0
-

To AB :Moje rakce byla na na příspěvek kde to vypadalo jako že si vytvořím globální proměnnou pro pole :-)

Nahlásit jako SPAM
IP: 83.69.34.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 5 hostů

Podobná vlákna

Velikost pole — založil fnenks

Náhodná velikost pole — založil Jan

Funkce na velikost pole — založil Porcepoque

Velikost pole struktur — založil Redby

Velikost obrazku — založil bloudil

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý