极度轻量
运行时不向系统申请堆内存,由宿主持有栈与全局区,适合低成本 MCU。
最新版本 v1.3.0 · 支持 float32
为单片机而生的
嵌入式脚本语言
熟悉的 C 风格语法,挂进现有固件即可运行。业务逻辑可单独下发更新,不必每次整包重烧。当前已支持整数与 浮点运算。
解决单片机业务逻辑僵化、更新麻烦的问题,用更少的资源换更灵活的交付。
运行时不向系统申请堆内存,由宿主持有栈与全局区,适合低成本 MCU。
熟悉的写法即可上手:整数、浮点、数组、循环判断,以及调用 C 接口。
按 1ms 节拍协作步进,不抢占主循环,原有实时与通信任务照常运行。
脚本直接调用已注册的 C 函数,读写传感器与线圈,打通业务与驱动。
从编写脚本到设备上协作运行,六步走完整条链路。
用 C 风格写 .pf 业务逻辑
pfcc 生成紧凑字节码
经串口 / CAN / 无线送到设备
虚拟机装载并开始调度
1ms 节拍执行,sleep 让出 CPU
经 FFI 读写传感器与 IO
当前步骤
编写脚本
在电脑上用熟悉的 C 语法编写业务:循环、分支、浮点与调用宿主函数。
采用「电脑编译、单片机执行」的分离方式:复杂编译留在 PC,MCU 只需轻量虚拟机按节拍跑脚本。
在电脑上用 C 风格编写脚本,编译成紧凑字节码,体积往往只有几十到几百字节。
经串口、CAN、蓝牙或 Wi‑Fi 把字节码送到设备,即可更新业务逻辑,无需整包重刷固件内核。
设备内虚拟机按时间片推进;遇到休眠指令会主动让出 CPU,保证主循环实时性。
通过外部函数接口调用 GPIO、传感器、打印等宿主能力,软硬件一体。
// 传感器超限则告警亮灯
void main() {
int val;
int threshold = 500;
while (1) {
val = sensor(0, 0);
if (val > threshold) {
set_bit(1, 1);
} else {
set_bit(1, 0);
}
sleep(100);
}
}
/* 主循环保持实时任务,顺带推进脚本 */
while (1) {
Motor_Loop();
Protocol_Process();
pf_tick_1ms();
Delay_ms(1);
}
本版重点增强浮点支持,适合滤波、阈值与比例计算等场景。
支持 float 变量与字面量,加减乘除、比较与类型转换一手齐。
新增打印浮点结果的接口,调试滤波与标定更直观。
编译器与运行时同版本发布,下载一份即可配套使用。
继续支持类型别名、数组指针、自增自减与三元等常用写法。
每一次发布都在补齐嵌入式现场真正需要的能力。
float32 运算与打印,满足滤波、比例与标定一类业务。
更多整数类型、数组指针与常见语法糖,写起来更顺手。
函数参数、逻辑与位运算、for / break / continue、全局数组。
多脚本、共享外部接口、主机编译工具与稳定运行时。
PF 由个人独立开发,希望为嵌入式社区提供更灵活的工具。若它对您有帮助,或您希望加速后续功能,欢迎扫码支持。每一份心意都是前进的动力。
感谢您的支持,捐赠将用于网站维护与后续功能开发。
在下载和使用 PF 语言(以下简称“本软件”)之前,请仔细阅读以下条款: