Skip to content

在main.py中定义函数不识别、最新版本固件太大的问题 #356

Description

@AirCity456

1. 主函数不识别问题

现在我在main.py定义函数时,存在识别不到所定义函数的问题。具体问题代码如下(已经是全部代码,最小化测试):

import PikaStdLib

def blinkTest():
    print("blink tick")


def statTest():
    print("stat tick")


def initTimer():
    print("timer started")

blinkFunc = blinkTest
statFunc = statTest
initTimerFunc = initTimer

错误现象,比如这个,报错信息为blinkTest没定义,其实都已经定义了的,具体运行报错信息如下:

pikascript-core==v1.11.8 (2022/12/03 19:05:57)
PikaStdLib==v1.11.8
===========================================

~~~/ POWERED BY \~~~
~  pikascript.com  ~
~~~~~~~~~~~~~~~~~~~~
NameError: name 'blinkTest' is not defined
 -> REF blinkTest               (#102)

目前做过的尝试:

  1. 修改函数名(无效)。
  2. 直接调用函数,而不用对象把函数装起来(无效)。
  3. 调换函数定义顺序(有时有效)。

Pikascript和pikastdlib版本号都是1.11.8,运行在nano模式。
平台为ch203cbt6(128k flash 32k ram),m3核,主频72m。

补充:在Pikascript和pikastdlib版本号都为1.13.4上也测试了存在此问题。

2. Flash空间大小问题

目前我在平台为ch203cbt6(128k flash 32k ram),m3核,主频72m上对Pikascript和pikastdlib版本号都为1.13.4的源码进行编译,编译配置如下:

  1. 编译器版本为AC6.22.
  2. 不使用微库。
  3. PIKA_NANO_ENABLE=1。
  4. 工程只有串口驱动,main.py中为prinf("Hello world")的简单测试代码。
  5. 编译时为-Oz + LTO + One ELF Section Per Function。
    在这种情况下,如果代码如下:
void App_Init(void)
{
		// PikaObj * pikaMain = pikaScriptInit();
    
    return;
}

此时编译占用的ROM为3.31kB。

如果:

void App_Init(void)
{
		PikaObj * pikaMain = pikaScriptInit();
    
    return;
}

此时ROM占用为95.20kB。

请问这个空间占用是否正常?我看到官方文档有说到nano模式下可以在64k Flash的单片机上运行,要如何配置才能将该工程控制在64k以内?

当前 Linux core 资源量化基线

语法兼容修复分支 fix/syntax-compat-issues 的 R13 提交 ed6948738 完成了 default/minimal 双配置测量:

  • R12 基线:default text=1080693 data=125784 bss=24338;minimal text=1028379 data=47180 bss=23074
  • R13 当前值:default text=1081861 data=125784 bss=24338;minimal text=1029539 data=47180 bss=23074
  • 本轮正确性和错误可见性修复增加 default/minimal text 1168/1160 B,静态 data/bss 无增量。
  • 函数参数绑定临时结构 FunctionArgsInfo 保持 88 B,没有结构体 RAM 增量。
  • 这些数值来自 Linux 静态库 size -t libpikascript-core.a,不能直接替代 Cortex-M 的 AC6 -Oz + LTO 最终链接结果。

64 KiB 目标仍需在 nano 配置下用实际 ARM 工程 map 文件按保留符号和模块拆分,确认标准库、文件系统、设备模块及链接选项的贡献;当前证据只说明本轮语法修复没有增加静态 RAM,并保留约 1.1 KiB 可解释的 Flash 债务。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions