## 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)