FreeRTOS-Plus-IO 集成
FreeRTOS-Plus-CLI 是一个可扩展的框架,
应用程序编写者可以通过该框架定义并注册自己的命令行输入命令。此框架提供了单独的
文档页面,描述了
如何编写函数来
实现用户定义命令的行为 ,以及
如何
使用 FreeRTOS-Plus-CLI 注册用户定义命令。
此页详细描述了
如何将 FreeRTOS-Plus-CLI 移植到真实硬件上,
具体做法是通过提供输入输出 (IO) 例程和 FreeRTOS-Plus-CLI 任务。
输入和输出
命令行接口可从输入接收字符,并写入
字符到输出。如何实现这一目标的低层次细节
取决于所使用的微控制器,以及由
微控制器提供的接口。
有一项 FreeRTOS-Plus-CLI 特色演示,使用了 FreeRTOS-Plus-IO
FreeRTOS_read()
和
FreeRTOS_write()
API 函数,向 UART 提供必要的
输入和输出。它创建的命令行接口可通过
标准哑终端程序(如 HyperTerminal)进行访问。
还有另一项 FreeRTOS-Plus-CLI 特色演示,使用了 TCP/IP 套接字
接口,提供必要的输入和输出。其创建的命令行接口
可使用 telnet 客户端进行访问。FreeRTOS 中
任务结构体(运行 FreeRTOS-Plus-CLI 代码)在上述两种情况下差别不大,
具体请参阅下文。
示例 FreeRTOS-Plus-CLI 任务
下列源代码可实现用于托管 FreeRTOS-Plus-CLI 命令解释器接口的任务
。FreeRTOS-Plus-IO FreeRTOS_read() 和
FreeRTOS_write() API 函数用于提供 IO 接口。它
假设 FreeRTOS-Plus-IO 描述符已经
打开,
并已配置为使用中断驱动
字符队列传输模式。
任务使用 FreeRTOS-Plus-CLI FreeRTOS_CLIProcessCommand() API 函数。
源代码中的注释提供了更多信息。请注意,
该函数并非可重入函数。
#define MAX_INPUT_LENGTH 50
#define MAX_OUTPUT_LENGTH 100
static const int8_t * const pcWelcomeMessage =
"FreeRTOS command server.rnType Help to view a list of registered commands.rn";
void vCommandConsoleTask( void *pvParameters )
{
Peripheral_Descriptor_t xConsole;
int8_t cRxedChar, cInputIndex = 0;
BaseType_t xMoreDataToFollow;
static int8_t pcOutputString[ MAX_OUTPUT_LENGTH ], pcInputString[ MAX_INPUT_LENGTH ];
xConsole = ( Peripheral_Descriptor_t ) pvParameters;
FreeRTOS_write( xConsole, pcWelcomeMessage, strlen( pcWelcomeMessage ) );
for( ;; )
{
FreeRTOS_read( xConsole, &cRxedChar, sizeof( cRxedChar ) );
if( cRxedChar == '\n' )
{
FreeRTOS_write( xConsole, "\r\n", strlen( "\r\n" );
do
{
xMoreDataToFollow = FreeRTOS_CLIProcessCommand
(
pcInputString,
pcOutputString,
MAX_OUTPUT_LENGTH
);
FreeRTOS_write( xConsole, pcOutputString, strlen( pcOutputString ) );
} while( xMoreDataToFollow != pdFALSE );
cInputIndex = 0;
memset( pcInputString, 0x00, MAX_INPUT_LENGTH );
}
else
{
if( cRxedChar == '\r' )
{
}
else if( cRxedChar == '\b' )
{
if( cInputIndex > 0 )
{
cInputIndex--;
pcInputString[ cInputIndex ] = '';
}
}
else
{
if( cInputIndex < MAX_INPUT_LENGTH )
{
pcInputString[ cInputIndex ] = cRxedChar;
cInputIndex++;
}
}
}
}
}
An example of a task that implements a FreeRTOS-Plus-CLI command console
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.