creat_console_task(); //控制台初始化
void creat_console_task( void )//任务模块接口
{
static xTaskHandle consoleHandle;
osThreadDef( console, console_run , osPriorityNormal, 0, configMINIMAL_STACK_SIZE*4);
consoleHandle = osThreadCreate(osThread(console), NULL);
configASSERT(consoleHandle)
}
//其实是一直在解析收到的命令行
static void console_run( void const *pvParameters )
{
configASSERT( ( ( unsigned long ) pvParameters ) == 0 );
printf("console > ");
while(1)
{
if( xSemaphoreTake( xConsoleSemaphore, 1000 ) == pdTRUE )
{
console_command ((char const *)console_data.buff, 0); //执行解析
memset(&console_data , 0x00 , sizeof(consoleBufferType) );
printf("console > ");
}
task_keep_alive(TASK_CONSOLE_BIT);
}
}
//那么何时给你信号量呢?串口收到\r\n就给呀 !!!
//初始化给了波特率 和 一个一个接收的函数
void serial_console_init( void )
{
console_port = serial.open("serial1");
if( console_port == NULL)
{
return ;
}
serial.init(console_port , 921600 , console_getchar);
}
/******************************************************
** shell receive data byte
*/
static void console_getchar( uint8_t c)
{
switch(c)
{
case '\r': /* Enter */
case '\n':
{
static BaseType_t xHigherPriorityTaskWoken = pdFALSE;;
console_data.buff[console_data.cnt++] = '\0';
xSemaphoreGiveFromISR( xConsoleSemaphore, &xHigherPriorityTaskWoken );
portEND_SWITCHING_ISR(xHigherPriorityTaskWoken );
printf("\r\n");
}break;
case '\0': // nul
break;
case 0x08: /* ^H - backspace */
case 0x7F: /* DEL - backspace */ //删除操作
{
if( console_data.cnt > 0)
{
console_data.cnt--;
console_data.buff[console_data.cnt] = 0x00;
printf( "\b \b");//---显示啥??????????????????
}
}break;
default:
{
console_data.buff[console_data.cnt++] = c;
if( console_data.cnt > (CFG_CBSIZE - 1) )
{
log_err("console receive is too length\n");
memset(&console_data , 0x00 , sizeof(consoleBufferType) );
}
putchar( c );
}
}
}