⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 program8051.h

📁 pc loader for 8051 based microcomputers
💻 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 + -