夜声 发表于 2022-8-12 17:30

【N32G430开发板试用】+shell终端

本帖最后由 夜声 于 2022-8-13 08:36 编辑

#申请原创#@21小跑堂 @安小芯


一、Finsh介绍
       嵌入式设备通常需要将开发板与 PC 机连接起来通讯,常见连接方式包括:串口、USB、以太网、Wi-Fi 等。一个灵活的 shell 也应该支持在多种连接方式上工作。有了 shell,就像在开发者和计算机之间架起了一座沟通的桥梁,开发者能很方便的获取系统的运行情况,并通过命令控制系统的运行。特别是在调试阶段,有了 shell,开发者除了能更快的定位到问题之外,也能利用 shell 调用测试函数,改变测试函数的参数,减少代码的烧录次数,缩短项目的开发时间。
      FinSH 是 RT-Thread 的命令行组件,就是基于上面这种思想而诞生的。FinSH执行流程如下所示:

二、创建静态线程
    这里使用静态的方式创建一个线程,目的是可以用来一会测试一下finsh是否移植成功。

static struct rt_thread thread1;
static char thread1_stack;

void Thread_entry1(void *p)
{
    while(1)
    {
                LED_Toggle(LED3_GPIO_PORT, LED3_GPIO_PIN);
                rt_thread_mdelay(300);
//      rt_kprintf("Thread_entry1 is running !\r\n");
//      rt_thread_mdelay(500);
    }
}

int rt_thread1(void)
{
    rt_err_t key_ret = RT_NULL;

   
    key_ret = rt_thread_init(&thread1,"Thread1",Thread_entry1, RT_NULL, &thread1_stack,sizeof(thread1_stack), 10, 10);
    if(key_ret <0)
    {
      rt_kprintf(" init ERROR\r\n");
      return RT_ERROR;
    }
    else {
      rt_kprintf("Thead1succeed....\n");
    }

    rt_thread_startup(&thread1);
}
三、添加shell
首先添加shell源码


接下来打开finsh_config.h这个宏定义

接下来添加操作系统的打印功能。
int uart_init(void)
{
//#error "TODO 2: Enable the hardware uart and config baudrate."
   
    bsp_uart_init();
    return 0;
}


void uart_send_byte(u8 data)
{
         while (USART_Flag_Status_Get(USART1, USART_FLAG_TXDE) == RESET);

      USART_Data_Send(USART1, data);
}


void rt_hw_console_output(const char *str)
{
      rt_size_t i = 0, size = 0;
      chara = '\r';
      
      size = rt_strlen(str);
      for(i = 0; i < size; i++)
      {
                if(*(str + i) == '\n')
                {
                        uart_send_byte(a);                                                                        //发送数据
                }
                uart_send_byte(*(str+i));                                                                        //发送数据
      }

      
//#error "TODO 3: Output the string 'str' through the uart."
}
这部分完成后可以复位一下,看一下是否能输出下面内容

接下开始完成shell读取输入的部分代码,在finsh_port.c这个文件中
int ch = -1;

//#error "TODO 4: Read a char from the uart and assign it to 'ch'."
      
      if( USART_Flag_Status_Get(USART1,USART_FLAG_RXDNE) != RESET)//接收中断(接收到的数据必须是0x0d 0x0a结尾)
      {
                ch = USART_Data_Receive(USART1) & 0xff;
      }
      else
      {
                if( USART_Flag_Status_Get(USART1, USART_FLAG_OREF) != RESET)//
                {
                         USART_Flag_Clear(USART1, USART_FLAG_RXDNE);
                }
                rt_thread_mdelay(10);
      }
      return ch;
接下来打开终端,使用MobaXterm,这个工具比较好用,平时调试Linux用的也比较多。新建一个节点,选择serial,把波特率改为115200。

复位开发板,查看终端数据。

当出现msh>说明shell已经添加成功,接下来按TAB键查看全部信息。

根据提示输入相应的命令,比如输入list_thread

在上图中可以看到刚才创建的线程Thead1,还有一个shell线程,idle线程以及main主函数。同时还可看到的信息,使用起来非常的方便,特别是在开发调试的时候。
工程:





hudi008 发表于 2022-8-16 22:23

利用 shell 调用测试函数不错。   

myiclife 发表于 2022-8-17 16:26

必须使用rtt系统吗

bestwell 发表于 2022-8-18 17:37

shell使用的是什么协议?   

deliahouse887 发表于 2022-8-18 19:39

能够远程控制实现吗   
页: [1]
查看完整版本: 【N32G430开发板试用】+shell终端