Source code
            #include "chip.h"
#include "uart.h"
#include "microshell.h"
#include "mscmd.h"
#include <cr_section_macros.h>
typedef struct {
    void (*puts)(char *str);
} USER_OBJECT;
static MSCMD_USER_RESULT usrcmd_system(MSOPT *msopt, MSCMD_USER_OBJECT usrobj);
static MSCMD_USER_RESULT usrcmd_config(MSOPT *msopt, MSCMD_USER_OBJECT usrobj);
static MSCMD_USER_RESULT usrcmd_help(MSOPT *msopt, MSCMD_USER_OBJECT usrobj);
static MSCMD_COMMAND_TABLE table[] = {
    {   "system",   usrcmd_system   },
    {   "config",   usrcmd_config   },
    {   "help",     usrcmd_help     },
    {   "?",        usrcmd_help     },
};
static void utx(char c)
{
    uart_putc(c);
}
static char urx(void)
{
    return uart_getc();
}
static void action_hook(MSCORE_ACTION action)
{
}
int main(void)
{
    char buf[MSCONF_MAX_INPUT_LENGTH];
    MICROSHELL ms;
    MSCMD mscmd;
    USER_OBJECT usrobj = {
        .puts = uart_puts,
    };
    SystemCoreClockUpdate();
    uart_init();
    uart_puts(
            "\r\n\r\n"
            "======================================\r\n"
            " MicroShell Simple Example for LPC824 \r\n"
            "======================================\r\n"
            );
    uart_puts(" Type 'help' for a list of commands.\r\n");
    microshell_init(&ms, utx, urx, action_hook);
    mscmd_init(&mscmd, table, sizeof(table) / sizeof(table[0]), &usrobj);
    while (1) {
        MSCMD_USER_RESULT r;
        uart_puts("MicroShell>");
        microshell_getline(&ms, buf, sizeof(buf));
        mscmd_execute(&mscmd, buf, &r);
    }
    return 0;
}
static MSCMD_USER_RESULT usrcmd_system(MSOPT *msopt, MSCMD_USER_OBJECT usrobj)
{
    char buf[MSCONF_MAX_INPUT_LENGTH];
    int argc;
    int i;
    uart_puts("[SYSTEM]\r\n");
    msopt_get_argc(msopt, &argc);
    for (i = 0; i < argc; i++) {
        msopt_get_argv(msopt, i, buf, sizeof(buf));
        uart_puts(" '");
        uart_puts(buf);
        uart_puts("'\r\n");
    }
    return 0;
}
static MSCMD_USER_RESULT usrcmd_config(MSOPT *msopt, MSCMD_USER_OBJECT usrobj)
{
    char buf[MSCONF_MAX_INPUT_LENGTH];
    int argc;
    int i;
    uart_puts("[CONFIG]\r\n");
    msopt_get_argc(msopt, &argc);
    for (i = 0; i < argc; i++) {
        msopt_get_argv(msopt, i, buf, sizeof(buf));
        uart_puts(" '");
        uart_puts(buf);
        uart_puts("'\r\n");
    }
    return 0;
}
static MSCMD_USER_RESULT usrcmd_help(MSOPT *msopt, MSCMD_USER_OBJECT usrobj)
{
    USER_OBJECT *uo = (USER_OBJECT *)usrobj;
    uo->puts(
            "system : system command\r\n"
            "config : config command\r\n"
            "help   : help command\r\n"
            );
    return 0;
}
            Console I/O example
            MicroShell>
MicroShell>
MicroShell>help
system : system command
config : config command
help   : help command
MicroShell>system arg1 arg2 arg3
[SYSTEM]
 'system'
 'arg1'
 'arg2'
 'arg3'
MicroShell>system   arg1   arg2   arg3
[SYSTEM]
 'system'
 'arg1'
 'arg2'
 'arg3'
MicroShell>
MicroShell>config arg1 arg2 arg3
[CONFIG]
 'config'
 'arg1'
 'arg2'
 'arg3'
MicroShell>config   arg1   arg2   arg3
[CONFIG]
 'config'
 'arg1'
 'arg2'
 'arg3'