diff --git a/ChangeLog.txt b/ChangeLog.txt index ffcbcf14a..40c511e20 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -748,4 +748,7 @@ * apps/nshlib/nsh_mntcmds.c: Modified the df -h logic to eliminate truncating numbers in conversion (like 7900 -> 7M). From Ken Pettit (2013-12-12). + * Moved configs/stm3240g-eval/src/up_cxxinitialize.c to + apps/platform/stm3240g-eval/up_cxxinitialize.c: Now it is available + in user-space in the kernel mode build (2013-12-29). diff --git a/nshlib/README.txt b/nshlib/README.txt index 8b2d4bcdd..dcc4ec711 100644 --- a/nshlib/README.txt +++ b/nshlib/README.txt @@ -48,8 +48,8 @@ Command Overview Where: is any one of the simple commands listed later. - is the full or relative path to any writable object - in the filesystem name space (file or character driver). + is the full or relative path to any writeable object + in the file system name space (file or character driver). Such objects will be referred to simply as files throughout this README. @@ -68,7 +68,7 @@ Conditional Command Execution An if-then[-else]-fi construct is also supported in order to support conditional execution of commands. This works from the command line but is primarily intended for use within NSH scripts - (see the sh commnd). The syntax is as follows: + (see the sh command). The syntax is as follows: if then @@ -120,14 +120,14 @@ In this default case, enabling CONFIG_NSH_ROMFSETC will cause NSH to behave as follows at NSH startup time: - NSH will create a read-only RAM disk (a ROM disk), containing a tiny - ROMFS filesystem containing the following: + ROMFS file system containing the following: |--init.d/ `-- rcS Where rcS is the NSH start-up script -- NSH will then mount the ROMFS filesystem at /etc, resulting in: +- NSH will then mount the ROMFS file system at /etc, resulting in: |--dev/ | `-- ram0 @@ -198,7 +198,7 @@ NOTE: All of the startup-behavior is contained in rcS.template. The role of mkromfsimg.sh is to (1) apply the specific configuration settings to rcS.template to create the final rcS, and (2) to -generate the header file nsh_romfsimg.h containg the ROMFS +generate the header file nsh_romfsimg.h containing the ROMFS file system image. Simple Commands @@ -252,7 +252,7 @@ o base64dec [-w] [-f] o cat [ [ ...]] - This command copies and concatentates all of the files at + This command copies and concatenates all of the files at to the console (or to another file if the output is redirected). o cd [|-|~|..] @@ -280,7 +280,7 @@ o cmp o cp Copy of the contents of the file at to the location - in the filesystem indicated by + in the file system indicated by o date [-s "MMM DD HH:MM:SS YYYY"] @@ -399,7 +399,7 @@ o get [-b|-n] [-f ] -h The file will be saved relative to the current working directory unless is provided. -b|-n - Selects either binary ("octect") or test ("netascii") transfer + Selects either binary ("octet") or test ("netascii") transfer mode. Default: text. o help [-v] [] @@ -487,7 +487,7 @@ o losetup [-d ] | [[-o ] [-r] ] o ls [-lRs] Show the contents of the directory at . NOTE: - must refer to a directory and no other filesystem + must refer to a directory and no other file system object. Options: @@ -539,10 +539,10 @@ o mkdir except the final directory name must exist on a mounted file system; the final directory must not. - Recall that NuttX uses a pseudo filesystem for its root file system. + Recall that NuttX uses a pseudo file system for its root file system. The mkdir command can only be used to create directories in volumes set up with the mount command; it cannot be used to create directories - in the pseudo filesystem. + in the pseudo file system. Example: ^^^^^^^^ @@ -563,7 +563,7 @@ o mkfatfs [-F ] specified on the command line. NSH provides this command to access the mkfatfs() NuttX API. - This block device must reside in the NuttX pseudo filesystem and + This block device must reside in the NuttX pseudo file system and must have been created by some call to register_blockdriver() (see include/nuttx/fs/fs.h). @@ -650,14 +650,14 @@ o mount [-t ] of this writing, vfat is the only supported value for Block Device. The argument is the full or relative - path to a block driver inode in the pseudo filesystem. By convention, + path to a block driver inode in the pseudo file system. By convention, this is a name under the /dev sub-directory. This must have been previously formatted with the same file system type as specified by Mount Point. The mount point is the location in the pseudo file system where the mounted volume will appear. This mount point - can only reside in the NuttX pseudo filesystem. By convention, this + can only reside in the NuttX pseudo file system. By convention, this mount point is a subdirectory under /mnt. The mount command will create whatever pseudo directories that may be needed to complete the full path but the full path must not already exist. @@ -697,7 +697,7 @@ o mount [-t ] o mv Rename the file object at to . Both paths must - reside in the same mounted filesystem. + reside in the same mounted file system. o nfsmount @@ -744,7 +744,7 @@ o put [-b|-n] [-f ] -h The file will be saved with the same name on the host unless unless is provided. -b|-n - Selects either binary ("octect") or test ("netascii") transfer + Selects either binary ("octet") or test ("netascii") transfer mode. Default: text. o pwd @@ -765,10 +765,10 @@ o pwd o rm Remove the specified name from the mounted file system. - Recall that NuttX uses a pseudo filesystem for its root file system. + Recall that NuttX uses a pseudo file system for its root file system. The rm command can only be used to remove (unlink) files in volumes set up with the mount command; it cannot be used to remove names from - the pseudo filesystem. + the pseudo file system. Example: ^^^^^^^^ @@ -786,10 +786,10 @@ o rm o rmdir Remove the specified directory from the mounted file system. - Recall that NuttX uses a pseudo filesystem for its root file system. The + Recall that NuttX uses a pseudo file system for its root file system. The rmdir command can only be used to remove directories from volumes set up with the mount command; it cannot be used to remove directories from the - pseudo filesystem. + pseudo file system. Example: ^^^^^^^^ @@ -940,13 +940,13 @@ Command Dependencies on Configuration Settings * NOTES: 1. Because of hardware padding, the actual buffersize required for put and get operations size may be larger. - 2. Special TFTP server start-up optionss will probably be required to permit + 2. Special TFTP server start-up options will probably be required to permit creation of file for the correct operation of the put command. 3. CONFIG_FS_READABLE is not a user configuration but is set automatically - if any readable filesystem is selected. At present, this is either CONFIG_FS_FAT + if any readable file system is selected. At present, this is either CONFIG_FS_FAT and CONFIG_FS_ROMFS. 4. CONFIG_FS_WRITABLE is not a user configuration but is set automatically - if any writable filesystem is selected. At present, this is only CONFIG_FS_FAT. + if any writeable file system is selected. At present, this is only CONFIG_FS_FAT. In addition, each NSH command can be individually disabled via one of the following settings. All of these settings make the configuration of NSH potentially complex but @@ -986,7 +986,7 @@ NSH-Specific Configuration Settings * CONFIG_NSH_FILEIOSIZE Size of a static I/O buffer used for file access (ignored if - there is no filesystem). Default is 1024. + there is no file system). Default is 1024. * CONFIG_NSH_STRERROR strerror(errno) makes more readable output but strerror() is @@ -1023,7 +1023,7 @@ NSH-Specific Configuration Settings Default is zero. * CONFIG_NSH_ROMFSETC - Mount a ROMFS filesystem at /etc and provide a startup script + Mount a ROMFS file system at /etc and provide a startup script at /etc/init.d/rcS. The default startup script will mount a FAT FS RAMDISK at /tmp but the logic is easily extensible. diff --git a/nshlib/nsh_netcmds.c b/nshlib/nsh_netcmds.c index 3ff19a090..5c76aca0e 100644 --- a/nshlib/nsh_netcmds.c +++ b/nshlib/nsh_netcmds.c @@ -116,7 +116,7 @@ #if defined(CONFIG_NET_UDP) && CONFIG_NFILE_DESCRIPTORS > 0 struct tftpc_args_s { - bool binary; /* true:binary ("octect") false:text ("netascii") */ + bool binary; /* true:binary ("octet") false:text ("netascii") */ bool allocated; /* true: destpath is allocated */ char *destpath; /* Path at destination */ const char *srcpath; /* Path at src */ @@ -502,6 +502,7 @@ int cmd_get(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv) { free(args.destpath); } + free(fullpath); return OK; } @@ -596,7 +597,7 @@ int cmd_ifconfig(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv) } /* If both the network interface name and an IP address are supplied as - * arguments, then ifconfig will set the address of the ethernet device: + * arguments, then ifconfig will set the address of the Ethernet device: * * ifconfig nic_name ip_address */ @@ -677,7 +678,7 @@ int cmd_ifconfig(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv) return ERROR; } - /* Set Hardware ethernet MAC addr */ + /* Set Hardware Ethernet MAC address */ if (hw) { @@ -915,12 +916,12 @@ int cmd_ping(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv) (ipaddr >> 16 ) & 0xff, (ipaddr >> 24 ) & 0xff, DEFAULT_PING_DATALEN); - start = g_system_timer; + start = clock_systimer(); for (i = 1; i <= count; i++) { /* Send the ECHO request and wait for the response */ - next = g_system_timer; + next = clock_systimer(); seqno = uip_ping(ipaddr, id, i, DEFAULT_PING_DATALEN, maxwait); /* Was any response returned? We can tell if a non-negative sequence @@ -934,7 +935,7 @@ int cmd_ping(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv) * to an earlier request, then fudge the elpased time. */ - elapsed = TICK2MSEC(g_system_timer - next); + elapsed = TICK2MSEC(clock_systimer() - next); if (seqno < i) { elapsed += 100 * dsec * (i - seqno); @@ -952,7 +953,7 @@ int cmd_ping(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv) * to the current request! */ - elapsed = TICK2DSEC(g_system_timer - next); + elapsed = TICK2DSEC(clock_systimer() - next); if (elapsed < dsec) { usleep(100000 * (dsec - elapsed)); @@ -961,7 +962,7 @@ int cmd_ping(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv) /* Get the total elapsed time */ - elapsed = TICK2MSEC(g_system_timer - start); + elapsed = TICK2MSEC(clock_systimer() - start); /* Calculate the percentage of lost packets */ @@ -1013,6 +1014,7 @@ int cmd_put(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv) { free(args.destpath); } + free(fullpath); return OK; } @@ -1123,7 +1125,7 @@ int cmd_wget(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv) { nsh_output(vtbl, g_fmtcmdfailed, argv[0], "wget", NSH_ERRNO); goto exit; - } + } /* Free allocated resources */ @@ -1132,18 +1134,22 @@ exit: { close(fd); } + if (allocfile) { free(allocfile); } + if (fullpath) { free(fullpath); } + if (buffer) { free(buffer); } + return ret; errout: diff --git a/platform/stm3240g-eval/Kconfig b/platform/stm3240g-eval/Kconfig new file mode 100644 index 000000000..647715b83 --- /dev/null +++ b/platform/stm3240g-eval/Kconfig @@ -0,0 +1,8 @@ +# +# For a description of the syntax of this configuration file, +# see misc/tools/kconfig-language.txt. +# + +if ARCH_BOARD_STM3240G_EVAL + +endif diff --git a/platform/stm3240g-eval/Make.defs b/platform/stm3240g-eval/Make.defs new file mode 100644 index 000000000..c09fbba03 --- /dev/null +++ b/platform/stm3240g-eval/Make.defs @@ -0,0 +1,40 @@ +############################################################################ +# apps/platform/stm3240g-eval/Make.defs +# +# Copyright (C) 2013 Gregory Nutt. All rights reserved. +# Author: Gregory Nutt +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# 3. Neither the name NuttX nor the names of its contributors may be +# used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS +# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED +# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +############################################################################ + +# Add platform specific sources to ASRCS and CSRCS + +ifeq ($(CONFIG_HAVE_CXX),y) +CSRCS += up_cxxinitialize.c +endif diff --git a/platform/stm3240g-eval/up_cxxinitialize.c b/platform/stm3240g-eval/up_cxxinitialize.c new file mode 100644 index 000000000..de17dd36b --- /dev/null +++ b/platform/stm3240g-eval/up_cxxinitialize.c @@ -0,0 +1,152 @@ +/************************************************************************************ + * apps/platform/stm3240g-eval/src/up_cxxinitialize.c + * + * Copyright (C) 2012-2013 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name NuttX nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ************************************************************************************/ + +/************************************************************************************ + * Included Files + ************************************************************************************/ + +#include + +#include + +#include + +#include + +#if defined(CONFIG_HAVE_CXX) && defined(CONFIG_HAVE_CXXINITIALIZE) + +/************************************************************************************ + * Definitions + ************************************************************************************/ +/* Debug ****************************************************************************/ +/* Non-standard debug that may be enabled just for testing the static constructors */ + +#ifndef CONFIG_DEBUG +# undef CONFIG_DEBUG_CXX +#endif + +#ifdef CONFIG_DEBUG_CXX +# define cxxdbg dbg +# define cxxlldbg lldbg +# ifdef CONFIG_DEBUG_VERBOSE +# define cxxvdbg vdbg +# define cxxllvdbg llvdbg +# else +# define cxxvdbg(x...) +# define cxxllvdbg(x...) +# endif +#else +# define cxxdbg(x...) +# define cxxlldbg(x...) +# define cxxvdbg(x...) +# define cxxllvdbg(x...) +#endif + +/************************************************************************************ + * Private Types + ************************************************************************************/ +/* This type defines one entry in initialization array */ + +typedef void (*initializer_t)(void); + +/************************************************************************************ + * External references + ************************************************************************************/ +/* _sinit and _einit are symbols exported by the linker script that mark the + * beginning and the end of the C++ initialization section. + */ + +extern initializer_t _sinit; +extern initializer_t _einit; + +/* _stext and _etext are symbols exported by the linker script that mark the + * beginning and the end of text. + */ + +extern uint32_t _stext; +extern uint32_t _etext; + +/************************************************************************************ + * Private Functions + ************************************************************************************/ + +/************************************************************************************ + * Public Functions + ************************************************************************************/ + +/**************************************************************************** + * Name: up_cxxinitialize + * + * Description: + * If C++ and C++ static constructors are supported, then this function + * must be provided by board-specific logic in order to perform + * initialization of the static C++ class instances. + * + * This function should then be called in the application-specific + * user_start logic in order to perform the C++ initialization. NOTE + * that no component of the core NuttX RTOS logic is involved; This + * function defintion only provides the 'contract' between application + * specific C++ code and platform-specific toolchain support + * + ***************************************************************************/ + +void up_cxxinitialize(void) +{ + initializer_t *initp; + + cxxdbg("_sinit: %p _einit: %p _stext: %p _etext: %p\n", + &_sinit, &_einit, &_stext, &_etext); + + /* Visit each entry in the initialzation table */ + + for (initp = &_sinit; initp != &_einit; initp++) + { + initializer_t initializer = *initp; + cxxdbg("initp: %p initializer: %p\n", initp, initializer); + + /* Make sure that the address is non-NULL and lies in the text region + * defined by the linker script. Some toolchains may put NULL values + * or counts in the initialization table + */ + + if ((void*)initializer > (void*)&_stext && (void*)initializer < (void*)&_etext) + { + cxxdbg("Calling %p\n", initializer); + initializer(); + } + } +} + +#endif /* CONFIG_HAVE_CXX && CONFIG_HAVE_CXXINITIALIZE */