/* * Author: Pawel Jablonski * E-mail: pj@xirx.net * WWW: xirx.net * GIT: git.xirx.net * * License: You can use this code however you like * but leave information about the original author. * Code is free for non-commercial and commercial use. */ #ifndef LINKER_H #define LINKER_H #include #include #include #include #include #include #include #include "codeitem.h" #include "codesection.h" #include "ramitem.h" #include "flashitem.h" #include "data.h" #include "datalist.h" //! This class glues all binary parts from the compilation part and set correct memory addresses class Linker { public: static const int ROM_RAM_SIZE = 3840; //!< Size of RAM reserved for the kernel static const int ROM_FLASH_SIZE = 32768; //!< Size of Flash reserved for the kernel static const int ROM_RAM_OFFSET = 0; //!< Start of RAM reserved for the kernel static const int ROM_FLASH_OFFSET = 0; //!< Start of Flash reserved for the kernel static const int APP_RAM_SIZE = 28672; //!< Size of RAM reserved for a user application static const int APP_FLASH_SIZE = 32768; //!< Size of Flash reserved for a user application static const int APP_RAM_OFFSET = 4096; //!< Start of RAM reserved for a user application static const int APP_FLASH_OFFSET = 32768; //!< Start of Flash reserved for a user application Linker(DataList &dataList); bool link(); bool saveFile(const QString &path, const QString &pathMap); private: DataList &dataList; //!< List of data for each source file QVector flashVector; //!< Buffer with a compiled, parsed and linked binary code bool findAddress(Data &data, const QString &label, unsigned int &address); bool findCodeAddress(Data &data, const QString &name, unsigned int &address); bool findMemoryAddress(Data &data, const QString &name, unsigned int &address); }; #endif