pikapython/document/2.十分钟快速部署.md
2021-11-17 00:40:42 +08:00

136 lines
6.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 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是模块APIrust-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)