Vázaný seznam v MCU – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Vázaný seznam v MCU – C / C++ – Fórum – Programujte.comVázaný seznam v MCU – C / C++ – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Pavelv0
Stálý člen
29. 12. 2014   #1
-
0
-

Zdravím, pro aplikaci v MCU potřebuji vyvinout nastavovací menu. V menu by mělo být cca 10 položek zobrazovat budu aktuální položku, předchozí a následující. Některé položky budou nastavovány číselně, u jiných bude popis a na pozadí přiřazení k číslům. Jak realizovat takový seznam? Asi by bylo nejlepší přes strukturu, kde by byla uložená adresa následovníka a předka a v polích jednotlivé hodnoty a popisy. Celé bych to nejradši realizoval v C, s C++ moc velký kamarád nejsem. Napsat kus kódu mi nedělá problém, ale struktury, pointery a další věci z toho pravého programování jsou problém. Případně by mi hodně pomohl kus podobného kódu, pro lepší pochopení problému.

Nahlásit jako SPAM
IP: 109.235.7.–
Reklama
Reklama
Pavelv0
Stálý člen
30. 12. 2014   #2
-
0
-

Tak se o to snažím v wxDevC++ a marně. mám: 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
typedef struct xx{
    char short_text[20];
    char full_text[40];
    int predchozi;
    int dalsi;
    }MENU_ITEM;
        
int main(void)
{
    int aktualniPolozka;
    MENU_ITEM *polozka1,*polozka2;
    polozka1 = (MENU_ITEM *) malloc(sizeof(MENU_ITEM));
    polozka2 = (MENU_ITEM *) malloc(sizeof(MENU_ITEM));
    
    strcpy(polozka1->short_text,"nazev pol1");
    strcpy(polozka1->full_text,"dlouhy nazev pol1");
    polozka1->dalsi = 111;//polozka2;
    
    strcpy(polozka2->short_text,"nazev pol2");
    strcpy(polozka2->full_text,"dlouhy nazev pol2");
    polozka2->dalsi = 0;
    
    aktualniPolozka = polozka1;
    
    printf("%d\r\n",polozka1->dalsi);
    printf("%d\r\n",aktualniPolozka+60*sizeof(char)+sizeof(int));
    printf("%d",polozka2);
    
  getchar();	

return 0;
}


a chtěl bych, aby se mi do proměné polozka1->dalsi uložila hodnota adresa další struktury a tu si přes ukazatel aktualniPolozka zobrazil. Co mě na tom celém zaráží asi nejvíc je, že když definuju strukturu staticky, zabírá 68 byte, ovšem při dynamickém alokování 80 byte. Strukturu mi stačí alokovat staticky, jenže to mi už vůbec nefungovalo.

Výsledkem prinft má být 3x stejné číslo a to adresa další struktury
 

Nahlásit jako SPAM
IP: 109.235.7.–
q
~ Anonymní uživatel
219 příspěvků
30. 12. 2014   #3
-
0
-

Takhle:

typedef struct xx{
	char short_text[20];
	char full_text[40];
	struct xx *predchozi;
	struct xx *dalsi;
}MENU_ITEM;

int main(void)
{
	MENU_ITEM *aktualniPolozka;
	MENU_ITEM *polozka1,*polozka2;
	polozka1 = (MENU_ITEM *) malloc(sizeof(MENU_ITEM));
	polozka2 = (MENU_ITEM *) malloc(sizeof(MENU_ITEM));

	strcpy(polozka1->short_text,"nazev pol1");
	strcpy(polozka1->full_text,"dlouhy nazev pol1");
	polozka1->dalsi = polozka2;

	strcpy(polozka2->short_text,"nazev pol2");
	strcpy(polozka2->full_text,"dlouhy nazev pol2");
	polozka2->dalsi = 0;

	aktualniPolozka = polozka1;

	printf("%p\r\n",polozka1->dalsi);
	printf("%p\r\n",aktualniPolozka->dalsi);
	printf("%p",polozka2);

	getchar();	

	return 0;
}
Nahlásit jako SPAM
IP: 213.211.51.–
q
~ Anonymní uživatel
219 příspěvků
30. 12. 2014   #4
-
0
-

A pokud se teda nekamarádíš s ukazateli a nepotřebuješ to dynamicky, tak stačí pole třeba nějak takhle:

typedef struct xx{
	char short_text[20]; // char *short_text; 
	char full_text[40];  // char *full_text;
}MENU_ITEM;

MENU_ITEM menu[] = {
	{ "nazev pol1", "dlouhy nazev pol1" },
	{ "nazev pol2", "dlouhy nazev pol2" },
};
...

int aktualniPolozka = 0;
int pocetPolozek = sizeof(menu) / sizeof(menu[0]);
...
printf("%s\r\n", menu[aktualniPolozka].short_text);
Nahlásit jako SPAM
IP: 213.211.51.–
KIIV+42
God of flame
31. 12. 2014   #5
-
0
-

Pak taky jeste zalezi v jakym MCU. Napriklad u AVR bys zabral celou ramku retezcema, ktery potrebujes jen sem tam vypsat - tam je lepsi na ne pouzit pamet programu (retezce tam budou tak jak tak).

Nahlásit jako SPAM
IP: 94.113.95.–
Program vždy dělá to co naprogramujete, ne to co chcete...
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, 132 hostů

Podobná vlákna

Vázaný seznam — založil Pajda

Dvousměrně vázaný seznam — založil Ondrášek

OS pro MCU (RTOS) — založil babulax

MCU 8051 IDE — založil Tomas.P

Moderátoři diskuze

 

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