前言

前面我们移植了micropython,单独使用一个线程运行micropython。为了方便后面的开发我们来移植一个简单的shell,然后在shell中运行micropython。

完整工程参考

https://gitee.com/qinyunti/fr3068-e-c-micropython.git

移植shell

参考公众号文章

https://mp.weixin.qq.com/s/XLmbJn0SKoDT1aLdxHDrbg?token=1312261758&lang=zh_CN 一个超级精简高可移植的shell命令行C实现

添加如下文件夹,并添加头文件包含路径

223757e4w9iqw64w4jdh0w

添加app_shell.c/h

223757jfftp121j06hiub2

app_shell_init时创建线程运行shell,在app_task中初始化shell

223757qh9i898hs22hhy8y

#include "fr30xx.h"

#include "FreeRTOS.h"

#include "task.h"

#include "app_shell.h"

#include "shell.h"

#include "shell_func.h"

#include "xprintf.h"

#include "uart.h"

TaskHandle_t shell_task_handle;

static void shell_task(void *arg);

static void xprintf_out_port(int ch)

{

    uint8_t val = ch;

    uart_send(&val, 1);

}

static int xprintf_in_port(void)

{

    uint32_t len;

    uint8_t val;

    do

    {

        len = uart_read(&val, 1);

    }while(len == 0);

    return val;

}

uint32_t shell_read(uint8_t *buff, uint32_t len)

{

        return uart_read(buff,len);

}

void shell_write(uint8_t *buff, uint32_t len)

{

        uart_send(buff,len);

}

void app_shell_init(void)

{

    xTaskCreate(shell_task, "shell", 512, NULL, 3, &shell_task_handle);

}

static void shell_task(void *arg)

{

    shell_set_itf(shell_read, shell_write, (shell_cmd_cfg*)g_shell_cmd_list_ast, 1);

    xdev_out(xprintf_out_port);

    xdev_in(xprintf_in_port);

    while(1)

    {

        shell_exec();

                                TickType_t ticks = 1 / portTICK_PERIOD_MS;

                                vTaskDelay(ticks ? ticks : 1); /* Minimum delay = 1 tick */

    }

}

添加shell中运行micropython命令

shell\shell_func.c中

申明实现函数

static void micropythonfunc(uint8_t* param);

表格中添加命令行

  { (uint8_t*)"micropython",  micropythonfunc,   (uint8_t*)"micropython"},  

实现函数

extern int py_main(int argc, char **argv);

static void micropythonfunc(uint8_t* param)

{

        py_main(0,0);

}

测试

输入help回车查看支持的shell命令

输入micropython回车进入,python交互环境

组合按键ctrl+d退出python环境,回到shell环境

223757lci342ju4c23nj1j

总结

以上移植了shell并且添加了shell下运行micropython的命令,可自由进入和退出python3交互环境,方便后续的开发。