Description
of RTOS Interface for Nohau® Emulator Software
5/04/99
Click Here for a Printable Version of this Page
For many
years, Nohau® has had real-time operating support. Different
flavors have been done. The implementations based on dll’s
have been mostly successful but suffered from maintenance
difficulties. Now, a new implementation method is available.
Microsoft has defined the com interfaces to enable different
applications talking to each other. A real-time operating
system (RTOS) vendor can now write an ActiveX / com object
that can present all the information on the screen for a particular
RTOS. This ActiveX component will integrate easily with ICE Technology ’s
Seehau user interface as long as it follows the Nohau® RTOS
interface specification below.
ICE Technology
is here making available the interface specification to RTOS
vendors that would like to implement an RTOS Window in Seehau.
Several development platforms can be used by the RTOS vendor
to take their current presentation screen and wrap it in an
ActiveX control wrapper. For instance, with Microsoft, an
MFC application can be used as the foundation for a presentation
screen, and then turned it into an ActiveX. The ActiveX control
usually carries the extension .ocx.
The interface
to the OCX is specified by methods and events. Methods are
functions that are called by the emulator’s user interface
(Seehau, in Nohau’s case). Events are functions that are called
by the RTOS module. Nohau® will respond to those events and,
for instance, let the RTOS module perform a read of memory
that resides in the emulator.
This document
has the intention of describing the methods that Seehau will
expect to find in the RTOS module. In addition, the section
below also describes the event functions that the RTOS module
can count on being available in Seehau.
Registry
Information
Nohau
will read the registry key under HKEY_CLASSES_ROOT\CLSID\*
looking for the keys that have a subkey Embedded RTOS debug module these entries
are for the RTOS application servers. Your install program will have to put the subkey in the registry
for your activeX module.
Methods
void ConnectEvents(
INertosEvents * ine );
The ConnectEvents
method will be the first method that is called to the RTOS
module after its creation. This method provides a Event Interface
pointer to the RTOS module. The RTOS module will use the interface
pointer when firing event:
Example:
FNertosEvents = ine;
Example:
FNertosEvents.ReadMemory(0, AppAddr, SizeOf(App), int(&App));
void Initialize(BSTR
* initstring );
The parameter
carries the name of the emulator. It should be followed by
the emulator family (EMUL51, EMUL68, EMUL16, EMUL300, EMUL196,
EMUL296, EMUL251, EMUL51XA, EMUL166, EMUL-ST10, EMUL-M16C,
EMUL12). The next parameter is optional, and will denote if
the emulator is in demo mode (DEMO). The name is emulator
manufacturer specific (Nohau in our case). The intention
with this method call is to let the RTOS module perform any
necessary initialization and notify it which emulator it is
interfacing to.
Example:
void initialize(Nohau EMUL196)
Example:
void initialize(Nohau EMUL51 DEMO)
void Endian(short
LEndian );
This method lets Seehau inform
the RTOS module if the byte order that will be used should
follow the Intel or Freescale standard. If a 1 is specified,
the byte order used will follow Intel’s standard, and the
least significant byte in a word would reside in the least
significant address. If the Endian parameter is specified
as a 0, the byte order used will follow Freescale’s standard,
and the least significant byte will reside on the highest
address of the information package transferred. Seehau will
call this method based on which emulator family that is used.
Normally, all bytes transferred between the RTOS and Seehau
will follow Intel’s standard. This method will be called after
the initialization.
void ProgramLoaded(
void );
The ProgramLoad
edmethod is called by Seehau to inform the RTOS module that
the emulator has completed a load of the customer’s application.
This method call to the RTOS module should be used to fire
ReadMemory events to pick up information regarding the loaded
application.
void ProgramReset(
void );
The ProgramReset
method is called when the emulator is reset from within Seehau.
It is possible, though, that the emulator is reset by the
target system under test and it cannot be guaranteed that
the RTOS module would be informed about this. The RTOS module
can use this method call to understand that the user application
is likely to go through its initialization sequence.
void ReadMemoryTest(short
memtype, long address, long size, long dest );
The ReadMemoryTest
method call is used to allow easy testing of the RTOS module.
It is intended that Seehau can call this method to request
the RTOS module to fire a ReadMemory event. The parameters
used in the read memory event should be the same as specified
in this method call. For explanation of the parameters, please
see under the events below.
void Started(
void );
The Started
method call is performed by Seehau after the emulator has
started code execution of the user’s application. This method
call is done to let the RTOS module know that the emulator
is busy executing user code. The emulator will therefore not
be able to respond to ReadMemory or WriteMemory events, except
for a ReadMemory event directed to ShadowRAM.
void Stopped(long
pc );
The Stopped
method call is performed by Seehau after the emulator has
stopped code execution of the user’s application. This method
call is done to let the RTOS module know that the emulator
is available. The emulator will therefore be able to respond
to ReadMemory or WriteMemory events. The parameter that is
fed in carries the program counter’s address. This address
can be used by the RTOS module to determine where code execution
stopped. Code execution can have stopped due to a breakpoint,
the user pushing the ‘stop’ button, a problem in the user
application, or the trace stopping the user application execution.
void TraceStarted(
void );
The TraceStarted
method call is performed by Seehau after the trace has started
recording. This method call is done to let the RTOS module
know that the trace is busy recording. The trace will therefore
not be able to respond to the TraceTrigger event.
void TraceStopped(
void );
The TraceStopped
method call is performed by Seehau after the trace has stopped
recording. This method call is done to let the RTOS module
know that the trace stopped because it triggered or emulation
was stopped (see Stopped method). The emulator will therefore
be able to respond to the TraceTrigger event.
void AboutBox(
void );
This method
call is performed in response to the user clicking on the
AboutBox menu item in the RTOS window. The intention is to
let the RTOS vendor present an About box containing version
number and company information.
void Terminate(
void );
The Terminate
method call is the last method call to the RTOS module before
it is expected to terminate. The intention is to allow the
RTOS module to free allocated memory and unload possible dll’s.
Events
The READ and WRITE memory events will provide bytes to the
RTOS module. If the Endian method call described above was
done specifying Freescale byte order, then it will be the
RTOS module’s responsibility to swap the bytes in the byte
buffer as needed.
void Start(
void );
This event
can be fired by the RTOS module to start the emulator. The
Start event will, of course, result in an immediate call to
the Started method.
void Stop(
void );
The Stop
event lets the RTOS module stop the emulator. The Stop event
will, of course, result in an immediate call to the Stopped
method.
void ReadMemory(short
memtype, long address, long size, long dest );
The ReadMemory
event call lets the RTOS module read memories from the emulator
/ user target system. For instance, after the Stopped method
call described above, the RTOS module is likely to want to
read memory from the emulator. The first parameter specified
in this function call is the memory type, which could be CODE,
DATA, or SHADOW. The second parameter specifies the address
from which the read should be performed. The third parameter
specifies the length in bytes of the object to be read. The
last parameter specifies a buffer destination that should
be allocated in memory by the RTOS module. It is the RTOS’s
responsibility to make sure that the allocated area is larger
or equal to the amount of bytes requested.
void WriteMemory(short
memtype, long address, long size, long source );
This event
can be fired by the RTOS module to write to the emulator memory.
The parameters are identical to the ReadMemory event as described
above with the exception of the destination pointer that now
is the source pointer that points to the memory unit containing
the bytes that should be written to the emulator. The RTOS
module can use this event call to change information in the
RTOS’s structures that reside in the emulator’s memory.
void TraceStart(
void );
This event
can be fired by the RTOS module to start the trace. The trace
is an option available for the emulator that allows recording
of execution flow. The RTOS module can set trigger points
in the trace (see TraceTrigger below). The trigger point can
result in the TraceStopped method call that would let the
RTOS module know that a certain address got executed in the
user’s application without intruding on the real-time execution.
The TraceStart event will, of course, result in an immediate
call to the TraceStarted method.
void TraceStop(
void );
The TraceStop
event lets the RTOS module stop the trace so it can be reconfigured.
The TraceStop event will, of course, result in an immediate
call to the TraceStopped method.
void Breakpoint(long
address, BSTR * state );
This event
allows the RTOS module to set a breakpoint in the user’s application.
The breakpoint will, if hit, stop execution of the user’s
application and therefore result in the Stopped method call.
The breakpoint event should only be fired from the RTOS module
if the emulator is not running. The first parameter specifies
the address where the breakpoint should be inserted. The second
parameter is a string that carries the value On or Off
to allow the RTOS module to turn on versus turn off the breakpoint.
void TraceTrigger(short
cycletype, long address, BSTR * state );
This event
can be fired by the RTOS module to set a trigger point in
the trace. A trigger point, when hit, will not stop user code
execution unless this is specifically set up in the trace
configuration screen. The RTOS module will get notified by
the TraceStopped method call when a trigger point is hit.
The intention with this event is to allow the RTOS module
to set trigger points at addresses so it can detect execution
flow. The first parameter specifies the cycle type that should
be used for the trigger. It can be DATA READ, DATA WRITE,
or CODE. The second parameter specifies the address for the
trigger point. The last parameter specifies the state of the
trigger point so the RTOS module can turn the trigger point
On and Off.
BSTR ExecCmd(
BSTR str )
The RTOS
can fire this event to execute a command in the emulator.
Using this event is optional, but offers a powerful means
to access the emulators macro capabilities (see Commands under
Help in Seehau).
Click Here for a Printable Version of this Page
Click here to display a Screen shot with a RTOS window.
Click Here to download Delphi example.
Click Here to download C++ example.
Product Focus: ICE Technology Gives RTOS Users Easy Access to Seehau Interface
|