mirror of
https://gitee.com/Lyon1998/pikapython.git
synced 2025-01-29 17:22:56 +08:00
Merge branch 'master' of https://github.com/pikastech/pikascript
This commit is contained in:
commit
b7079aecbe
@ -37,6 +37,8 @@ PikaScript是一个完全重写的超轻量级python引擎,零依赖,零配
|
||||
|
||||
开发板基于STM32G030C8T6小资源MCU,仅64kB Flash,8kB RAM即可运行完整解释器,和完整的外设驱动(GPIO、TIME、IIC、RGB、KEY、LCD、RGB)。板载CH340 USB转串口芯片,Type-C接口,支持串口下载python脚本,板载4颗RGB灯,可选配[LCD屏幕](https://item.taobao.com/item.htm?spm=a1z10.3-c.w4002-23991764791.12.16f97c58fsLjVk&id=660745643102)。
|
||||
|
||||
[Pika派python编程游玩指南](document/7.Pika%E6%B4%BE%E5%BC%80%E5%8F%91%E6%9D%BF%E6%B8%B8%E7%8E%A9%E6%8C%87%E5%8D%97%EF%BC%8C%E5%88%B0%E6%89%8B%E7%9A%84%E5%BC%80%E5%8F%91%E6%9D%BF%E7%8E%A9%E8%B5%B7%E6%9D%A5%EF%BC%81.md)
|
||||
|
||||
# 视频教程
|
||||
|
||||
![image](https://user-images.githubusercontent.com/88232613/142173892-35e33f36-413c-4422-8470-b873b7c3bd71.png)
|
||||
|
190
document/7.Pika派开发板游玩指南,到手的开发板玩起来!.md
Normal file
190
document/7.Pika派开发板游玩指南,到手的开发板玩起来!.md
Normal file
@ -0,0 +1,190 @@
|
||||
# Pika派开发板游玩指南!到手的开发板玩起来!
|
||||
|
||||
今天我们不聊驱动开发还有架构原理这些令人头大的硬核内容,我们就单纯的用Pika派开发板玩玩Python编程!
|
||||
|
||||
在单片机上点亮一个“人生苦短,我用Python”的成就!
|
||||
|
||||
观看此篇文章的读者想必大部分手里已经有一块Pika派,如果没有的话,也可以去淘宝店铺搜索“皮卡派”,就可以找到了~
|
||||
|
||||
开发板长下面这个样子,板载一个STM32芯片,型号是STM32G030,上面有4个炫彩RGB和一个串口转USB芯片,采用Type-C接口。
|
||||
|
||||
![输入图片说明](https://images.gitee.com/uploads/images/2021/1122/193551_ac53c408_5521445.png "屏幕截图.png")
|
||||
|
||||
这个开发板由PikaScript项目官方支持,持续滚动更新,PikaScript的最新内核,最新功能,都可以在这个开发板上抢先体验到。
|
||||
|
||||
这个开发板也由项目官方适配了大量外设驱动、包括GPIO、TIME、ADC、IIC、LCD、KEY、PWM等模块的驱动都已经开发好,可以直接用python进行编程。
|
||||
|
||||
## 如何给单片机下载Python程序
|
||||
|
||||
下载方法非常简单,只需要连接上Type-C数据线就可以了。
|
||||
|
||||
然后我们点examples文件夹,
|
||||
|
||||
![输入图片说明](https://images.gitee.com/uploads/images/2021/1122/200332_3e87979e_5521445.png "屏幕截图.png")
|
||||
|
||||
我们用一根USB数据线,连接电脑和Pika派开发板,就可以下载程序了。
|
||||
|
||||
下载程序的时候,需要使用一个串口助手工具,我们可以使用正点原子开发的XCOM助手,在正点原子的论坛可以下载到。
|
||||
|
||||
![输入图片说明](https://images.gitee.com/uploads/images/2021/1122/200618_b8f264a8_5521445.png "屏幕截图.png")
|
||||
|
||||
选择好COM口,然后波特率选为115200,再点打开串口,这时候,就和Pika派连接上了。
|
||||
|
||||
这时候,直接发送一个Pthon脚本文件,就可以给Pika派下载Python程序了。
|
||||
|
||||
为了验证下载能不能成功,我们使用PikaScript源码仓库里面的示例Python脚本。
|
||||
|
||||
我们进入PikaScript的代码仓库
|
||||
|
||||
https://gitee.com/Lyon1998/pikascript
|
||||
|
||||
惯例点一个Star~
|
||||
|
||||
![输入图片说明](https://images.gitee.com/uploads/images/2021/1122/201054_c22a0714_5521445.png "屏幕截图.png")
|
||||
|
||||
然后我们点击examples文件夹,里面放的就是可以运行的Python例程了~
|
||||
|
||||
![输入图片说明](https://images.gitee.com/uploads/images/2021/1122/201133_2caa690c_5521445.png "屏幕截图.png")
|
||||
|
||||
我们打开GPIO文件夹,来点亮一下流水灯看看~
|
||||
|
||||
![输入图片说明](https://images.gitee.com/uploads/images/2021/1122/201304_ee6f19c7_5521445.png "屏幕截图.png")
|
||||
|
||||
GPIO文件夹里面的main.py就是GPIO的示例代码了
|
||||
|
||||
![输入图片说明](https://images.gitee.com/uploads/images/2021/1122/201351_226525cc_5521445.png "屏幕截图.png")
|
||||
|
||||
我们可以点开main.py看看~
|
||||
|
||||
![输入图片说明](https://images.gitee.com/uploads/images/2021/1122/201416_4e812a19_5521445.png "屏幕截图.png")
|
||||
|
||||
先不解释里面的内容,我们直接下载这个脚本看看。
|
||||
|
||||
我们也在桌面新建一个main.py文件,然后把这段代码复制进去。
|
||||
|
||||
![输入图片说明](https://images.gitee.com/uploads/images/2021/1122/201535_8f49da20_5521445.png "屏幕截图.png")
|
||||
|
||||
我们选择这个main.py文件
|
||||
|
||||
![输入图片说明](https://images.gitee.com/uploads/images/2021/1122/201639_79a783b1_5521445.png "屏幕截图.png")
|
||||
|
||||
然后点击"发送文件", 就可以把脚本下载进去了!
|
||||
|
||||
我们可以看到[ OK ]: Programing ok!的提示,这就是说明下载成功了!
|
||||
|
||||
![输入图片说明](https://images.gitee.com/uploads/images/2021/1122/201816_13337449_5521445.png "屏幕截图.png")
|
||||
|
||||
这时开发板上面的LED就会闪动起来!
|
||||
|
||||
![输入图片说明](https://images.gitee.com/uploads/images/2021/1122/202935_f82345e6_5521445.png "屏幕截图.png")
|
||||
|
||||
恭喜你达成单片机玩Python的成就!
|
||||
|
||||
## GPIO的脚本里写了什么?
|
||||
|
||||
下面我们来逐行解析一下GPIO的这个例程。
|
||||
|
||||
![输入图片说明](https://images.gitee.com/uploads/images/2021/1122/203322_8cbe563c_5521445.png "屏幕截图.png")
|
||||
|
||||
首先是第一行和第二行,这表示导入了两个模块,一个是```PikaStdLib```模块,一个是```STM32G0```模块。
|
||||
PikaStdLib是PikaScript的标准库,里面有一些系统的功能,比如可以检查内存的占用。
|
||||
|
||||
第四行里面,我们就新建了一个mem对象,这个对象的类是PikaStdLib.MemChecker()。
|
||||
|
||||
![输入图片说明](https://images.gitee.com/uploads/images/2021/1122/203532_a3e2dc7b_5521445.png "屏幕截图.png")
|
||||
|
||||
这个类有max()方法和now()方法,使用这两个方法,就可以打印出当前PikaScript所使用的内存大小。
|
||||
|
||||
![输入图片说明](https://images.gitee.com/uploads/images/2021/1122/203657_3ef8a678_5521445.png "屏幕截图.png")
|
||||
|
||||
我们可以看看串口的打印输出,可以看到最大的内存占用是1.51kB,而当前的内存占用是0.61kB,是不是很小!
|
||||
|
||||
![输入图片说明](https://images.gitee.com/uploads/images/2021/1122/203737_1509b9db_5521445.png "屏幕截图.png")
|
||||
|
||||
time对象是通过STM32G0的Time()类新建的,可以提供基本的延时功能。
|
||||
|
||||
![输入图片说明](https://images.gitee.com/uploads/images/2021/1122/203848_4a13cdf4_5521445.png "屏幕截图.png")
|
||||
|
||||
通过time.sleep_ms()方法,就可以按毫秒进行延时了,比如下面代码的作用就是延时500ms。
|
||||
|
||||
![输入图片说明](https://images.gitee.com/uploads/images/2021/1122/203938_62748bd5_5521445.png "屏幕截图.png")
|
||||
|
||||
io1就是我们今天的主角了,这是一个GPIO对象,是用STM32G0.GPIO()类新建的。
|
||||
|
||||
![输入图片说明](https://images.gitee.com/uploads/images/2021/1122/204024_6adc51e3_5521445.png "屏幕截图.png")
|
||||
|
||||
在新建了io1对象之后,我们要给这个io进行初始化,init()用于对象初始化,在最前面使用,然后setPin('PA8')表示使用PA8口,setMode('out')表示使用输出模式,而enable()表示启动io1的硬件,low()将io1的电平拉低。
|
||||
|
||||
PA8上连接了Pika派上面的一个led灯,只要控制PA8的电平,就可以控制灯的亮灭了。
|
||||
|
||||
![输入图片说明](https://images.gitee.com/uploads/images/2021/1122/204104_1f08a3b3_5521445.png "屏幕截图.png")
|
||||
|
||||
而在程序的主循环里面,对io1进行高低电平的切换,就可以使LED闪动了~
|
||||
|
||||
![输入图片说明](https://images.gitee.com/uploads/images/2021/1122/204301_0ec427ea_5521445.png "屏幕截图.png")
|
||||
|
||||
## 其他的Python例程解读
|
||||
|
||||
我们再解读一下examples里面的其他例程,比如这个ADC例程,就是读取PA1管脚上面的模拟电压值,然后打印出来~
|
||||
|
||||
![输入图片说明](https://images.gitee.com/uploads/images/2021/1122/204751_8bb53225_5521445.png "屏幕截图.png")
|
||||
|
||||
下面是串口的例程,功能是读取收到的两个字节,然后打印出来
|
||||
|
||||
![输入图片说明](https://images.gitee.com/uploads/images/2021/1122/205006_0e0113df_5521445.png "屏幕截图.png")
|
||||
|
||||
再下面这个是PWM的例程,可以指定管脚输出PWM波,可以设置频率和占空比
|
||||
|
||||
![输入图片说明](https://images.gitee.com/uploads/images/2021/1122/205127_5f60a8d7_5521445.png "屏幕截图.png")
|
||||
|
||||
再下面这个就是RGB的例程了~
|
||||
|
||||
![输入图片说明](https://images.gitee.com/uploads/images/2021/1122/205232_6de29e2f_5521445.png "屏幕截图.png")
|
||||
|
||||
这个例程可以驱动板载的4个RGB流水灯~
|
||||
|
||||
![输入图片说明](https://images.gitee.com/uploads/images/2021/1122/205338_ae2e2de2_5521445.png "屏幕截图.png")
|
||||
|
||||
还有一个LCD的例程,可以在LCD上面显示一个小方块,而你可以使用板载的四个按键控制小方块运动~
|
||||
|
||||
![输入图片说明](https://images.gitee.com/uploads/images/2021/1122/210940_f30be3d5_5521445.png "屏幕截图.png")
|
||||
|
||||
![输入图片说明](https://images.gitee.com/uploads/images/2021/1122/211210_43b35b56_5521445.png "屏幕截图.png")
|
||||
|
||||
![输入图片说明](https://images.gitee.com/uploads/images/2021/1122/211404_c89d9a17_5521445.png "屏幕截图.png")
|
||||
|
||||
当你熟悉了LCD驱动之后,可以试试自己开发小游戏哦~
|
||||
|
||||
## 固件升级
|
||||
|
||||
Pika派的固件是滚动更新的,会不断推出新的固件版本,不断提供新的功能,而有一些新的功能只有升级固件才能玩到,所以学会升级固件也是很重要的~
|
||||
|
||||
升级固件也是使用串口就可以了,在升级时,我们需要用bsp编译出一个固件的.bin文件,如果你是一个动手能力很强的DIY爱好者,可以自己编译固件,编译的方法在视频里面~
|
||||
|
||||
https://www.bilibili.com/video/BV1c44y1v7Jd
|
||||
|
||||
![输入图片说明](https://images.gitee.com/uploads/images/2021/1122/205647_0d32ad97_5521445.png "屏幕截图.png")
|
||||
|
||||
如果你想用现成的固件也可以直接下载编译好的~
|
||||
|
||||
![输入图片说明](https://images.gitee.com/uploads/images/2021/1122/210126_d14c9754_5521445.png "屏幕截图.png")
|
||||
|
||||
点击下载就可以获得最新的固件了~
|
||||
|
||||
![输入图片说明](https://images.gitee.com/uploads/images/2021/1122/210155_5248a47c_5521445.png "屏幕截图.png")
|
||||
|
||||
下面需要让pika派进入升级模式,我们按住开发板上面的SW0键,同时按下RST键,就可以进入升级模式了。
|
||||
|
||||
![输入图片说明](https://images.gitee.com/uploads/images/2021/1122/210422_3acb9ed0_5521445.png "屏幕截图.png")
|
||||
|
||||
在升级模式下,我们可以看到串口的提示信息
|
||||
|
||||
![输入图片说明](https://images.gitee.com/uploads/images/2021/1122/210526_b7b28342_5521445.png "屏幕截图.png")
|
||||
|
||||
然后我们用串口助手选择刚才下载的stm32g030c8.bin文件,通过串口发送。
|
||||
|
||||
识别到固件后会显示Reciving....
|
||||
|
||||
![输入图片说明](https://images.gitee.com/uploads/images/2021/1122/210611_2fd707d0_5521445.png "屏幕截图.png")
|
||||
|
||||
发送完毕后再按一下RST键重启,就完成升级了!
|
@ -127,7 +127,8 @@ void CH32V103_GPIO_platformLow(PikaObj *self){
|
||||
|
||||
GPIO_WriteBit(GPIO_group, GPIO_pin, Bit_RESET);
|
||||
}
|
||||
void CH32V103_GPIO_platformSetMode(PikaObj *self, char * mode){
|
||||
void CH32V103_GPIO_platformSetMode(PikaObj *self){
|
||||
char *mode = obj_getStr(self, "mode");
|
||||
char *pin = obj_getStr(self, "pin");
|
||||
GPIO_TypeDef *GPIO_group = get_GPIO_group(pin);
|
||||
uint16_t GPIO_pin = get_GPIO_pin(pin);
|
||||
|
@ -46,7 +46,7 @@ int PikaStdDevice_GPIO_read(PikaObj *self){
|
||||
void PikaStdDevice_GPIO_setMode(PikaObj* self, char* mode) {
|
||||
if(strEqu(mode, "out")||strEqu(mode, "in")){
|
||||
obj_setStr(self, "mode", mode);
|
||||
obj_run(self, "platformSetMode(mode)");
|
||||
obj_run(self, "platformSetMode()");
|
||||
}else{
|
||||
obj_setErrorCode(self, 1);
|
||||
obj_setSysOut(self, "[error] GPIO mode should be 'out' or 'in'.");
|
||||
|
@ -16,6 +16,7 @@ releases = [
|
||||
"v1.2.2 5316ede928b01a20571103616a64666abbc40e0a",
|
||||
"v1.2.3 5ae86929851ff6a62342a7072b77e9cf5be85f1c",
|
||||
"v1.2.4 b7ac057d75e88736cc844de0bafb447a48f2fb6d",
|
||||
"v1.2.5 150c450231574f9b601ab292420896ffabc5a42b",
|
||||
]
|
||||
|
||||
[[packages]]
|
||||
|
1
port/linux/.vscode/launch.json
vendored
1
port/linux/.vscode/launch.json
vendored
@ -11,6 +11,7 @@
|
||||
"program": "${workspaceFolder}/build/test/pikascript_test",
|
||||
// "program": "${workspaceFolder}/../build/src/boot/demo06-pikamain/pikascript_demo06-pikamain",
|
||||
"args": [
|
||||
// "--gtest_filter=VM*"
|
||||
// "--gtest_filter=queue*"
|
||||
// "--gtest_filter=parser*"
|
||||
// "--gtest_filter=args*",
|
||||
|
@ -72,6 +72,6 @@ int32_t main()
|
||||
}
|
||||
|
||||
/* deinit the res */
|
||||
obj_deinit(globals);
|
||||
// obj_deinit(globals);
|
||||
}
|
||||
}
|
||||
|
@ -69,6 +69,6 @@ int32_t main()
|
||||
}
|
||||
|
||||
/* deinit the res */
|
||||
obj_deinit(globals);
|
||||
// obj_deinit(globals);
|
||||
}
|
||||
}
|
||||
|
@ -67,6 +67,6 @@ int32_t main()
|
||||
}
|
||||
|
||||
/* deinit the res */
|
||||
obj_deinit(globals);
|
||||
// obj_deinit(globals);
|
||||
}
|
||||
}
|
||||
|
@ -122,6 +122,6 @@ int32_t main()
|
||||
}
|
||||
|
||||
/* deinit the res */
|
||||
obj_deinit(globals);
|
||||
// obj_deinit(globals);
|
||||
}
|
||||
}
|
||||
|
@ -56,6 +56,6 @@ int main()
|
||||
printf(">>> ");
|
||||
|
||||
/* deinit the res */
|
||||
obj_deinit(globals);
|
||||
// obj_deinit(globals);
|
||||
}
|
||||
}
|
||||
|
@ -34,6 +34,6 @@ int main()
|
||||
printf(">>> ");
|
||||
|
||||
/* deinit the res */
|
||||
obj_deinit(globals);
|
||||
// obj_deinit(globals);
|
||||
}
|
||||
}
|
||||
|
@ -17,10 +17,9 @@ TEST(VM, num1) {
|
||||
char* pikaAsm = pikaParseLineToAsm(buffs, line, NULL);
|
||||
printf("%s", pikaAsm);
|
||||
PikaObj* self = newRootObj((char*)"root", New_PikaStdLib_SysObj);
|
||||
Parameters* globals = pikaVM_runAsm(self, pikaAsm);
|
||||
pikaVM_runAsm(self, pikaAsm);
|
||||
obj_deinit(self);
|
||||
args_deinit(buffs);
|
||||
obj_deinit(globals);
|
||||
EXPECT_EQ(pikaMemNow(), 0);
|
||||
}
|
||||
|
||||
@ -30,11 +29,10 @@ TEST(VM, a_1) {
|
||||
char* pikaAsm = pikaParseLineToAsm(buffs, line, NULL);
|
||||
printf("%s", pikaAsm);
|
||||
PikaObj* self = newRootObj((char*)"root", New_PikaStdLib_SysObj);
|
||||
Parameters* globals = pikaVM_runAsm(self, pikaAsm);
|
||||
ASSERT_EQ(args_getInt(globals->list, (char*)"a"), 1);
|
||||
pikaVM_runAsm(self, pikaAsm);
|
||||
ASSERT_EQ(args_getInt(self->list, (char*)"a"), 1);
|
||||
|
||||
obj_deinit(self);
|
||||
obj_deinit(globals);
|
||||
args_deinit(buffs);
|
||||
EXPECT_EQ(pikaMemNow(), 0);
|
||||
}
|
||||
@ -49,7 +47,7 @@ TEST(VM, a_1d1) {
|
||||
ASSERT_FLOAT_EQ(args_getFloat(globals->list, (char*)"a"), 1.1);
|
||||
|
||||
obj_deinit(self);
|
||||
obj_deinit(globals);
|
||||
// obj_deinit(globals);
|
||||
args_deinit(buffs);
|
||||
EXPECT_EQ(pikaMemNow(), 0);
|
||||
}
|
||||
@ -65,7 +63,7 @@ TEST(VM, str_xy) {
|
||||
ASSERT_STREQ(args_getStr(globals->list, (char*)"a"), (char*)"xy");
|
||||
|
||||
obj_deinit(self);
|
||||
obj_deinit(globals);
|
||||
// obj_deinit(globals);
|
||||
args_deinit(buffs);
|
||||
EXPECT_EQ(pikaMemNow(), 0);
|
||||
}
|
||||
@ -82,7 +80,7 @@ TEST(VM, str_xy_space) {
|
||||
|
||||
obj_deinit(self);
|
||||
args_deinit(buffs);
|
||||
obj_deinit(globals);
|
||||
// obj_deinit(globals);
|
||||
EXPECT_EQ(pikaMemNow(), 0);
|
||||
}
|
||||
|
||||
@ -99,7 +97,7 @@ TEST(VM, ref_a_b) {
|
||||
args_deinit(buffs);
|
||||
ASSERT_STREQ(args_getStr(globals->list, (char*)"b"), (char*)"xy ");
|
||||
obj_deinit(self);
|
||||
obj_deinit(globals);
|
||||
// obj_deinit(globals);
|
||||
EXPECT_EQ(pikaMemNow(), 0);
|
||||
}
|
||||
|
||||
@ -114,7 +112,7 @@ TEST(VM, Run_add) {
|
||||
int a = args_getInt(globals->list, (char*)"a");
|
||||
ASSERT_EQ(a, 3);
|
||||
obj_deinit(self);
|
||||
obj_deinit(globals);
|
||||
// obj_deinit(globals);
|
||||
EXPECT_EQ(pikaMemNow(), 0);
|
||||
}
|
||||
|
||||
@ -132,7 +130,7 @@ TEST(VM, Run_add_multy) {
|
||||
int a = args_getInt(globals->list, (char*)"a");
|
||||
ASSERT_EQ(a, 3);
|
||||
obj_deinit(self);
|
||||
obj_deinit(globals);
|
||||
// obj_deinit(globals);
|
||||
EXPECT_EQ(pikaMemNow(), 0);
|
||||
}
|
||||
|
||||
@ -148,7 +146,7 @@ TEST(VM, Run_add_1_2_3) {
|
||||
int a = args_getInt(globals->list, (char*)"a");
|
||||
ASSERT_EQ(a, 6);
|
||||
obj_deinit(self);
|
||||
obj_deinit(globals);
|
||||
// obj_deinit(globals);
|
||||
EXPECT_EQ(pikaMemNow(), 0);
|
||||
}
|
||||
|
||||
@ -164,14 +162,14 @@ TEST(VM, JEZ) {
|
||||
Args* sysRes = New_args(NULL);
|
||||
args_setErrorCode(sysRes, 0);
|
||||
args_setSysOut(sysRes, (char*)"");
|
||||
Parameters* globals = New_TinyObj(NULL);
|
||||
Parameters* globals = self;
|
||||
lineAddr = pikaVM_runAsmLine(self, globals, globals, pikaAsm, lineAddr);
|
||||
lineAddr = pikaVM_runAsmLine(self, globals, globals, pikaAsm, lineAddr);
|
||||
lineAddr = pikaVM_runAsmLine(self, globals, globals, pikaAsm, lineAddr);
|
||||
__clearInvokeQueues(globals);
|
||||
obj_deinit(self);
|
||||
args_deinit(sysRes);
|
||||
obj_deinit(globals);
|
||||
// obj_deinit(globals);
|
||||
EXPECT_EQ(lineAddr, 26);
|
||||
EXPECT_EQ(pikaMemNow(), 0);
|
||||
}
|
||||
@ -187,13 +185,13 @@ TEST(VM, JMP) {
|
||||
Args* sysRes = New_args(NULL);
|
||||
args_setErrorCode(sysRes, 0);
|
||||
args_setSysOut(sysRes, (char*)"");
|
||||
Parameters* globals = New_TinyObj(NULL);
|
||||
Parameters* globals = self;
|
||||
lineAddr = pikaVM_runAsmLine(self, globals, globals, pikaAsm, lineAddr);
|
||||
lineAddr = pikaVM_runAsmLine(self, globals, globals, pikaAsm, lineAddr);
|
||||
__clearInvokeQueues(globals);
|
||||
obj_deinit(self);
|
||||
args_deinit(sysRes);
|
||||
obj_deinit(globals);
|
||||
// obj_deinit(globals);
|
||||
EXPECT_EQ(lineAddr, 14);
|
||||
EXPECT_EQ(pikaMemNow(), 0);
|
||||
}
|
||||
@ -210,14 +208,14 @@ TEST(VM, JMP_back1) {
|
||||
Args* sysRes = New_args(NULL);
|
||||
args_setErrorCode(sysRes, 0);
|
||||
args_setSysOut(sysRes, (char*)"");
|
||||
Parameters* globals = New_TinyObj(NULL);
|
||||
Parameters* globals = self;
|
||||
lineAddr = pikaVM_runAsmLine(self, globals, globals, pikaAsm, lineAddr);
|
||||
lineAddr = pikaVM_runAsmLine(self, globals, globals, pikaAsm, lineAddr);
|
||||
lineAddr = pikaVM_runAsmLine(self, globals, globals, pikaAsm, lineAddr);
|
||||
__clearInvokeQueues(globals);
|
||||
obj_deinit(self);
|
||||
args_deinit(sysRes);
|
||||
obj_deinit(globals);
|
||||
// obj_deinit(globals);
|
||||
EXPECT_EQ(lineAddr, 0);
|
||||
EXPECT_EQ(pikaMemNow(), 0);
|
||||
}
|
||||
@ -241,7 +239,7 @@ TEST(VM, WHILE) {
|
||||
Parameters* globals = pikaVM_runAsm(self, pikaAsm);
|
||||
EXPECT_EQ(args_getInt(globals->list, (char*)"a"), 0);
|
||||
EXPECT_EQ(args_getInt(globals->list, (char*)"b"), 1);
|
||||
obj_deinit(globals);
|
||||
// obj_deinit(globals);
|
||||
args_deinit(buffs);
|
||||
obj_deinit(self);
|
||||
EXPECT_EQ(pikaMemNow(), 0);
|
||||
@ -257,7 +255,7 @@ TEST(VM, a_1_1) {
|
||||
|
||||
int res = args_getInt(globals->list, (char*)"a");
|
||||
obj_deinit(self);
|
||||
obj_deinit(globals);
|
||||
// obj_deinit(globals);
|
||||
args_deinit(buffs);
|
||||
ASSERT_EQ(res, 2);
|
||||
EXPECT_EQ(pikaMemNow(), 0);
|
||||
@ -273,7 +271,7 @@ TEST(VM, a_1_1d1) {
|
||||
|
||||
float res = args_getFloat(globals->list, (char*)"a");
|
||||
obj_deinit(self);
|
||||
obj_deinit(globals);
|
||||
// obj_deinit(globals);
|
||||
args_deinit(buffs);
|
||||
ASSERT_FLOAT_EQ(res, 2.1);
|
||||
EXPECT_EQ(pikaMemNow(), 0);
|
||||
@ -290,7 +288,7 @@ TEST(VM, a_jjcc) {
|
||||
float res = args_getFloat(globals->list, (char*)"a");
|
||||
obj_deinit(self);
|
||||
args_deinit(buffs);
|
||||
obj_deinit(globals);
|
||||
// obj_deinit(globals);
|
||||
ASSERT_FLOAT_EQ(res, 5.8);
|
||||
EXPECT_EQ(pikaMemNow(), 0);
|
||||
}
|
||||
@ -311,7 +309,7 @@ TEST(VM, while_a_1to10) {
|
||||
int res = args_getInt(globals->list, (char*)"a");
|
||||
obj_deinit(self);
|
||||
args_deinit(buffs);
|
||||
obj_deinit(globals);
|
||||
// obj_deinit(globals);
|
||||
ASSERT_FLOAT_EQ(res, 10);
|
||||
EXPECT_EQ(pikaMemNow(), 0);
|
||||
}
|
||||
@ -333,7 +331,7 @@ TEST(VM, mem_x) {
|
||||
int res = obj_getInt(globals, (char*)"mem.x");
|
||||
EXPECT_EQ(2, res);
|
||||
obj_deinit(self);
|
||||
obj_deinit(globals);
|
||||
// obj_deinit(globals);
|
||||
args_deinit(buffs);
|
||||
EXPECT_EQ(pikaMemNow(), 0);
|
||||
}
|
||||
@ -353,11 +351,11 @@ TEST(VM, DEF_instruct) {
|
||||
"0 RET\n"
|
||||
"B0\n";
|
||||
PikaObj* self = New_TinyObj(NULL);
|
||||
Parameters* globals = pikaVM_runAsm(self, pikaAsm);
|
||||
pikaVM_runAsm(self, pikaAsm);
|
||||
char* methodPtr = (char*)obj_getPtr(self, (char*)"test");
|
||||
EXPECT_STREQ(methodCode, methodPtr);
|
||||
obj_deinit(self);
|
||||
obj_deinit(globals);
|
||||
// obj_deinit(globals);
|
||||
EXPECT_EQ(pikaMemNow(), 0);
|
||||
}
|
||||
|
||||
@ -375,7 +373,7 @@ TEST(VM, RET_instruct) {
|
||||
int num = arg_getInt(returnArg);
|
||||
EXPECT_EQ(num, 13);
|
||||
obj_deinit(self);
|
||||
obj_deinit(globals);
|
||||
// obj_deinit(globals);
|
||||
EXPECT_EQ(pikaMemNow(), 0);
|
||||
}
|
||||
|
||||
@ -395,7 +393,7 @@ TEST(VM, RUN_DEF) {
|
||||
int num = obj_getInt(globals, (char*)"a");
|
||||
EXPECT_EQ(num, 1);
|
||||
obj_deinit(self);
|
||||
obj_deinit(globals);
|
||||
// obj_deinit(globals);
|
||||
EXPECT_EQ(pikaMemNow(), 0);
|
||||
}
|
||||
|
||||
@ -414,13 +412,13 @@ TEST(VM, RUN_global) {
|
||||
"0 RUN test\n"
|
||||
"0 OUT b\n";
|
||||
PikaObj* self = New_TinyObj(NULL);
|
||||
Parameters* globals = pikaVM_runAsm(self, pikaAsm);
|
||||
int a = obj_getInt(globals, (char*)"a");
|
||||
int b = obj_getInt(globals, (char*)"b");
|
||||
pikaVM_runAsm(self, pikaAsm);
|
||||
int a = obj_getInt(self, (char*)"a");
|
||||
int b = obj_getInt(self, (char*)"b");
|
||||
EXPECT_EQ(a, 1);
|
||||
EXPECT_EQ(b, 1);
|
||||
obj_deinit(self);
|
||||
obj_deinit(globals);
|
||||
// obj_deinit(globals);
|
||||
EXPECT_EQ(pikaMemNow(), 0);
|
||||
}
|
||||
|
||||
@ -452,7 +450,7 @@ TEST(VM, RUN_local_b) {
|
||||
EXPECT_EQ(b, -999999999);
|
||||
EXPECT_EQ(c, 2);
|
||||
obj_deinit(self);
|
||||
obj_deinit(globals);
|
||||
// obj_deinit(globals);
|
||||
EXPECT_EQ(pikaMemNow(), 0);
|
||||
}
|
||||
|
||||
@ -482,7 +480,7 @@ TEST(VM, RUN_DEF_add) {
|
||||
EXPECT_EQ(b, -999999999);
|
||||
EXPECT_EQ(c, 3);
|
||||
obj_deinit(self);
|
||||
obj_deinit(globals);
|
||||
// obj_deinit(globals);
|
||||
EXPECT_EQ(pikaMemNow(), 0);
|
||||
}
|
||||
|
||||
@ -501,7 +499,7 @@ TEST(VM, run_def_add) {
|
||||
int c = args_getInt(globals->list, (char*)"c");
|
||||
obj_deinit(self);
|
||||
args_deinit(buffs);
|
||||
obj_deinit(globals);
|
||||
// obj_deinit(globals);
|
||||
ASSERT_FLOAT_EQ(c, 4);
|
||||
EXPECT_EQ(pikaMemNow(), 0);
|
||||
}
|
||||
|
@ -128,7 +128,7 @@ TEST(object_test, test6) {
|
||||
int32_t res = obj_getInt(globals, (char*)"res");
|
||||
EXPECT_EQ(3, res);
|
||||
obj_deinit(obj);
|
||||
obj_deinit(globals);
|
||||
// obj_deinit(globals);
|
||||
EXPECT_EQ(pikaMemNow(), 0);
|
||||
}
|
||||
|
||||
@ -180,7 +180,7 @@ TEST(object_test, printa) {
|
||||
);
|
||||
char* sysOut = obj_getSysOut(globals);
|
||||
ASSERT_STREQ(sysOut, "2");
|
||||
obj_deinit(globals);
|
||||
// obj_deinit(globals);
|
||||
obj_deinit(root);
|
||||
EXPECT_EQ(pikaMemNow(), 0);
|
||||
}
|
||||
@ -211,7 +211,7 @@ TEST(object_test, obj_run_while) {
|
||||
EXPECT_EQ(obj_getInt(globals, (char*)"a"), 0);
|
||||
EXPECT_EQ(obj_getInt(globals, (char*)"b"), 1);
|
||||
obj_deinit(root);
|
||||
obj_deinit(globals);
|
||||
// obj_deinit(globals);
|
||||
EXPECT_EQ(pikaMemNow(), 0);
|
||||
}
|
||||
|
||||
|
@ -26,7 +26,7 @@ TEST(pikaMain, new_mem) {
|
||||
PikaObj* memClassPtr = (PikaObj*)obj_getPtr(mem, (char*)"_clsptr");
|
||||
EXPECT_EQ((void*)memClassPtr, (void*)New_PikaStdLib_MemChecker);
|
||||
obj_deinit(pikaMain);
|
||||
obj_deinit(globals);
|
||||
// obj_deinit(globals);
|
||||
EXPECT_EQ(pikaMemNow(), 0);
|
||||
}
|
||||
|
||||
@ -56,7 +56,7 @@ TEST(pikaMain, list_new) {
|
||||
EXPECT_STREQ(a2, "eee");
|
||||
|
||||
/* deinit */
|
||||
obj_deinit(globals);
|
||||
// obj_deinit(globals);
|
||||
obj_deinit(pikaMain);
|
||||
EXPECT_EQ(pikaMemNow(), 0);
|
||||
}
|
||||
@ -86,7 +86,7 @@ TEST(pikaMain, int_float_convert) {
|
||||
EXPECT_FLOAT_EQ(b_i, 1);
|
||||
|
||||
/* deinit */
|
||||
obj_deinit(globals);
|
||||
// obj_deinit(globals);
|
||||
obj_deinit(pikaMain);
|
||||
EXPECT_EQ(pikaMemNow(), 0);
|
||||
}
|
||||
@ -96,7 +96,6 @@ TEST(pikaMain, type_) {
|
||||
pikaMemInfo.heapUsedMax = 0;
|
||||
PikaObj* pikaMain = newRootObj((char*)"pikaMain", New_PikaMain);
|
||||
/* run */
|
||||
Parameters* globals =
|
||||
obj_runDirect(pikaMain, (char*)
|
||||
"type(1)\n"
|
||||
"b = 1.4\n"
|
||||
@ -107,7 +106,7 @@ TEST(pikaMain, type_) {
|
||||
/* assert */
|
||||
|
||||
/* deinit */
|
||||
obj_deinit(globals);
|
||||
// obj_deinit(globals);
|
||||
obj_deinit(pikaMain);
|
||||
EXPECT_EQ(pikaMemNow(), 0);
|
||||
}
|
@ -13,7 +13,7 @@ TEST(sysObj, print) {
|
||||
printf("sysout = %s\r\n", sysOut);
|
||||
ASSERT_STREQ((char*)"hello world", sysOut);
|
||||
ASSERT_EQ(0, errCode);
|
||||
obj_deinit(globals);
|
||||
// obj_deinit(globals);
|
||||
obj_deinit(obj);
|
||||
EXPECT_EQ(pikaMemNow(), 0);
|
||||
}
|
||||
@ -26,7 +26,7 @@ TEST(sysObj, noMethod) {
|
||||
printf("sysout = %s\r\n", sysOut);
|
||||
ASSERT_EQ(1, strEqu((char*)"[error] runner: method no found.", sysOut));
|
||||
ASSERT_EQ(2, errCode);
|
||||
obj_deinit(globals);
|
||||
// obj_deinit(globals);
|
||||
obj_deinit(obj);
|
||||
EXPECT_EQ(pikaMemNow(), 0);
|
||||
}
|
||||
|
@ -542,13 +542,13 @@ exit:
|
||||
|
||||
void obj_runNoRes(PikaObj* slef, char* cmd) {
|
||||
/* unsafe, nothing would happend when error occord */
|
||||
obj_deinit(obj_runDirect(slef, cmd));
|
||||
obj_runDirect(slef, cmd);
|
||||
}
|
||||
|
||||
void obj_run(PikaObj* self, char* cmd) {
|
||||
/* safe, stop when error occord and error info would be print32_t */
|
||||
Parameters* globals = obj_runDirect(self, cmd);
|
||||
obj_deinit(globals);
|
||||
obj_runDirect(self, cmd);
|
||||
// obj_deinit(globals);
|
||||
}
|
||||
|
||||
void obj_setErrorCode(PikaObj* self, int32_t errCode) {
|
||||
|
@ -97,7 +97,6 @@ static enum Instruct getInstruct(char* line) {
|
||||
return NON;
|
||||
}
|
||||
|
||||
|
||||
Arg* pikaVM_runInstruct(PikaObj* self,
|
||||
Parameters* locals,
|
||||
Parameters* globals,
|
||||
@ -617,9 +616,7 @@ Parameters* pikaVM_runAsmWithPars(PikaObj* self,
|
||||
}
|
||||
|
||||
Parameters* pikaVM_runAsm(PikaObj* self, char* pikaAsm) {
|
||||
Parameters* globals = New_PikaObj();
|
||||
globals = pikaVM_runAsmWithPars(self, globals, globals, pikaAsm);
|
||||
return globals;
|
||||
return pikaVM_runAsmWithPars(self, self, self, pikaAsm);
|
||||
}
|
||||
|
||||
Parameters* pikaVM_run(PikaObj* self, char* multiLine) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user