Overview
--------
This directory contains all of the materials provided by part 2 of the
EclipseCon 2009 "Getting Started with RTSC" tutorial.  In particular:

    docs -     contains the tutorial slides and the sub-directory docs/ref
               contains reference material for the HW and compiler used in 
               this part of the tutorial.

    examples - contains all source code for the examples presented (as
               well as a few more).  Thee examples can be built from the 
               command line via xdc or from within Eclipse (as described 
               below).

    eclipse -  contains a plug-in used in the tutorial for browsing RTSC
               packages from within Eclipse.

    patches -  contains patches necessary to enable SimpliciTI 1.0.6 to be 
               used with the TI compiler.

    makefile - this makefile builds all the examples

Build
-----
  These instructions summarize the setps necessary to build the examples that
  are part of the tutorial.  The tutorial slides (docs/tutorial.ppt) provide
  additional details including links to the various web sites containig
  pre-requisite tools.

  Requirements
  ------------
    o XDCtools 3.15.00.33 (or above) must be installed somewhere; we use 
      $XDCROOT below to refer to the absolute path of where XDCtools is
      installed. 
      (https://www-a.ti.com/downloads/sds_support/targetcontent/rtsc/index.html)

    o Code Composer Essentials 3.1 must be installed somewhere; if you
      accept the default installation directories you won't have to edit
      some settings described below.
      (http://focus.ti.com/docs/toolsw/folders/print/msp-cce430.html)

    o the zip file rxtx-2.1-7-bins-r2.zip (coresponding to the 2.1.7R2 
      release of RXTX) must be copied into packages/thirdparty/rxtx
      (http://rxtx.qbang.org/wiki/index.php/Download)

    o SimpliciTI 1.0.6 must be installed as ./SimpliciTI-1.0.6.
      Alternatively, a zip file containing SimpliciTI-1.0.6 (the entire
      contents of the SimpliciTI 1.0.6 installation directory) must be
      copied to ./SimpliciTI-1.0.6.zip
      (http://focus.ti.com/docs/toolsw/folders/print/simpliciti.html)

  To build all examples
  ---------------------
  We use "make" below to refer to the 3.81 version of GNU make.  If you do
  not have this version (or later) of GNU make, you can use the one
  suppplied with XDCtools: $XDCROOT/gmake

    o edit packages/config.bld and packages/common.mak to reflect your
      tools installation choices made above.

    o cd to the directory containing this README file and type:
	  make

  To build individual examples
  ----------------------------
  Most examples are in a RTSC package.  To build these examples, simply cd
  to the example's package base and type:
      $XDCROOT/xdc

  Some examples are simply directories with a make file (named "makefile").
  To build these examples simply type:
      make

  To build within Eclipse
  -----------------------
  Each individual example has an associated CDT project.  This allow you to 
  import the example into Eclipse and build using standard CDT mechanisms.
  The tutorial slides (docs/tutorial-part2.ppt slides 35-40)) illustrate the
  steps.
