本文主要是介绍RT_thread nano移植Finsh,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
参考连接:
https://blog.csdn.net/baseball214/article/details/131341722
移植的前提是,你已经有一个可以使用的nano功能.
1.将rtthread-nano-master\rt-thread\components文件复制到工程.
2.添加Finsh中的.c以及相关.h头文件路径
3.注释掉finsh_config.h文件中以下两个宏定义,因为这个在rtconfig.h文件中已经定义,提示重复定义.
#define FINSH_THREAD_PRIORITY 21
#define FINSH_THREAD_STACK_SIZE 1024
4.注释掉finsh_port.c中
RT_WEAK char rt_hw_console_getchar(void)
{/* Note: the initial value of ch must < 0 */int ch = -1;//#error "TODO 4: Read a char from the uart and assign it to 'ch'."return ch;
}
5.实现rt_hw_console_getchar(参考Nano 移植控制台/FinSH (rt-thread.org))
我使用的是将中断接收到的数据加到队列中, 然后从队列读出来.
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{if(huart->Instance == USART1) /* 如果是串口1 */{HAL_UART_Receive_IT(&g_uart1_handle, (uint8_t *)g_rx_buffer, RXBUFFERSIZE);InQue(rx_que, g_rx_buffer[0]);}
}void USART1_IRQHandler(void)
{ HAL_UART_IRQHandler(&g_uart1_handle); /* 调用HAL库中断处理公用函数 */
}char rt_hw_console_getchar(void)
{int ch = -1;uint8_t val;rt_thread_mdelay(30);if(OutQue(rx_que,&val)){ch = val;}return ch;
}
6.在rtconfig.h中加#define RTE_USING_FINSH
移植成功,就可以开心的使用了
使用Mobaxterm时,发现出现如下, 需要右键命令框,如下设置
添加命令
// 清屏函数
static long clear(void)
{rt_kprintf("\x1b[2J\x1b[H");return 0;
}
MSH_CMD_EXPORT(clear, clear the screen);// 多参数测试函数添加
static long test(int argc, char** argv)
{int i;for(i = 0; i < argc; i++){rt_kprintf("display %d string: %s\r\n", i, argv[i]);}return 0;
}
MSH_CMD_EXPORT(test, test function);
这篇关于RT_thread nano移植Finsh的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!