#include <stdlib.h>
#include <stdio.h>
#include <bsp.h>
#include <rtems/shell.h>
static rtems_task user_task (rtems_task_argument ignored)
{
printf("In User tASK\n");
printf("starting shell\n");
rtems_shell_init(
"SHLL", /* task_name */
RTEMS_MINIMUM_STACK_SIZE * 4, /* task_stacksize */
100, /* task_priority */
"/dev/console", /* devname */
false, /* forever */
true, /* wait */
NULL /* login */
);
while (1)
{
}
}
rtems_task Init(rtems_task_argument ignored)
{
rtems_name Task_name;
rtems_id Task_id;
rtems_status_code status;
printf( "\n\n*** HELLO WORLD Etual ***\n" );
Task_name = rtems_build_name('U','S','E','R');
status = rtems_task_create(
Task_name, 1, RTEMS_MINIMUM_STACK_SIZE * 2,
RTEMS_DEFAULT_MODES ,
RTEMS_FLOATING_POINT | RTEMS_DEFAULT_ATTRIBUTES, &Task_id
);
status = rtems_task_start( Task_id, user_task, 1 );
status = rtems_task_delete( RTEMS_SELF );
}
#define CONFIGURE_SHELL_COMMANDS_INIT
#define CONFIGURE_SHELL_COMMANDS_ALL
#define CONFIGURE_SHELL_COMMANDS_ALL_NETWORKING
#include <rtems/shellconfig.h>
/* configuration for shell test */
#define CONFIGURE_APPLICATION_NEEDS_LIBBLOCK
#define CONFIGURE_MAXIMUM_TASKS 20
#define CONFIGURE_MAXIMUM_SEMAPHORES 20
#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 20
#define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS 20
#define CONFIGURE_STACK_CHECKER_ENABLED
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
#define CONFIGURE_EXTRA_TASK_STACKS (6 * RTEMS_MINIMUM_STACK_SIZE)
#define CONFIGURE_MALLOC_STATISTICS
#define CONFIGURE_UNIFIED_WORK_AREAS
/* basic configuration */
#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
#define CONFIGURE_INIT
#include <rtems/confdefs.h>
注意,执行了 rtems_shell_init 之后是不会返回的,除非shell logout(在shell中输入命令 logoff)才会返回。
所以应该注意,用单独的一个线程来调用这个初始化函数。
最后一个参数,可以使用如下方式来做一个登陆的操作。
rtems_shell_init(
"SHLL", /* task_name */
RTEMS_MINIMUM_STACK_SIZE * 4, /* task_stacksize */
100, /* task_priority */
"/dev/console", /* devname */
false, /* forever */
true, /* wait */
rtems_shell_login_check /* login */
);