当前位置: 首页 > 工具软件 > RTEMS > 使用案例 >

rtems 使用shell

权黎昕
2023-12-01
#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 */
  );

 类似资料: