Embedded Artistry Framework
Embedded Systems C++ Framework
Classes
Framework Processor Infrastructure

Interfaces and components for building a processor interface. More...

Collaboration diagram for Framework Processor Infrastructure:

Classes

class  embvm::VirtualProcessorBase< TProcessor >
 Virtual Processor Base. More...
 
class  embvm::VirtualProcessorArchBase< TArchitecture >
 Virtual Interface for Common Architecture-Specific Functionality. More...
 

Detailed Description

Interfaces and components for building a processor interface.


Class Documentation

◆ embvm::VirtualProcessorBase

class embvm::VirtualProcessorBase

template<typename TProcessor>
class embvm::VirtualProcessorBase< TProcessor >

Virtual Processor Base.

This class provides the common interfaces and behaviors that virtual processors must implement. Some functionality is common to all platforms (name functions).

Functions whose names are appended with _ are meant to be supplied by the derived hardware platform:

  • earlyInitHook_()
  • init_()
  • reset_()

Derived classes may supply additional functions as required. The functions above are the common required functions that all hardware platforms must supply.

This class uses the docs/development/patterns/crtp.md ["CRTP pattern"] rather than virtual inheritance. To derive from this class, do the following:

class nRF52840 : public VirtualProcessorBase<nRF52840>
{ ... };
Template Parameters
TProcessorthe derived pocessor implementation (CRTP pattern)
Inheritance diagram for embvm::VirtualProcessorBase< TProcessor >:
Inheritance graph

Public Member Functions

 VirtualProcessorBase (const char *name) noexcept
 Create a named virtual hardware platform. More...
 
 VirtualProcessorBase (const std::string &name) noexcept
 Create a named virtual hardware platform. More...
 
 VirtualProcessorBase (const std::string_view &name) noexcept
 Create a named virtual hardware platform. More...
 
 ~VirtualProcessorBase ()=default
 Default destructor. More...
 
 VirtualProcessorBase (const VirtualProcessorBase &)=delete
 Deleted copy constructor. More...
 
const VirtualProcessorBaseoperator= (const VirtualProcessorBase &)=delete
 Deleted copy assignment operator. More...
 
 VirtualProcessorBase (VirtualProcessorBase &&)=delete
 Deleted move constructor. More...
 
VirtualProcessorBaseoperator= (VirtualProcessorBase &&)=delete
 Deleted move assignment operator. More...
 
constexpr const std::string_view & name () const noexcept
 Returns the Virtual HW Platform's name. More...
 
constexpr const char * name_cstr () const noexcept
 Returns the platform name as a cstring for C API compatibility. More...
 
void init () noexcept
 Initialize the processor. More...
 
void reset () noexcept
 Reset the chip. More...
 

Static Public Member Functions

static void earlyInitHook () noexcept
 Perform any special initialization steps. More...
 

Private Attributes

const std::string_view name_
 

Constructor & Destructor Documentation

◆ VirtualProcessorBase() [1/5]

template<typename TProcessor>
embvm::VirtualProcessorBase< TProcessor >::VirtualProcessorBase ( const char *  name)
inlineexplicitnoexcept

Create a named virtual hardware platform.

Parameters
nameC-string containing the hardware platform name

◆ VirtualProcessorBase() [2/5]

template<typename TProcessor>
embvm::VirtualProcessorBase< TProcessor >::VirtualProcessorBase ( const std::string &  name)
inlineexplicitnoexcept

Create a named virtual hardware platform.

Parameters
namestd::string containing the hardware platform name Note: VirtualProcessorBase uses a std::string_view, so the std::string must remain valid throughout the lifetime of VirtualProcessorBase.

◆ VirtualProcessorBase() [3/5]

template<typename TProcessor>
embvm::VirtualProcessorBase< TProcessor >::VirtualProcessorBase ( const std::string_view &  name)
inlineexplicitnoexcept

Create a named virtual hardware platform.

Parameters
namestd::string_view containing the hardware platform name Note: VirtualProcessorBase uses a std::string_view, so the std::string_view must remain valid throughout the lifetime of VirtualProcessorBase.

◆ ~VirtualProcessorBase()

template<typename TProcessor>
embvm::VirtualProcessorBase< TProcessor >::~VirtualProcessorBase ( )
default

Default destructor.

◆ VirtualProcessorBase() [4/5]

template<typename TProcessor>
embvm::VirtualProcessorBase< TProcessor >::VirtualProcessorBase ( const VirtualProcessorBase< TProcessor > &  )
delete

Deleted copy constructor.

◆ VirtualProcessorBase() [5/5]

template<typename TProcessor>
embvm::VirtualProcessorBase< TProcessor >::VirtualProcessorBase ( VirtualProcessorBase< TProcessor > &&  )
delete

Deleted move constructor.

Member Function Documentation

◆ earlyInitHook()

template<typename TProcessor>
static void embvm::VirtualProcessorBase< TProcessor >::earlyInitHook ( )
inlinestaticnoexcept

Perform any special initialization steps.

The earlyInitHook_() function must be implemented by the derived class as a static function.

These functions run before the C Run-time setup functions are called, and normal functionality (e.g. OS concepts) are not available.

Early initialization steps represent any super early code that needs to execute. For example, DRAM might need to be initialized before the boot process can relocate memory to its proper location in memory.

These functions are declared static to prevent you from easily using drivers within their confines

◆ init()

template<typename TProcessor>
void embvm::VirtualProcessorBase< TProcessor >::init ( )
inlinenoexcept

Initialize the processor.

The initProcessor_() function must be implemented by the derived class.

Perform any steps necessary for initializing the processor & processor peripheral devices for use.

Note that this is only intended to be processor initialization. Platform initialization nis handled by the init() function.

This function will likely invoke the VirtualProcessor::init() function, but the order and actual initialization process is left to the derived class.

Referenced by BlinkySimulatorHWPlatform::initProcessor_(), and FWDemoSimulatorHWPlatform::initProcessor_().

◆ name()

template<typename TProcessor>
constexpr const std::string_view& embvm::VirtualProcessorBase< TProcessor >::name ( ) const
inlinenoexcept

Returns the Virtual HW Platform's name.

◆ name_cstr()

template<typename TProcessor>
constexpr const char* embvm::VirtualProcessorBase< TProcessor >::name_cstr ( ) const
inlinenoexcept

Returns the platform name as a cstring for C API compatibility.

◆ operator=() [1/2]

template<typename TProcessor>
const VirtualProcessorBase& embvm::VirtualProcessorBase< TProcessor >::operator= ( const VirtualProcessorBase< TProcessor > &  )
delete

Deleted copy assignment operator.

◆ operator=() [2/2]

template<typename TProcessor>
VirtualProcessorBase& embvm::VirtualProcessorBase< TProcessor >::operator= ( VirtualProcessorBase< TProcessor > &&  )
delete

Deleted move assignment operator.

◆ reset()

template<typename TProcessor>
void embvm::VirtualProcessorBase< TProcessor >::reset ( )
inlinenoexcept

Reset the chip.

The reset_() function must be implemnted by the derived class.

A soft reset is intended to reset the program to the beginning without performing a full power cycle.

Member Data Documentation

◆ name_

template<typename TProcessor>
const std::string_view embvm::VirtualProcessorBase< TProcessor >::name_
private

◆ embvm::VirtualProcessorArchBase

class embvm::VirtualProcessorArchBase

template<typename TArchitecture>
class embvm::VirtualProcessorArchBase< TArchitecture >

Virtual Interface for Common Architecture-Specific Functionality.

Virtual processor arch won't actually be part of the processor's inheritance tree. There will be a base class, or set of classes, which can be inherited from through CRTP. All methods will be static. There won't be an instance directly. This will allow us to keep things separated much more nicely.

Inheritance diagram for embvm::VirtualProcessorArchBase< TArchitecture >:
Inheritance graph

Public Member Functions

 VirtualProcessorArchBase (const VirtualProcessorArchBase &)=delete
 Deleted copy constructor. More...
 
const VirtualProcessorArchBaseoperator= (const VirtualProcessorArchBase &)=delete
 Deleted copy assignment operator. More...
 
 VirtualProcessorArchBase (VirtualProcessorArchBase &&)=delete
 Deleted move constructor. More...
 
VirtualProcessorArchBaseoperator= (VirtualProcessorArchBase &&)=delete
 Deleted move assignment operator. More...
 

Static Public Member Functions

static void interruptsEnable () noexcept
 
static void interruptsDisable () noexcept
 
static void memoryBarrier () noexcept
 
static void instructionBarrier () noexcept
 

Protected Member Functions

 ~VirtualProcessorArchBase ()=default
 
 VirtualProcessorArchBase ()=default
 

Constructor & Destructor Documentation

◆ VirtualProcessorArchBase() [1/3]

template<typename TArchitecture>
embvm::VirtualProcessorArchBase< TArchitecture >::VirtualProcessorArchBase ( const VirtualProcessorArchBase< TArchitecture > &  )
delete

Deleted copy constructor.

◆ VirtualProcessorArchBase() [2/3]

template<typename TArchitecture>
embvm::VirtualProcessorArchBase< TArchitecture >::VirtualProcessorArchBase ( VirtualProcessorArchBase< TArchitecture > &&  )
delete

Deleted move constructor.

◆ ~VirtualProcessorArchBase()

template<typename TArchitecture>
embvm::VirtualProcessorArchBase< TArchitecture >::~VirtualProcessorArchBase ( )
protecteddefault

◆ VirtualProcessorArchBase() [3/3]

template<typename TArchitecture>
embvm::VirtualProcessorArchBase< TArchitecture >::VirtualProcessorArchBase ( )
protecteddefault

Member Function Documentation

◆ instructionBarrier()

template<typename TArchitecture>
static void embvm::VirtualProcessorArchBase< TArchitecture >::instructionBarrier ( )
inlinestaticnoexcept

◆ interruptsDisable()

template<typename TArchitecture>
static void embvm::VirtualProcessorArchBase< TArchitecture >::interruptsDisable ( )
inlinestaticnoexcept

◆ interruptsEnable()

template<typename TArchitecture>
static void embvm::VirtualProcessorArchBase< TArchitecture >::interruptsEnable ( )
inlinestaticnoexcept

◆ memoryBarrier()

template<typename TArchitecture>
static void embvm::VirtualProcessorArchBase< TArchitecture >::memoryBarrier ( )
inlinestaticnoexcept

◆ operator=() [1/2]

template<typename TArchitecture>
const VirtualProcessorArchBase& embvm::VirtualProcessorArchBase< TArchitecture >::operator= ( const VirtualProcessorArchBase< TArchitecture > &  )
delete

Deleted copy assignment operator.

◆ operator=() [2/2]

template<typename TArchitecture>
VirtualProcessorArchBase& embvm::VirtualProcessorArchBase< TArchitecture >::operator= ( VirtualProcessorArchBase< TArchitecture > &&  )
delete

Deleted move assignment operator.