rtems 使用shell

本文介绍了如何在RTEMS环境中初始化Shell,并详细解释了rtems_shell_init函数的使用方法及注意事项。文中通过示例代码展示了如何创建一个专门的任务来运行Shell,并提供了配置宏定义以适应不同的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#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 */
  );

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值