Implements a stack register with stack logic. More...
#include <hwstack.h>
Public Member Functions | |
HWStack (AvrDevice *core) | |
Creates a stack instance. | |
~HWStack () | |
virtual void | Push (unsigned char val)=0 |
Pushs one byte to stack. | |
virtual unsigned char | Pop ()=0 |
Pops one byte from stack. | |
virtual void | PushAddr (unsigned long addr)=0 |
Pushs a address to stack. | |
virtual unsigned long | PopAddr ()=0 |
Pops a address from stack. | |
virtual void | Reset () |
Resets stack pointer and listener table. | |
unsigned long | GetStackPointer () const |
Returns current stack pointer value. | |
void | SetStackPointer (unsigned long val) |
Sets current stack pointer value (used by GDB interface). | |
void | SetReturnPoint (unsigned long stackPointer, Funktor *listener) |
Subscribes a Listener for a return address. | |
void | ResetLowestStackpointer (void) |
Sets lowest stack marker back to current stackpointer. | |
unsigned long | GetLowestStackpointer (void) |
Gets back the lowest stack pointer (for measuring stack usage). | |
Public Attributes | |
ThreadList | m_ThreadList |
Protected Member Functions | |
void | CheckReturnPoints () |
Run functions registered for current stack address and delete them. | |
Protected Attributes | |
AvrDevice * | core |
Link to device. | |
uint32_t | stackPointer |
current value of stack pointer | |
uint32_t | lowestStackPointer |
marker: lowest stackpointer used by program | |
std::multimap< unsigned long, Funktor * > | returnPointList |
Maps adresses to listeners for return addresses. |
Implements a stack register with stack logic.
This is the base class for all 2 different stack types. It holds the interface for pushing and poping bytes and addresses from stack by core and for interrupt
Definition at line 91 of file hwstack.h.
HWStack::HWStack | ( | AvrDevice * | core | ) |
Creates a stack instance.
Definition at line 35 of file hwstack.cpp.
References Reset().
void HWStack::CheckReturnPoints | ( | ) | [protected] |
Run functions registered for current stack address and delete them.
Definition at line 47 of file hwstack.cpp.
References returnPointList, and stackPointer.
Referenced by HWStackSram::Pop(), HWStackSram::Push(), HWStackSram::SetSph(), and HWStackSram::SetSpl().
unsigned long HWStack::GetLowestStackpointer | ( | void | ) | [inline] |
Gets back the lowest stack pointer (for measuring stack usage).
Definition at line 127 of file hwstack.h.
References lowestStackPointer.
unsigned long HWStack::GetStackPointer | ( | ) | const [inline] |
Returns current stack pointer value.
Definition at line 116 of file hwstack.h.
References stackPointer.
Referenced by GdbServer::gdb_read_register(), GdbServer::gdb_read_registers(), ThreadList::OnCall(), GdbServer::SendPosition(), and AvrDevice::Step().
virtual unsigned char HWStack::Pop | ( | ) | [pure virtual] |
Pops one byte from stack.
Implemented in HWStackSram, and ThreeLevelStack.
Referenced by avr_op_POP::operator()().
virtual unsigned long HWStack::PopAddr | ( | ) | [pure virtual] |
Pops a address from stack.
Implemented in HWStackSram, and ThreeLevelStack.
Referenced by avr_op_RETI::operator()(), and avr_op_RET::operator()().
virtual void HWStack::Push | ( | unsigned char | val | ) | [pure virtual] |
Pushs one byte to stack.
Implemented in HWStackSram, and ThreeLevelStack.
Referenced by avr_op_PUSH::operator()().
virtual void HWStack::PushAddr | ( | unsigned long | addr | ) | [pure virtual] |
Pushs a address to stack.
Implemented in HWStackSram, and ThreeLevelStack.
Referenced by avr_op_RCALL::operator()(), avr_op_ICALL::operator()(), avr_op_EICALL::operator()(), avr_op_CALL::operator()(), and AvrDevice::Step().
void HWStack::Reset | ( | void | ) | [virtual] |
Resets stack pointer and listener table.
Reimplemented in HWStackSram, and ThreeLevelStack.
Definition at line 41 of file hwstack.cpp.
References lowestStackPointer, returnPointList, and stackPointer.
Referenced by HWStack().
void HWStack::ResetLowestStackpointer | ( | void | ) | [inline] |
Sets lowest stack marker back to current stackpointer.
Definition at line 125 of file hwstack.h.
References lowestStackPointer, and stackPointer.
void HWStack::SetReturnPoint | ( | unsigned long | stackPointer, | |
Funktor * | listener | |||
) |
Subscribes a Listener for a return address.
Attention! SetReturnPoint must get a COPY of a Funktor because it self destroy this functor after usage!
Definition at line 58 of file hwstack.cpp.
References returnPointList.
Referenced by AvrDevice::Step().
void HWStack::SetStackPointer | ( | unsigned long | val | ) | [inline] |
Sets current stack pointer value (used by GDB interface).
Definition at line 118 of file hwstack.h.
References stackPointer.
Referenced by GdbServer::gdb_write_register(), and GdbServer::gdb_write_registers().
AvrDevice* HWStack::core [protected] |
Link to device.
Definition at line 94 of file hwstack.h.
Referenced by HWStackSram::Pop(), HWStackSram::PopAddr(), HWStackSram::Push(), HWStackSram::PushAddr(), HWStackSram::Reset(), HWStackSram::SetSph(), and HWStackSram::SetSpl().
uint32_t HWStack::lowestStackPointer [protected] |
marker: lowest stackpointer used by program
Definition at line 96 of file hwstack.h.
Referenced by GetLowestStackpointer(), HWStackSram::Push(), ThreeLevelStack::PushAddr(), ThreeLevelStack::Reset(), HWStackSram::Reset(), Reset(), and ResetLowestStackpointer().
List of known threads created within target.
Definition at line 103 of file hwstack.h.
Referenced by GdbServer::gdb_get_thread_list(), GdbServer::gdb_is_thread_alive(), GdbServer::gdb_parse_packet(), GdbServer::gdb_read_registers(), HWStackSram::OnSPReadByTarget(), avr_op_RCALL::operator()(), avr_op_ICALL::operator()(), avr_op_EICALL::operator()(), avr_op_CALL::operator()(), HWStackSram::Pop(), HWStackSram::Push(), GdbServer::SendPosition(), HWStackSram::SetSph(), and HWStackSram::SetSpl().
std::multimap<unsigned long, Funktor*> HWStack::returnPointList [protected] |
Maps adresses to listeners for return addresses.
Definition at line 97 of file hwstack.h.
Referenced by CheckReturnPoints(), ThreeLevelStack::Reset(), HWStackSram::Reset(), Reset(), and SetReturnPoint().
uint32_t HWStack::stackPointer [protected] |
current value of stack pointer
Definition at line 95 of file hwstack.h.
Referenced by CheckReturnPoints(), HWStackSram::GetSph(), HWStackSram::GetSpl(), GetStackPointer(), HWStackSram::OnSPReadByTarget(), HWStackSram::Pop(), ThreeLevelStack::PopAddr(), HWStackSram::Push(), ThreeLevelStack::PushAddr(), ThreeLevelStack::Reset(), HWStackSram::Reset(), Reset(), ResetLowestStackpointer(), HWStackSram::SetSph(), HWStackSram::SetSpl(), SetStackPointer(), and ThreeLevelStack::ThreeLevelStack().