Runtime Integration: Difference between revisions

From STRIDE Wiki
Jump to navigation Jump to search
No edit summary
Line 64: Line 64:
Your target source must be edited to include code that initializes and uninitializes the runtime.
Your target source must be edited to include code that initializes and uninitializes the runtime.


Additional header files:
Example startup code:
<source lang="c">
<source lang="c">
#ifdef WIN32
#ifdef WIN32
Line 76: Line 76:
#include <stride.h>
#include <stride.h>


Example startup code:
<source lang="c">
int main(int argc, char **argv)
int main(int argc, char **argv)
{
{
Line 92: Line 90:
   }
   }


  /* target application code here */
   ...
   ...


Line 101: Line 100:
   return 0;   
   return 0;   
  }
  }
 
</source>




==Testing the Runtime Integration==
==Testing the Runtime Integration==

Revision as of 23:33, 4 June 2009

Overview

This page discuses how to incorporate the STRIDE runtime in your target application build.

Recommendations

The STRIDE target environment offers lots of flexibility to accommodate different target scenarios. For an initial target integration, we recommend that you pursue the simplest STRIDE configuration that will yield results. Once this configuration is successfully integrated you can make adjustments as desired.

Here are a few specific recommendations:

STRIDE runtime library
Build and link with the static STRIDE runtime library (libstride.a or stride.lib)
STRIDE I/O
Build and use the single process configuration instead of building and employing the STRIDE daemon

Integrating STRIDE Into Your Target Build

To add the STRIDE runtime to your build process, the following changes must be made:

  • Secure a PAL targeted to your target operating system
  • Configure the PAL I/O parameters to conform the your target hardware
  • Edit your target application's source code to start the runtime's I/O thread
  • Add steps to your target build process to include the STRIDE runtime source files

Securing a PAL

The Platform Abstraction Layer (PAL) provides the glue between the STRIDE runtime and services offered by your OS. It is the only piece of the runtime that is customized between operating systems.

Fully tested PALs are provided for Linux and Windows, included as palIO.c and palOS.c in their respective SDKs. Other PALs are also available or under development. Please contact S2 for availability.

Configuring I/O parameters

If your target will communicate with the host computer via the default of TCP/IP port 8000, you can skip this step.

Otherwise, refer to palcfg.h for a list of configuration parameters.

For complete information, refer to the Platform Abstraction Layer page and the PAL Specification document.

Including the STRIDE Runtime Sources

The STRIDE runtime sources are distributed in source form. The source files are available as a stand-alone package and are also included with each flavor of SDK package.

The runtime sources are supplied in three directories:

GRS
Generic RTOS Services
Runtime
STRIDE runtime
SLAP
Simplified Link-layer Application Protocol

If you are using an S2-supplied PAL, files in each of these directories should be included in your target build.

If you are using an S2-supplied PAL, additional required sources can be found in the SDK's src directory:

  • PAL implementation
    • palcfg.h
    • palIO.c
    • palOS.c
  • Convenience functions (these wrap low-level STRIDE runtime calls)
    • stride.c
    • stride.h

The SDKs inlclude the runtime sources by building them into a library that is then linked with the target application.

Target Source Changes

Your target source must be edited to include code that initializes and uninitializes the runtime.

Example startup code:

#ifdef WIN32
#include <windows.h>
#include <tchar.h>
#else
#include <stdlib.h>
#include <unistd.h>
#endif
/* STRIDE runtime includes */
#include <stride.h>

int main(int argc, char **argv)
{
   ...

/* initialize the STRIDE subsytem using default I/O */
   strideIO_t io = {strideDEFAULT};
/* for C++ use
   strideIO_t io = {strideIO_t::strideDEFAULT};
*/
    
   if (strideInit(&io) != srTRUE) {
       return -1;
   }

   /* target application code here */
   ...

/* this call blocks until a SIGTERM is received, omit if not needed */
   strideExWaitForExit();

/* terminate all STRIDE threads and uninitialize STRIDE subsystem */
   strideUninit();
   return 0;   
 }


Testing the Runtime Integration