前言
前面我们移植了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实现
添加如下文件夹,并添加头文件包含路径
添加app_shell.c/h
app_shell_init时创建线程运行shell,在app_task中初始化shell
#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环境
总结
以上移植了shell并且添加了shell下运行micropython的命令,可自由进入和退出python3交互环境,方便后续的开发。