【命令行】欢迎体验自己写的命令行任务

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 ); 
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值