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

📄 punjachex.h

📁 pc loader for 8051 based microcomputers
💻 H
字号:
// PunjacHex.h: interface for the CPunjacHex class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_PUNJACHEX_H__12E82011_FA44_4E5E_AA8E_568D109CE484__INCLUDED_)
#define AFX_PUNJACHEX_H__12E82011_FA44_4E5E_AA8E_568D109CE484__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "../PL3000/PrgDef.h"
#include "PunjacFajl.h"
#include <string>
#include "SlogHEX.h"

// Klasa za ucitavanje programa iz HEX datoteke

class CPunjacHex : public CPunjacFajl  
{
public:
	CPunjacHex(const std::string& nazivFajla);
    CPunjacHex(CFile* pFajl);
	virtual ~CPunjacHex();

    // Poziv ove funkcije oznacava pocetak punjenja programa i
    // definise opseg adresa koje se citaju.
    // Punjac treba da odradi potrebne inicijalizacije i da bude
    // spreman da vrati bajt progama iz zadatog opsega adresa.
    // U slucaju neuspeha vraca 'false', a opis greske smesta u OUT parametar.
    virtual bool Start(
        PRG::tAdresa pocetnaAdresa,
        PRG::tAdresa zavrsnaAdresa,
        std::string& opis
        );

    // Funkcija prosledjuje sledeci bajt programa (preko OUT parametra).
    // Bajtovi su u opsegu adresa koji je zadat prilikom poziva 'Start' funkcije,
    // ali redosled nije definisan.
    // Ako uspe, vraca true i punjac je spreman da vrati sledeci bajt.
    // Ako nema vise bajtova vraca false.
    // U slucaju greske baca izuzetak.
    virtual bool DajSledeciBajt(PRG::tBajt& bajt, PRG::tAdresa& adresa);

private:
    //////////////////////////////////////////////////////////////////////
    // Pomocne funkcije
    //////////////////////////////////////////////////////////////////////

    // Funkcija cita jedan slog iz HEX datoteke.
    // U slucaju greske prilikom citanja baca izuzetak.
    // Ako nema vise slogova vraca false.
    bool ProcitajSlog(void);

    // Funkcija cita dva ASCII bajta i formira jedan HEX bajt.
    // U slucaju greske prilikom citanja baca izuzetak.
    // Ako nema dovoljno bajtova vraca false.
    bool ProcitajASCII_HEX(PRG::tBajt& bajt);

    // Funkcija proverava da li je dati bajt ASCII HEX ('0'-'9', 'a'-'f', 'A'-'F')
    // i pretvara ga u HEX.
    BYTE KonvertujBajtASCII_HEX(BYTE bajt);

    // Funkcija konvertuje dva ASCII HEX bajta u jedan HEX bajt.
    // U slucaju greske baca izuzetak.
    PRG::tBajt FormirajASCII_HEX(BYTE visiNibl, BYTE niziNibl);

    // Funkcija konvertuje date bajtove u adresu
    // U slucaju greske baca izuzetak.
    PRG::tAdresa FormirajAdresu(PRG::tBajt adresaHI, PRG::tBajt adresaLO);

    // Funkcija vraca prvi bajt sloga cija je adresa u zadatom opsegu.
    // Ako takav bajt ne nadje, vraca false.
    bool DajSledeciBajtDataSloga(PRG::tBajt& bajt, PRG::tAdresa& adresa);

private:
    CSlogHEX slogHEX_m;
    int indeksBajta_m; // indeks bajta u slogu podataka
};

#endif // !defined(AFX_PUNJACHEX_H__12E82011_FA44_4E5E_AA8E_568D109CE484__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -