栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

HC32F460 实现模拟U盘导入python脚本在19264点阵屏上绘图--PikaScript移植

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

HC32F460 实现模拟U盘导入python脚本在19264点阵屏上绘图--PikaScript移植

三、PikaScript移植

rt-thread 和 pikascript都支持交互式运行,因此必须先增加串口输入方法。

1、增加rx端口定义

2、端口初始化

3、UART_PrintfInit 串口初始化中增加rx使能

 4、增加串口接收函数实现

static void UsartRxErrProcess(void)
{
    if (Set == USART_GetStatus(BSP_PRINTF_DEVICE, UsartFrameErr))
    {
        USART_ClearStatus(BSP_PRINTF_DEVICE, UsartFrameErr);
    }

    if (Set == USART_GetStatus(BSP_PRINTF_DEVICE, UsartParityErr))
    {
        USART_ClearStatus(BSP_PRINTF_DEVICE, UsartParityErr);
    }

    if (Set == USART_GetStatus(BSP_PRINTF_DEVICE, UsartOverrunErr))
    {
        USART_ClearStatus(BSP_PRINTF_DEVICE, UsartOverrunErr);
    }
}

char __platform_getchar(){
    char res = 0;
    while(Set!= USART_GetStatus(BSP_PRINTF_DEVICE, UsartRxNoEmpty))        
    {
        UsartRxErrProcess();
        rt_thread_mdelay(10);
    };
    return (char)USART_RecData(BSP_PRINTF_DEVICE);
}
char rt_hw_console_getchar(void)
{
   
    int ch = -1;
    return __platform_getchar();
}

5、编译运行,使用putty,链接对应的串口,按回车健,控制台切换到下一行

 6、在工程文件夹下新建文件夹pikascript,并把pikaPackage.exe 和 requestment.txt复制到目录中。requestment.txt 文件定义了需要的版本号,然后运行exe

 7、在工程中添加相应的目录

8、在目录中添加文件

pikascript的core和lib目录中所有文件添加到相应目录

9、接下来编写 pikascript 运行的 python 脚本,我们在 pikascript 文件夹新建一个 main.py 文件。

然后写入:

import PikaStdLib

print('hello PikaScript!')

其中import PikaStdLib 表示导入标准库,标准库是必须要导入的,即使没有直接用到,而print('hello PikaScript!')用于测试pikascript是否正常启动。

10、 接下来运行 rust-msc-latest-win10.exe,将 main.py 和导入的模块预编译为 pikascript 的 api 文件,预编译后的文件在 pikascript-api 文件夹内。

我们打开 pikascript-api 文件夹,发现里面有一些 .c 和 .h 文件,就说明预编译是成功的,pikascript 预编译器可以把 python 模块预编译为 .c 和 .h 文件。

11、pikascript-api目录中添加目录下的源文件

12、调整引用目录

13、调整堆栈

打开工程的启动文件, 在 stm32 中, 这是一个 startup_stm32xxxx.s 的文件,而在其他平台上,你要自己弄清楚如何调整堆栈。

 

建议分配 4K 的栈空间和 16K 的堆空间,最少也需要分配 1K 的栈空间和 4K 的堆空间

4K 栈空间对应 0x1000, 16K 堆空间对应 0x4000,如下图所示

 14、添加控制台的pika启动入口

PikaObj *pikaMain = 0;
uint8_t pika_is_inited = 0;

static void pikascript_rt_init(void *parameter){
    rt_kprintf("------------------------------------------------------------------rn");
    rt_kprintf("|                                                                |rn");
    rt_kprintf("|     ____   _   __            _____              _          __  |rn");
    rt_kprintf("|    / __ \ (_) / /__ ____ _  / ___/ _____ _____ (_) ____   / /_ |rn");
    rt_kprintf("|   / /_/ // / / //_// __ `/  \__ \ / ___// ___// / / __ \ / __/ |rn");
    rt_kprintf("|  / ____// / / ,<  / /_/ /  ___/ // /__ / /   / / / /_/ // /_   |rn");
    rt_kprintf("| /_/    /_/ /_/|_| \__,_/  /____/ \___//_/   /_/ / .___/ \__/   |rn");
    rt_kprintf("|                                                /_/             |rn");
    rt_kprintf("|          PikaScript - An Ultra Lightweight Python Engine       |rn");
    rt_kprintf("|                                                                |rn");
    rt_kprintf("|           [ https://github.com/pikastech/pikascript ]          |rn");
    rt_kprintf("|           [  https://gitee.com/lyon1998/pikascript  ]          |rn");
    rt_kprintf("|                                                                |rn");
    rt_kprintf("------------------------------------------------------------------rn");
    pikaMain = pikaScriptInit();
    pika_is_inited = 1;
}

static void pikascript_entry(void *parameter){
    if(!pika_is_inited){
        pikascript_rt_init(NULL);
    }
    pikaScriptShell(pikaMain);
}
static int pika_main(int argc, char *argv[]){
    pikascript_entry(NULL);
    return 0;
}
MSH_CMD_EXPORT_ALIAS(pika_main, pika, run PikaScript);

15、编译运行,在控制台输入pika按回车

 修改宏定义增加finsh的栈空间 不然很容易溢出, #define FINSH_THREAD_STACK_SIZE     4096

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/965550.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号