Příznakové bity – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Příznakové bity – C / C++ – Fórum – Programujte.comPříznakové bity – C / C++ – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
yaqwsx+9
Posthunter
9. 3. 2012   #1
-
0
-

Píši program pro mikrokontrolér. Mám 32 bitové číslo, ve kterém uchovávám příznakové bity - např. zda-li byla daná součást nakonfigurována.

Mám tedy kód např.:

uint32_t priznaky;
#define PRIZNAK1 1 << 0
#define PRIZNAK3 1 << 1
#define PRIZNAK4 1 << 2
#define PRIZNAK5 1 << 3
#define PLNAKONFIGURACE PRIZNAK1|PRIZNAK2|PRIZNAK3|PRIZNAK4|PRIZNAK5

//V kódu pak mám např. následující podmínku
if(priznaky == PLNAKONFIGURACE)//Je dokončena konfigurace?

Jde nějak smysluplně zautomatizovat generování PLNAKONFIGURACE? Jde o to, že ne vždy využiji všech 32 bitů. A ruční připisování nových příznaků je náchylné na chybu - opomenutí přidání do plné konfigurace. Jde nějak šikovně použít makro preprocesoru?

Nahlásit jako SPAM
IP: 85.160.40.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
Reklama
Reklama
zlz
~ Anonymní uživatel
634 příspěvků
9. 3. 2012   #2
-
0
-

   

#define PRIZNAK5 1 << 3
// !! nezapomen nove priznaky pridat do PLNAKONFIGURACE !!
#define PLNAKONFIGURACE ...
Nahlásit jako SPAM
IP: 213.211.51.–
yaqwsx+9
Posthunter
9. 3. 2012   #3
-
0
-

#2 zlz
Pěkná odpověď - ale tohle si nechávám do zálohy :D

Momentálně zkouším nastavit dávkový soubor, který se psutí před kompilací a tohle za mě doplní. Bohužel trochu bojuji s tím, že pracuji mezi různými IDE (MCU a PC)

Nahlásit jako SPAM
IP: 85.160.40.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
zlz
~ Anonymní uživatel
634 příspěvků
9. 3. 2012   #4
-
0
-

   

extern int priznak_je_mimo_rozsah;

// jedina vec co musis menit
#define POCETPRIZNAKU	5

// x predpokladam jako konstantni vyraz
// prekladac pak cely vyraz vyhodnoti jako konstantu, pokud je x v povolenem rozsahu a nic se nedeje,
// nebo jako promennou priznak_je_mimo_rozsah, takze se to neprelozi (compile time assert)
#define PRIZNAK(x)	((x) < POCETPRIZNAKU ? 1 << (x) : priznak_je_mimo_rozsah)

#define PLNAKONFIGURACE	((1 << POCETPRIZNAKU) - 1)
Nahlásit jako SPAM
IP: 213.211.51.–
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, 107 hostů

Podobná vlákna

Bity — založil Martin

Operace s bity — založil Pavel Prokop

Nejvyšší bity v poli — založil Pajda

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ý