mirror of
https://gitee.com/Lyon1998/pikapython.git
synced 2025-01-15 17:02:53 +08:00
136 lines
6.5 KiB
Markdown
136 lines
6.5 KiB
Markdown
## 2.十分钟快速部署
|
||
|
||
在本篇文档中,将会介绍为已有的keil工程部署PikaScript的方法。
|
||
|
||
PikaScript几乎没有全局变量和宏,仅依赖标准库,因此为已有的工程部署PikaScript是非常容易的。
|
||
|
||
下面是部署PikaScript的具体步骤。
|
||
|
||
### (1)下载PikaScript包管理器
|
||
|
||
PikaScript包管理器可以帮助你拉取pikascript所需要的所有源码和工具,并且提供版本选择功能,方便你切换版本。
|
||
|
||
并且PikaScript包管理器使用gitee源,能够在大陆顺畅地使用,不需要科学上网。
|
||
|
||
进入PikaScript主仓库
|
||
|
||
https://github.com/mimilib/pikascript
|
||
|
||
下载PikaScript包管理器PikaPackage.exe
|
||
|
||
![image](https://user-images.githubusercontent.com/88232613/142019152-afbe2f84-7f76-45ab-856b-bd796c6b5fc9.png)
|
||
|
||
然后打开你要部署的工程,在工程的根目录下新建pikascript文件夹,然后把PikaPackage.exe复制进去。
|
||
|
||
![image](https://user-images.githubusercontent.com/88232613/142019778-c727336c-9b6a-4a82-b813-1671f4120152.png)
|
||
|
||
你的工程仅需要包含一个支持printf的串口初始化,然后就可以愉快地使用pikascript了。
|
||
|
||
通常的脚本解释器都依赖操作系统和文件系统,而pikascript不需要这些,如果你部署过其他的脚本引擎,就会很清楚PikaScrip具有真正的超轻量级特性。
|
||
|
||
### (2)拉取源码,预编译模块
|
||
|
||
接下来,在PikaPackage.exe的帮助下我们可以轻松地拉去指定版本的源码和模块。
|
||
|
||
拉取源码和模块通过一个requestment.txt的文件,如果你熟悉python的pip包管理器,就会发现,pikascript的requestment.txt文件格式与pip是一致的。
|
||
|
||
在项目的pikascript文件夹下新建一个requestment.txt文件,然后写入以下内容。
|
||
|
||
```
|
||
pikascript-core==v1.2.0
|
||
PikaStdLib==v1.1.0
|
||
```
|
||
|
||
这表示使用v1.2.0版本的pikascript解释器内核和v1.1.0版本的标准库,解释器内核和标准库是必选项,而其他的模块可以有选择地添加,在初次部署时,应当只添加解释器和标准库以避免不必要的麻烦。
|
||
|
||
你可以照抄stm32g030的[requestment.txt](/bsp/stm32g030c8/pikascript/requestment.txt)内核和标准库版本, 这是官方支持的开发板[Pika派—Zero](https://item.taobao.com/item.htm?spm=a1z10.3-c.w4023-23991764790.10.16f97c58fsLjVk&id=654947372034)所使用的版本。而所有可选的版本可以在[packages.toml](/packages.toml)文件中查看。
|
||
|
||
现在的pikascript文件夹就有了pikaPackage.exe和requestment.txt两个文件,双击运行pikaPackage.exe,在requestmemt.txt中指定的源码和模块就会被拉取下来。
|
||
|
||
![image](https://user-images.githubusercontent.com/88232613/142022949-54585060-8612-42a8-a585-8c3e514a8be3.png)
|
||
|
||
拉取后的文件如下图所示,pikascript-core是内核源码,pikascript-lib是模块库,pikascript-api是模块API,rust-msc-latest-win10.exe是pikascript专用的预编译器。
|
||
|
||
![image](https://user-images.githubusercontent.com/88232613/142023882-51ee4013-8318-483e-8ea4-5c57a5ffb6c6.png)
|
||
|
||
如果你想使用其他的版本,在requestment.txt中修改版本号然后再次运行pikaPackage.exe即可,原先的版本会被覆盖。
|
||
|
||
拉取完源码之后,接下来编写pikascript运行的python脚本,我们在pikascript文件夹新建一个main.py文件。
|
||
|
||
然后写入:
|
||
|
||
``` python
|
||
import PikaStdLib
|
||
|
||
print('hello PikaScript!')
|
||
|
||
```
|
||
|
||
其中```import PikaStdLib``` 表示导入标准库,标准库是必须要导入的,即使没有直接用到,而```print('hello PikaScript!')```用于测试pikascript是否正常启动。
|
||
|
||
接下来运行rust-msc-latest-win10.exe,将main.py和导入的模块预编译为pikascript的api文件,预编译后的文件在pikascript-api文件夹内。
|
||
|
||
![image](https://user-images.githubusercontent.com/88232613/142025848-29ed0599-711a-42d6-91a9-d29f842e2332.png)
|
||
|
||
我们打开pikascript-api文件夹,发现里面有一些.c和.h文件,就说明预编译是成功的,pikascript预编译器可以把python文件预编译为.c和.h文件。
|
||
|
||
![image](https://user-images.githubusercontent.com/88232613/142026275-716bb2d7-209d-4c26-9b40-aae78a452668.png)
|
||
|
||
### (3)添加源码
|
||
|
||
在Project中新建三个group,建议命名为pikascript-core,pikascript-api和pikascript-lib
|
||
|
||
![image](https://user-images.githubusercontent.com/88232613/130967351-597b8f6b-cc4e-4bc3-9cb6-2f335e5dccea.png)
|
||
|
||
然后将pikascript文件夹内的三个子文件夹下的.c文件全部添加到keil工程里
|
||
|
||
![image](https://user-images.githubusercontent.com/88232613/130971776-41d8c940-42d0-407d-872e-53525ce299a6.png)
|
||
|
||
再然后为pikascript-core和pikascript-api文件夹添加include路径
|
||
|
||
![image](https://user-images.githubusercontent.com/88232613/130967813-94016b8a-e408-4b49-b1e1-76a5df5fe984.png)
|
||
|
||
![image](https://user-images.githubusercontent.com/88232613/130967949-8399c65b-5584-4674-a947-e40103d953ea.png)
|
||
|
||
### (4)调整堆栈
|
||
|
||
打开工程的启动文件, 在stm32中, 这是一个startup_stm32xxxx.s的文件,而在其他平台上,你要自己弄清楚如何调整堆栈。
|
||
|
||
![image](https://user-images.githubusercontent.com/88232613/130966276-24014a0a-90a6-4bd7-96b7-fde54806b8c3.png)
|
||
|
||
建议分配4K的栈空间和16K的堆空间,最少也需要分配1K的栈空间和4K的堆空间
|
||
|
||
4K栈空间对应0x1000, 16K堆空间对应0x4000,如下图所示
|
||
|
||
![image](https://user-images.githubusercontent.com/88232613/130967178-a985a4f5-730c-47fd-9317-68f33bc00066.png)
|
||
|
||
### (5)启动PikaScript
|
||
|
||
在main.c的初始化代码中添加PikaScript的启动代码。
|
||
|
||
1) 添加 #include "pikascript.h"
|
||
|
||
![image](https://user-images.githubusercontent.com/88232613/130969048-4def9902-5f36-4798-9eac-ebbb1441087f.png)
|
||
|
||
2) 初始化pikaScript并得到pikascript主对象的指针pikaMain
|
||
|
||
![image](https://user-images.githubusercontent.com/88232613/130969274-ff2fdf6f-2389-466b-b51e-e7bc33472558.png)
|
||
|
||
结束了?对,结束了,就这么简单,是不是很神奇。
|
||
|
||
这是因为预编译器在背后做了很多辅助工作,包括自动生成```pikaScriptInit()```函数。
|
||
|
||
### (6)编译源码
|
||
|
||
编译源码时需要勾选C99标准,而编译优化等级可以任意选择,pikascript均支持。
|
||
|
||
![image](https://user-images.githubusercontent.com/88232613/130968626-7d8d4f46-eb0c-4ccd-9c34-eab160b290f5.png)
|
||
|
||
然后直接编译即可,一般来说是可以直接通过的,使用compiler version 5 或者 compiler version 6均可。
|
||
|
||
### 结语
|
||
|
||
部署文档到此就结束了。继续学习PikaScript的标准开发流程请看
|
||
|
||
[3. PikaScipt标准开发流程](./3.PikaScript标准开发流程.md)
|