📄 spisakbitova.h
字号:
// SpisakBitova.h: interface for the CSpisakBitova class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_SPISAKBITOVA_H__1D1DCB70_6FBE_4348_AF24_954060C74758__INCLUDED_)
#define AFX_SPISAKBITOVA_H__1D1DCB70_6FBE_4348_AF24_954060C74758__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#pragma warning( disable : 4786 )
#include <vector>
class CSpisakBitova
{
public:
CSpisakBitova();
virtual ~CSpisakBitova();
// Funkcija dodaje opis bita u spisak.
// Opis sadrzi sledece podatke :
// - 'bitMaska' sadrzi jedinicu na mestu gde treba da se nalazi bit
// u masci zajednickoj za sve registre porta
// - 'pozicija' sadrzi jedinicu na mestu gde se nalazi bit u registru
// (0 za bit najmanje tezine, ...7 za bit najvece tezine registra)
// - 'pinInvertovan' definise da li je signal na pinu koji odgovara bitu
// invertovan (kad je u registru 0, na pinu je +5V)
// Razlika izmedju 'bitMaska' i 'pozicija' je sto se maska odnosi na sve
// registre(npr. LPT ima 3 registra => maska ima ukupno 24 bita),
// a pozicija se odnosi na samostalan registar (8 bitova).
void Dodaj(int bitMaska, int pozicija, bool pinInvertovan);
// Vraca masku za izdvajanje svih bitova u spisku ('konkatenira' sve bit maske)
int FormirajMaskuZaSveBitove(void);
// Vraca poziciju bita u registru za bit sa datom maskom
int PozicijaBita(int bitMaska);
// Vraca true ako je pin hardverski invertovan(kada je u registru 0, na pinu je 1 tj. 5V).
// Ako nije invertovan, vraca false.
bool PinInvertovan(int bitMaska);
// Od zadate maske formira novu masku koja odgovara bitu sa najnizom pozicijom.
// Uzima u obzir samo bitove cija se maska sadrzi u zadatoj masci.
// Ako nijedan bit spiska nema masku koja se sadrzi u zadatoj masci, vraca 0.
int IzdvojiMaskuZaBitSaNajnizomPozicijom(int bitMaska);
// Funkcija invertuje bitove za koje se koristi inverzna logika
void InvertujPinoveSaInverznomLogikom(int& sadrzaj);
// Funkcija koju treba pozvati u konstruktoru svakog registra(CONTROL,STATUS,...)
void PostaviParametre(int pomeraj);
private:
// definicija podataka o bitu
struct CBitDef {
CBitDef()
: bitMaska(0), pozicija(0), pinInvertovan(false)
{}
CBitDef(int maska, int poz, bool invertovan)
: bitMaska(maska), pozicija(poz), pinInvertovan(invertovan)
{}
int bitMaska; // definise polozaj bita u masci zajednickoj za sve registre
int pozicija; // definise polozaj bita u registru (0 za bit najmanje tezine, ...)
bool pinInvertovan; // definise da li je signal na pinu koji odgovara bitu
// invertovan (kad je u registru 0, na pinu je +5V)
};
// sve bit maske zajedno
int maskaZaSveBitove_m;
private:
//////////////////////////////////////////////////////////////////////
// Pomocne funkcije
//////////////////////////////////////////////////////////////////////
// Vraca definiciju bita sa datom bit maskom (preko OUT parametra 'bitDef').
// Ako ne nadje bit sa datom maskom u spisku vraca false.
bool DajBitDef(int bitMaska, CBitDef& bitDef);
private:
// spisak maski za pojedine bitove
typedef std::vector<CBitDef> tSpisakBitova;
tSpisakBitova spisakBitova_m;
};
#endif // !defined(AFX_SPISAKBITOVA_H__1D1DCB70_6FBE_4348_AF24_954060C74758__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -