nuttx/configs/z16f2800100zcog
2014-01-22 13:46:42 -06:00
..
include 16Z: Some early bring-up fixes 2014-01-22 13:46:42 -06:00
nsh 16Z: Some early bring-up fixes 2014-01-22 13:46:42 -06:00
ostest 16Z: Some early bring-up fixes 2014-01-22 13:46:42 -06:00
pashello 16Z: Some early bring-up fixes 2014-01-22 13:46:42 -06:00
scripts z8 configurations will now build in Windows native environment 2012-11-29 15:24:27 +00:00
src Upate .gitignore files. Add .dSYM. Make sure / is present where needed. Add some missing .gitignore files 2013-05-30 14:45:31 -06:00
Kconfig Add kconfig documentation 2012-04-06 16:45:52 +00:00
README.txt configs/16z: Add support for 16z board 2014-01-22 11:50:37 -06:00

README.txt
==========

This is the README file for the NuttX port to the ZiLog ZNEO MCU.

ZDS-II Compiler Versions
========================

Version 4.10.2

  The ZDS-II version 4.10.2 will not compile NuttX.  It reports "internal
  errors" on some of the files.  Upgrades to ZDS-II are available for
  download from the Zilog website: http://www.zilog.com/software/zds2.asp

Version 4.11.0

  NuttX compiles correctly with the newer 4.11.0 version of the ZDS-II
  toolchain.  However, I have found a few issues:

  - The code will not run without the -reduceopt option.  There is,
    apparently, some optimization related issue.  This issue has not
    been analyzed as of this writing.

  - Not all NuttX logic will not run with the -regvars option.  There is
    at least one failure that has been reported to ZiLOG as incident 81400.

  - The Pascal add-on interpreter includes a large switch statement and
    exposes another compiler problem.  This is reported as incident 81459.

Version 4.11.1

  As of this writing (30 September 2010), the latest release of ZDS-II for the
  ZNEO is 4.11.1.  It is unknown if this release includes fixes for incidents
  81400 and 81459 or not.  It is unknown if the code will run without -reduceopt
  either. (Basically, it compiles with 4.11.1, but is untested with that version).

Version 5.0.1

  On November 29, 2012, all of the z16f configurations were converted to use 5.0.1,
  but have not been verified on a running target.

  Paths were also updated that are specific to a 32-bit toolchain running on
  a 64 bit windows platform.  Change to a different toolchain, you will need
  to modify the versioning in Make.defs and setenv.sh; if you want to build
  on a different platform, you will need to change the path in the ZDS binaries
  in those same files.

Other Versions

  If you use any version of ZDS-II other than 5.0.1 or if you install ZDS-II
  at any location other than the default location, you will have to modify
  two files:  (1) configs/z16f2800100zcog/*/setenv.sh and (2)
  configs/z16f2800100zcog/*/Make.defs.  Simply edit these two files, changing
  5.0.1 to whatever.

Selecting Configurations
========================

Variations on the basic z8f162800100zcog configuration are maintained
in subdirectories.  To configure any specific configuration, do the
following steps:

   cd <nuttx-top-directory>/tools
   ./configure.sh z16f2800100zcog/<sub-directory>
   cd <nuttx-top-directory>
   make

Where <sub-directory> is the specific board configuration that you
wish to build.  The following board-specific configurations are
available.

Configuration Sub-directories
=============================

source/ and include/
--------------------

  These directories contain common logic for all z16f2800100zcog
  configurations.

nsh
---
  nsh:
    This configuration directory will built the NuttShell (NSH).  See
    the NSH user manual in the documents directory (or online at nuttx.org).
    See also the README.txt file in the nsh sub-directory for information
    about using ZDS-II.

    NOTES:

    1. This configuration uses the mconf-based configuration tool.  To
       change this configuration using that tool, you should:

       a. Build and install the kconfig-mconf tool.  See nuttx/README.txt
          and misc/tools/

       b. Execute 'make menuconfig' in nuttx/ in order to start the
          reconfiguration process.

    2. By default, this configuration assumes that you are using the
       Cygwin environment on Windows.  An option is to use the native
       CMD.exe window build as described in the top-level README.txt
       file.  To set up that configuration:

       -CONFIG_WINDOWS_CYGWIN=y
       +CONFIG_WINDOWS_NATIVE=y

       And after configuring, make sure that CONFIG_APPS_DIR uses
       the back slash character.  For example:

        CONFIG_APPS_DIR="..\apps"

      NOTES:

      a. If you need to change the toolchain path used in Make.defs, you
         will need to use the short 8.3 filenames to avoid spaces.  On my
         PC, C:\PROGRA~1\ is is C:\Program Files\ and C:\PROGRA~2\ is
         C:\Program Files (x86)\
      b. I have not tried to use this configuration with the native
         Windows build, but I would expect the same issues as is listed
         for the ostest configuration..

   STATUS:
      Currently, NSH failes nsh_consoleoutput().  Here is an example.
      This echo command causes the system to hang:

        nsh> echo abc

      Below is some annotated output from the debugger.  Here is the 30,000 ft view:

        - cmd_echo loops for each argv[i], 1 >=i > argc.

        - It calls:

            vtbl->output(vtbl, "%s ", argv[i])

          where the prototype for output is:

            int (*output)(FAR struct nsh_vtbl_s *vtbl, const char *fmt, ...);

        - vtbl->output maps to nsh_consoleoutput() in this case.

        - cmd_echo passes all of the arguments to output in registers.

        - nsh_consoleoutput expects all of the parameters on the stack.

        - nsh_console calls vfprintf() using bad values from the stack.

        - vfprintf crashes and never returns.

      Looks like a compiler bug to me.

      # int cmd_echo(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
      #
      # All input parameters are in registers
      #
      #   R1=00802DA0                              # vtbl
      #   R2=00000002                              # argc
      #   R3=00802D15                              # argv
      #                                            # argv[0]=00802DD7
      #                                            # argv[1]=00802DDC
      #                                            # 00802DD7="echo\0abc\0"
      #   SP=00802CDD

      0001024C 05F0 PUSHMHI <R8-R11>               # SP=00802CCD
      0001024E 4418 LD   R8,R1                     # R8=00802DA0  vtbl
      00010250 442A LD   R10,R2                    # R10=00000002 argc
      00010252 443B LD   R11,R3                    # R11=00802D15 argv
      00010254 3901 LD   R9,#%1                    # R9=00000001  arg index
      00010256 C00C JP   %10270

      00010270 A5A9 CP   R9,R10                    # Bottom of loop
      00010272 E1F2 JP   lt,%10258

      00010258 48840010 LD   R4,%10(R8)            # R4=00011156 adddress of output() method
      0001025C 4490 LD   R0,R9                     # R0=00000001 Index of argv[1]
      0001025E BC20 SLL  R0,#%2                    # R0=00000004 Offset to argv[1]
      00010260 A0B0 ADD  R0,R11                    # R0=00802D19 Address of argv[1]
      00010262 4481 LD   R1,R8                     # R1=00802DA0 vtbl address
      00010264 452200008ADB LD   R2,#%8ADB         # R2=00008ADB = "%s "
      0001026A 1203 LD   R3,(R0)                   # R3=00802DDC Value of argv[1]
      0001026C F214 CALL (R4)                      # Call vtbl->output(vtbl, "%s ", argv[i]);
                                                   # vtbl->output is nsh_consoleoutput

      # static int nsh_consoleoutput(FAR struct nsh_vtbl_s *vtbl, const char *fmt, ...)
      #
      # All parameters are in registers:
      #
      #   R1=00802DA0 vtbl address
      #   R2=00008ADB "%s "
      #   R3=00802DDC Value of argv[1]

      # First is a check if the output file is open
      #
      #  if (nsh_openifnotopen(pstate) != 0)
      #   {
      #     return ERROR;
      #   }

      00011156 0800 LINK #%0                       # SP=00802CC9, R14=00802CC9
      00011158 5C81 LD   R1,%8(FP)                 # R1=0000017F Should be value file FILE * for output
      0001115A DF96 CALL %11088                    # Call nsh_openifnotopen(), returns R0=00000000
      0001115C 9000 CP   R0,#%0
      0001115E E602 JP   z,%11164                  # Skip over error return

      00011160 30FF LD   R0,#-%1
      00011162 C007 JP   %11172

      # Then the failing call to vfprintf:
      #
      #   va_start(ap, fmt);
      #   ret = vfprintf(pstate->cn_outstream, fmt, ap);
      #   va_end(ap);
      #
      #   return ret;

      00011164 4D03 LEA  R3,%10(FP)                # R3=00802CD5 ap=GARBAGE
      00011166 5C80 LD   R0,%8(FP)                 # R0=0000017F Should be value of pstate
      00011168 48010033 LD   R1,%33(R0)            # R1=01000000 pstate->cn_outstream.  Looks suspicious
      0001116C 5CC2 LD   R2,%C(FP)                 # R2=00802DA0
      0001116E F10003FB CALL %11968                # Call vfprintf(01000000, 00802DA0, 00802CD5)
                                                   # All arguments are bad
                                                   # Does not survive call to vfprintf

ostest
------

    This builds the examples/ostest application for execution from FLASH.
    See the README.txt file in the ostest sub-directory for information
    about using ZDS-II.  See also apps/examples/README.txt for information
    about ostest.

    NOTES:

    1. This configuration uses the mconf-based configuration tool.  To
       change this configuration using that tool, you should:

       a. Build and install the kconfig-mconf tool.  See nuttx/README.txt
          and misc/tools/

       b. Execute 'make menuconfig' in nuttx/ in order to start the
          reconfiguration process.

    2. By default, this configuration assumes that you are using the
       Cygwin environment on Windows.  An option is to use the native
       CMD.exe window build as described in the top-level README.txt
       file.  To set up that configuration:

       -CONFIG_WINDOWS_CYGWIN=y
       +CONFIG_WINDOWS_NATIVE=y

       And after configuring, make sure that CONFIG_APPS_DIR uses
       the back slash character.  For example:

        CONFIG_APPS_DIR="..\apps"

      NOTES:

      a. If you need to change the toolchain path used in Make.defs, you
         will need to use the short 8.3 filenames to avoid spaces.  On my
         PC, C:\PROGRA~1\ is is C:\Program Files\ and C:\PROGRA~2\ is
         C:\Program Files (x86)\
      b. You can't use setenv.sh in the native Windows environment.  Try
         scripts/setenv.bat instead.
      c. At present, the native Windows build fails at the final link stages.
         The failure is due to problems in arch/z16/src/nuttx.linkcmd that
         is autogenerated by arch/z16/src/Makefile.  The basic problem
         is the spurious spaces and and carrirage returns are generated at
         the end of the lines after a line continuation (\ ^M).  If these
         trailing bad characters are manually eliminated, then the build
         will succeed on the next try.

pashello
--------

    Configures to use examples/pashello for execution from FLASH
    See examples/README.txt for information about pashello.

    NOTES:

    1. This configuration uses the mconf-based configuration tool.  To
       change this configuration using that tool, you should:

       a. Build and install the kconfig-mconf tool.  See nuttx/README.txt
          and misc/tools/

       b. Execute 'make menuconfig' in nuttx/ in order to start the
          reconfiguration process.

    2. The last time I tried building this configuration, there were
       a few undefined symbols from the PCODE logic.  It might require
       a little TLC to get this all working again.

    3. The native windows build has not been tried with this configuration
       but should, in principle, work (see notes for the ostest configuration
       above).

Check out any README.txt files in these <sub-directory>s.