To use shell commands, four files, in addition to the generic file system files, must be included in the build:

  • fs_shell.c
  • fs_shell.h
  • shell.c (located in \Micrium\Software\uC-Shell\Source)
  • shell.h (located in \Micrium\Software\uC-Shell\Source)
  • The file fs_shell.h and shell.h must also be #included in any application or header files initialize µC/Shell or handle shell commands. The shell command configuration file (fs_shell_cfg.h) should be copied to your application directory and modified. The following directories must be on the project include path:

  • \Micrium\Software\uC-FS\Cmd
  • \Micrium\Software\uC-Shell\Source
  • µC/Shell with the µC/FS shell commands is initialized in Listing F-1. The file system initialization (FS_Init()) function should have previously been called.

    CPU_BOOLEAN  App_ShellInit (void)
    {
        CPU_BOOLEAN  ok;
        ok = Shell_Init();
        if (ok == DEF_FAIL) {
            return (DEF_FAIL);
        }
        
        ok = FSShell_Init();
        if (ok == DEF_FAIL) {
            return (DEF_FAIL;
        }
        return (DEF_OK);
    }
    

    Listing F-1 Initializing µC/Shell

    It’s assumed that the application will create a task to receive input from a terminal; this task should be written as shown in Listing F-2.

    void  App_ShellTask (void *p_arg)
    {
        CPU_CHAR          cmd_line[MAX_CMD_LEN];
        SHELL_ERR         err;
        SHELL_CMD_PARAM   cmd_param;
        CPU_CHAR          cwd_path[FS_CFG_FULL_ NAME_LEN + 1u];
     
                                                      /* Init cmd param (see Note #1). */
        Str_Copy(&cwd_path[0], (CPU_CHAR *)"\\");
        cmd_param.pcur_working_dir = (void *)cwd_path[0];
        cmd_param.pout_opt         = (void *)0;
     
        while (DEF_TRUE) {
            App_ShellIn(cmd_line, MAX_CMD_LEN);       /* Rd  cmd        (see Note #2). */
                                                      /* Exec cmd       (see Note #3). */
            Shell_Exec(cmd_line, App_ShellOut, &cmd_param, &err);
            switch (err) {
                case SHELL_ERR_CMD_NOT_FOUND:
                case SHELL_ERR_CMD_SEARCH:
                case SHELL_ERR_ARG_TBL_FULL:
                     App_ShellOut("Command not found\r\n", 19, cmd_param.pout_opt);
                     break;
                default:
                     break;
            }    
        }
    }
     
    /*
    **************************************************************************************
    *                                    App_ShellIn()
    ******************************************************************************1*******
    */
    CPU_INT16S  App_ShellIn (CPU_CHAR    *pbuf,       
                             CPU_INT16U   buf_len)
    {
        /* $$$$ Store line from terminal/command line into 'pbuf'; return length of line. */
    }
    /*
    **************************************************************************************
    *                                    App_ShellOut()
    ******************************************************************************1*******
    */
    CPU_INT16S  App_ShellOut (CPU_CHAR    *pbuf,
                              CPU_INT16U   buf_len,
                              void        *popt)
    {
        /* $$$$ Output 'pbuf' data on terminal/command line;  return nbr bytes tx'd. */
    }
    

    Listing F-2 Executing shell commands & handling shell output

    LF-2(1) The SHELL_CMD_PARAM structure that will be passed to Shell_Exec() must be initialized. The pcur_working_dir member must be assigned a pointer to a string of at least FS_SHELL_CFG_MAX_PATH_LEN characters. This string must have been initialized to the default working directory path; if the root directory, “\”.

    LF-2(2) The next command, ending with a newline, should be read from the command line.

    LF-2(3) The received command should be executed with Shell_Exec(). If the command is a valid command, the appropriate command function will be called. For example, the command “fs_ls” will result in FSShell_ls() in fs_shell.c being called. FSShell_ls() will then print the entries in the working directory to the command line with the output function App_ShellOut(), passed as the second argument of Shell_Exec().