📄 program8051.h
字号:
// Program8051.h: interface for the CProgram8051 class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_PROGRAM8051_H__A2B104F3_F0D4_4967_9FC3_CE965F54FD5B__INCLUDED_)
#define AFX_PROGRAM8051_H__A2B104F3_F0D4_4967_9FC3_CE965F54FD5B__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "../PL3000/PrgDef.h"
#include <string>
class CProgramPunjac;
class CProgramSnimac;
// Objekat ove klase sadrzi binarni kod koji se salje mikrokontroleru (8051)
// i procedure za manipulaciju kodom (ucitavanje, snimanje, editovanje ... )
class CProgram8051
{
public:
CProgram8051();
virtual ~CProgram8051();
// Operator poredjenja dva programa
bool operator==(const CProgram8051& prg) const;
// Funkcija inicijalizuje sadrzaj programa koriscenjem datog 'punjaca'.
// Inicijalizuju se samo bajtovi u datom opsegu adresa.
// U slucaju neuspeha vraca 'false'.
bool NapuniProgram(
CProgramPunjac* pPunjac,
PRG::tAdresa pocetnaAdresa,
PRG::tAdresa zavrsnaAdresa,
bool prethodnoObrisiCeoSadrzaj
);
// Funkcija ucitava celokupan sadrzaj sa punjaca.
bool NapuniProgram(CProgramPunjac* pPunjac, bool prethodnoObrisiCeoSadrzaj);
// Funkcija snima sadrzaj programa koriscenjem datog 'snimaca'.
// U slucaju neuspeha vraca 'false'.
bool SnimiProgram(
CProgramSnimac* pSnimac,
PRG::tAdresa pocetnaAdresa,
PRG::tAdresa zavrsnaAdresa
);
// Funkcija snima celokupan sadrzaj programa.
bool SnimiProgram(CProgramSnimac* pSnimac);
// Na datu adresu programa upisuje dati bajt.
// Vraca 'false' u slucaju neuspeha.
bool UpisiBajt(PRG::tAdresa adresa, PRG::tBajt bajt);
// Vraca bajt programa sa date adrese; bajt se prosledjuje preko OUT parametra 'bajt'.
// Ako je sve u redu vraca 'true',a u slucaju greske(npr. losa adresa) vraca false.
bool ProcitajBajt(PRG::tAdresa adresa, PRG::tBajt& bajt);
// Funkcija vraca true ako je program prazan
bool Prazan(void);
// Funkcija vraca adresu poslednjeg bajta programa.
// Ako je program prazan, vraca 0.
PRG::tAdresa AdresaPoslednjegBajta(void);
// Funkcija vrca najvecu mogucu duzinu programa
// (defininsano raspolozivim adresnim prostorom)
unsigned int NajvecaMogucaDuzina(void);
// Vraca najvecu mogucu adresu 8051 programa
static PRG::tAdresa NajvecaMogucaAdresa(void);
// Funkcija vraca 'true' ako je data adresa u dozvoljenom opsegu
static bool ProveriAdresu(PRG::tAdresa adresa);
// Vraca 'true' ako je program izmenjen
bool Izmenjen(void);
// Vraca tekst poslednje greske
std::string TekstGreske(void);
// Funkcija koja resetuje sadrzaj programa tako sto brise sadrzaj i
// ispunjava ceo adresni prostor bajtom dopune.
bool Reset(void);
// Funkcija vraca adresu pocev od koje su svi bajtovi jednaki bajtu dopune
// ('prava' duzina programa)
PRG::tAdresa AdresaPocetkaDopune(void);
private:
//////////////////////////////////////////////////////////////////////
// Pomocne funkcije
//////////////////////////////////////////////////////////////////////
// Postavi ili resetuj fleg da je fajl izmenjen
void Izmenjen(bool izmenjen);
// Postavlja tekst greske
void OpisiGresku(const std::string& tekst);
// Funkcija vraca duzinu programa na osnovu najvece adrese programa
// na kojoj se nalazi bajt razlicit od bajta dopune.
unsigned int Duzina(void);
//////////////////////////////////////////////////////////////////////
// Pomocne funkcije za proceduru 'NapuniProgram'
//////////////////////////////////////////////////////////////////////
// Funkcija proverava da li je dati pokazivac na punjac validan
bool PunjacValidan(CProgramPunjac* pPunjac);
// Funkcija startuje punjenje programa pomocu datog punjaca
bool StartujPunjenje(
CProgramPunjac* pPunjac,
PRG::tAdresa pocetnaAdresa,
PRG::tAdresa zavrsnaAdresa
);
// Funkcija cita bajtove programa iz punjaca i smesta u program
bool PrebaciProgramIzPunjaca(CProgramPunjac* pPunjac);
// Funkcije za zaustavljanje punjenja programa
bool ZaustaviPunjenje(CProgramPunjac* pPunjac);
bool ZaustaviPunjenjeTiho(CProgramPunjac* pPunjac);
//////////////////////////////////////////////////////////////////////
// Pomocne funkcije za proceduru 'SnimiProgram'
//////////////////////////////////////////////////////////////////////
// Funkcija proverava da li je dati pokazivac na snimac validan
bool SnimacValidan(CProgramSnimac* pSnimac);
// Funkcija startuje snimanje programa pomocu datog snimaca
bool StartujSnimanje(CProgramSnimac* pSnimac);
// Funkcija cita bajtove programa i salje ih snimacu
bool PrebaciProgramSnimacu(
CProgramSnimac* pSnimac,
PRG::tAdresa pocetnaAdresa,
PRG::tAdresa zavrsnaAdresa
);
// Funkcije za zaustavljanje punjenja programa
bool ZaustaviSnimanje(CProgramSnimac* pSnimac);
bool ZaustaviSnimanjeTiho(CProgramSnimac* pSnimac);
// Funkcija ogranicava adresu na maksimalnu dozvoljenu vrednost
PRG::tAdresa OgraniciAdresu(PRG::tAdresa adresa);
private:
PRG::tNizBajtova kod_m; // program u binarnom formatu (niz masinskih instrukcija)
PRG::tBajt bajtDopune_m; // vrednost bajta kojom se dopunjava neiskorisceni
// deo adresnog prostora programa
bool izmenjen_m; // pamti da li je program izmenjen
std::string tekstGreske_m; // opis poslednje greske
unsigned int duzina_m; // duzina programa
};
#endif // !defined(AFX_PROGRAM8051_H__A2B104F3_F0D4_4967_9FC3_CE965F54FD5B__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -