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))         /* Warit Rx data register no empty */
    {
        UsartRxErrProcess();
        rt_thread_mdelay(10);
    };
    return (char)USART_RecData(BSP_PRINTF_DEVICE);
}
char rt_hw_console_getchar(void)
{
    /* Note: the initial value of ch must < 0 */
    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("------------------------------------------------------------------\r\n");
    rt_kprintf("|                                                                |\r\n");
    rt_kprintf("|     ____   _   __            _____              _          __  |\r\n");
    rt_kprintf("|    / __ \\ (_) / /__ ____ _  / ___/ _____ _____ (_) ____   / /_ |\r\n");
    rt_kprintf("|   / /_/ // / / //_// __ `/  \\__ \\ / ___// ___// / / __ \\ / __/ |\r\n");
    rt_kprintf("|  / ____// / / ,<  / /_/ /  ___/ // /__ / /   / / / /_/ // /_   |\r\n");
    rt_kprintf("| /_/    /_/ /_/|_| \\__,_/  /____/ \\___//_/   /_/ / .___/ \\__/   |\r\n");
    rt_kprintf("|                                                /_/             |\r\n");
    rt_kprintf("|          PikaScript - An Ultra Lightweight Python Engine       |\r\n");
    rt_kprintf("|                                                                |\r\n");
    rt_kprintf("|           [ https://github.com/pikastech/pikascript ]          |\r\n");
    rt_kprintf("|           [  https://gitee.com/lyon1998/pikascript  ]          |\r\n");
    rt_kprintf("|                                                                |\r\n");
    rt_kprintf("------------------------------------------------------------------\r\n");
    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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值