Инструменты пользователя

Инструменты сайта


chibios:hal:shell

Встроенная командная оболочка

Документация на модуль

В Makefile в секцию CSRC следует добавить:

$(CHIBIOS)/os/various/shell.c
$(CHIBIOS)/os/various/chprintf.c

В chconf.h активируем CH_USE_MALLOC_HEAP и CH_USE_DYNAMIC.

В mcuconf.h активируем использование соответствующего USART для оболочки:

#define STM32_SERIAL_USE_USART1    TRUE

Теперь можно перейти к написанию кода. В файле cmd.h определим константы и функции:

#include <ch.h>

#define SHELL_SD         SD1
#define SHELL_WA_SIZE    THD_WA_SIZE(2048)

void cmd_init(void);
void cmd_respawn(void);

В файле cmd.c определим необходимые функции:

#include <hal.h>
#include <shell.h>
#include "cmd.h"

static Thread* th_shell;
static void cmd_mem(BaseSequentialStream* chp, int argc, char* argv[]);
static void cmd_threads(BaseSequentialStream* chp, int argc, char* argv[]);

static const ShellCommand commands[] = {
    {"mem",     (shellcmd_t) cmd_mem},
    {"threads", (shellcmd_t) cmd_threads},
    {NULL,      NULL}
};

static const ShellConfig config = {
    (BaseSequentialStream*) &SHELL_SD, commands
};

void cmd_init(void) {
    th_shell = NULL;
    shellInit();
}

void cmd_respawn(void) {
    if (!th_shell) {
        th_shell = shellCreate(&config, SHELL_WA_SIZE, NORMALPRIO);
        if (th_shell == NULL) {
            chprintf((BaseSequentialStream* &SHELL_SD,
                     "cmd_respawn: heap of %d bytes can not be allocated\n",
                     SHELL_WA_SIZE);
        }
    } else if (chThdTerminated(th_shell)) {
        chThdRelease(th_shell);
        th_shell = NULL;
    }
}

static void cmd_mem(BaseSequentialStream* chp, int argc, char* argv[]) { .. }
static void cmd_threads(BaseSequentialStream* chp, int argc, char* argv[]) { .. }

В своей программе это можно использовать следующим образом:

#include "cmd.h"

int main(void) {
    halInit();
    chSysInit();
    sdStart(&SHELL_SD, NULL);
    cmd_init();
    
    while(!chThdShouldTerminate()) {
        cmd_respawn();
        chThdSleepMilliseconds(1000);
    }
}
chibios/hal/shell.txt · Последние изменения: 2014/11/15 15:29 — Ruslan Popov