Перейти к содержанию
    

FreeRTOS-CLI для stm32f411 - простой пример для rs232

Приветствую!

Пытаюсь запустить командную строку FreeRTOS-CLI для своего проекта stm32f411.

Большие сложности, документация во многом непонятная, примеров нормальных простых не могу найти.

Хочу из UART ISR передавать данные через очередь в обработчик командной строки и там выполнять пару команд.
Положил из \FreeRTOS-Plus\Source\FreeRTOS-Plus-CLI\  FreeRTOS_CLI.c и FreeRTOS_CLI.h в папку с проектом (CubeIDE)

Дальше надо писать задачу обработки самого CLI и обработчик прерывания. Посоветуйте нормальное руководство или простой пример?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кажется начинаю понимать концепцию. В центре всего есть задача обработки командной строки, назовем ее

vCommandConsoleTask  хотя название любое. Она получает данные по rs232, формирует строку команды и передает ее в функцию

FreeRTOS-CLI под названием FreeRTOS_CLIProcessCommand()

А эта функция уже разбирается с командой и возвращает указатель на строку результата.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я использую библиотеку microRL для микроконтроллеров. Не зависит от внешней ОС, да и вообще мало от чего зависит. Умеет Escape-последовательности, сама разбивает введённую команду на слова (да, по пробелам), вызывает обработчик, объявленный в коде. Довольно легковесная. Пишет в объявленную функцию, принимающую строку.

Успешно работает на AVR (относительно мелких с 1kiB+ RAM), STM32, ESP32, PC (да, я перетянул это в утилиту, работающуюу из командной строки, костылями, но перетянул).

 

В общем виде:

Спойлер
#include "microrl.h"

<...>
microrl_t rl;
microrl_t * prl = &rl;
char * complete_variants[64];			// Подсказки команд. Не более 64 штук.

<...>
	microrl_init (prl, console_put);			// Инициализпция консоли Microrl
	microrl_set_complete_callback(prl, console_complete);	// Выставляем callback "Дополнить!"
	microrl_set_execute_callback(prl, console_execute);	// Добавляем callback на выполнение.

<...>
void USART3_IRQHandler(void) {
  <...>
  microrl_insert_char(prl, tmp);
  <...>
}

void console_put_char(const char data) {
    while(*text) {
       <...>
    }
}
         
char ** console_complete(int param_count, const char* const* params) {
	uint8_t j = 0;
	uint16_t i=0;
	char * bit;
	complete_variants[0] = NULL;				// Если ничего не нашлось.
	if (param_count == 0) {
		// Не введено ничего.
		for (; j < (sizeof(keywords) / sizeof(keywords[0])); j++) {
			complete_variants[j] = keywords[j];
		}
	}
	if (param_count == 1) {
		// Введён только 1 токен (слово)
		bit = (char*)params [0];		// Получаем последний введённый (первый же)
		for (i = 0; i < (sizeof(keywords) / sizeof(keywords[0])); i++) {
			// Если токен совпадает...
			if (strstr(keywords[i], bit) == keywords[i]) {
				// Добавляем его к списку слов.
				complete_variants[j++] = keywords[i];
			}
		}
	}
	complete_variants[j] = NULL;
	return complete_variants;
}
int console_execute(int param_count, const char* const* args) {
	if (!strcmp(args[0], "help")) {
		console_put("Ssory, Mario, but it's test build.\r\n");
		console_put("Avalable commands: reboot\r\n"); // Placeholder, lol.
		return 0;	// Normal execute
	} else 	if (!strcmp(args[0], "batt_rst")) {
		I2C_Write16(0x6C, 0x06, 0x4000);
		return 0;	// Normal execute
	}
    return 0;	// В любом случае нормальное выполнение
}

 

Изменено пользователем AlanDrakes
Спрятал код под спойлер.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...