软件简介

Berry是一款一款为32位单片机设计的脚本语言。Berry解释器使用C89标准实现,该语言可以在RAM或ROM很小的设备上运行。

尽管Berry的体积很小,但是它也支持class以及闭包等功能,使得单片机可以具有较好的二次开发能力。Berry没有将数值和字符串等简单类型设计为对象,这样不仅节省了RAM还可以防止频繁的malloc()调用。此外该脚本语言还有一些减少内存使用的优化。

Berry非常容易和C语言进行交互,您可以使用C API调用Berry代码,也可以在Berry代码中调用C语言实现的原生函数或者类。

以下是Berry支持的基本类型:

  • nil:空类型

  • 数值型:integer、real

  • boolean:布尔型

  • string:字符串类型

  • class:类,用于提供面向对象支持

  • list:可变长度数组

  • map:哈希表

  • range:存储一个整数区间

  • function:所有的函数都是function类型

其中list、map和range是class类型。nil、integer、real和boolean型的数据不需要使用动态内存分配。

运算符和控制语句与C语言相似,具体语法信息可以参考README文件项目文档

特性

  • 基本类型
    • 数值:整数(int)和实数(real
    • 布尔值:truefalse
    • 字符串:单引号和双引号
    • 列表:连续的内存列表,例如 [1, 2, 3]
    • 地图:哈希地图,例如 { 'a': 1, 2: 3, 'map': {} }
    • 范围:包括一个较低和较高的整数值,例如 0..5
  • 运算符和表达式
    • 赋值运算符:=+=-=*=/=%=&=|=^=<<=>>=
    • 关系运算符:<<===!=>>=
    • 逻辑运算:&&||!
    • 算术运算符:+-*/%
    • 位运算符:&|~^<<>>
    • 现场操作员: .
    • 下标运算符: []
    • 连接字符串运算符: +
    • 条件运算符: ? :
    • 括号: ()
  • 控制结构
    • 条件语句: if-else
    • 迭代语句:whilefor
    • 跳转语句:breakcontinue
  • 功能
    • 局部变量和块范围
    • 退货声明
    • 嵌套函数定义
    • 基于升值的封闭
    • 匿名功能
    • Lambda表达式
    • 继承(仅公共单继承)
    • 方法和运算符重载
    • 构造方法
    • 破坏性方法
  • 模块管理
    • 内置模块几乎不需要RAM
    • 扩展模块支持:脚本模块,字节码文件模块和共享库(例如* .so,*。dll)模块
  • GC(垃圾收集)
    • 标记扫描GC
  • 异常处理
    • 使用raise语句抛出任何异常值
    • 多重捕获模式
  • 字节码文件支持
    • 将功能导出到字节码文件
    • 加载字节码文件并执行
展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (21)

加载中
这个语法好,能不能做成通用语言呢
2020/01/22 16:20
回复
举报
过招铁是傻软件作者
目前应该还是比较通用的,没有专门为了单片机去限制一些东西。
2020/02/05 14:37
回复
举报
越精简越好,支持好C,除掉C++的,不要CLass等一些特性更好。
2019/09/11 08:54
回复
举报
过招铁是傻软件作者
class实现占的空间很小,实际上class也不是berry设计的重点
2019/09/27 08:25
回复
举报
发私信你了
2019/10/31 10:47
回复
举报

引用来自“过招铁是傻”的评论

这个脚本的设计目标之一是要比Lua小,目前它的启动RAM堆占用大约2.5KB(如果要跑脚本的话建议8KB以上),ROM需要40多KB。这里有一个STM32F103RCT6的移植:https://github.com/gztss/berry_mcu。以后我想把一些hash表做到ROM里头去,这样可以进一步减少RAM使用。性能其实和Lua差不多。

引用来自“久永”的评论

NB,强两年有个东西本来想要103用,可惜没有对应好的软件生态,只好作罢。103现在貌似很便宜吧?

引用来自“过招铁是傻”的评论

103RCT6淘宝上不到9块钱一片,跑我这个脚本绰绰有余,实际上只要是STM32F103CBT6就能跑起来了。

引用来自“久永”的评论

要是能搞个开发环境或者 VS 的语言支持插件,那推广起来就NB了!

引用来自“过招铁是傻”的评论

VS Code的插件是有的,在tools/pulgins/vscode文件夹下面,开发环境的话就比较麻烦了,我现在还没做KEIL的移植,打算等语言的基础功能稳定了再重点搞单片机平台的移植,目前再单片机上跑也只是简单的验证一下。
有个插件就可以了,从头弄开发工具,消耗精力太多了,没有必要。 要是专门做语言,可以实现下语言服务器。
2019/01/02 22:12
回复
举报
过招铁是傻软件作者

引用来自“过招铁是傻”的评论

这个脚本的设计目标之一是要比Lua小,目前它的启动RAM堆占用大约2.5KB(如果要跑脚本的话建议8KB以上),ROM需要40多KB。这里有一个STM32F103RCT6的移植:https://github.com/gztss/berry_mcu。以后我想把一些hash表做到ROM里头去,这样可以进一步减少RAM使用。性能其实和Lua差不多。

引用来自“久永”的评论

NB,强两年有个东西本来想要103用,可惜没有对应好的软件生态,只好作罢。103现在貌似很便宜吧?

引用来自“过招铁是傻”的评论

103RCT6淘宝上不到9块钱一片,跑我这个脚本绰绰有余,实际上只要是STM32F103CBT6就能跑起来了。

引用来自“久永”的评论

要是能搞个开发环境或者 VS 的语言支持插件,那推广起来就NB了!
VS Code的插件是有的,在tools/pulgins/vscode文件夹下面,开发环境的话就比较麻烦了,我现在还没做KEIL的移植,打算等语言的基础功能稳定了再重点搞单片机平台的移植,目前再单片机上跑也只是简单的验证一下。
2019/01/02 16:09
回复
举报

引用来自“过招铁是傻”的评论

这个脚本的设计目标之一是要比Lua小,目前它的启动RAM堆占用大约2.5KB(如果要跑脚本的话建议8KB以上),ROM需要40多KB。这里有一个STM32F103RCT6的移植:https://github.com/gztss/berry_mcu。以后我想把一些hash表做到ROM里头去,这样可以进一步减少RAM使用。性能其实和Lua差不多。

引用来自“久永”的评论

NB,强两年有个东西本来想要103用,可惜没有对应好的软件生态,只好作罢。103现在貌似很便宜吧?

引用来自“过招铁是傻”的评论

103RCT6淘宝上不到9块钱一片,跑我这个脚本绰绰有余,实际上只要是STM32F103CBT6就能跑起来了。
要是能搞个开发环境或者 VS 的语言支持插件,那推广起来就NB了!
2019/01/02 13:56
回复
举报
过招铁是傻软件作者

引用来自“过招铁是傻”的评论

这个脚本的设计目标之一是要比Lua小,目前它的启动RAM堆占用大约2.5KB(如果要跑脚本的话建议8KB以上),ROM需要40多KB。这里有一个STM32F103RCT6的移植:https://github.com/gztss/berry_mcu。以后我想把一些hash表做到ROM里头去,这样可以进一步减少RAM使用。性能其实和Lua差不多。

引用来自“久永”的评论

NB,强两年有个东西本来想要103用,可惜没有对应好的软件生态,只好作罢。103现在貌似很便宜吧?
103RCT6淘宝上不到9块钱一片,跑我这个脚本绰绰有余,实际上只要是STM32F103CBT6就能跑起来了。
2019/01/02 13:15
回复
举报

引用来自“过招铁是傻”的评论

这个脚本的设计目标之一是要比Lua小,目前它的启动RAM堆占用大约2.5KB(如果要跑脚本的话建议8KB以上),ROM需要40多KB。这里有一个STM32F103RCT6的移植:https://github.com/gztss/berry_mcu。以后我想把一些hash表做到ROM里头去,这样可以进一步减少RAM使用。性能其实和Lua差不多。
NB,强两年有个东西本来想要103用,可惜没有对应好的软件生态,只好作罢。103现在貌似很便宜吧?
2019/01/02 11:18
回复
举报
过招铁是傻软件作者
这个脚本的设计目标之一是要比Lua小,目前它的启动RAM堆占用大约2.5KB(如果要跑脚本的话建议8KB以上),ROM需要40多KB。这里有一个STM32F103RCT6的移植:https://github.com/gztss/berry_mcu。以后我想把一些hash表做到ROM里头去,这样可以进一步减少RAM使用。性能其实和Lua差不多。
2019/01/02 09:42
回复
举报
用microPython的路过
2019/01/02 08:57
回复
举报

引用来自“简单生活”的评论

和lua对比 内存占用 代码尺寸,性能都有什么优势?
+1
2019/01/01 21:58
回复
举报
更多评论
2019/06/22 15:45

嵌入式脚本语言 Berry 发布 v0.1.0 版本

Berry 是一款面向小型嵌入式系统的脚本语言,目前发布了 0.1.0 版本。相比于其他脚本语言,Berry 更加精简,因此更适合在单片机上运行。该版本的语言主要特性为: 基本类型 数值类型:整数(int)和浮点数(real) 布尔类型:true 和 false 字符串:使用单引号或者双引号包围的文本 List:连续存储列表,例如 [1, 2, 3] Map:Hash 表,例如 { 'a': 1, 2: 3, 'map': {} } Range:包含一个下限值和上限值,如 0..5 运算符和表达式...

6
18
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
发表于开发技能专区
01/08 17:04

香蕉派 Banana PI M2 Berry BPI M2 Berry 开发板

香蕉派 BPI-M2 Berry 四核开源单板计算机,全尺寸兼容树莓派3 香蕉派 BPI-M2 Berry 四核单板计算机采用全志 V40芯片开发。支持板载Wifi与蓝牙,支持SATA接口,可以直接接硬盘。板上有SD卡插座,可以从SD卡启动系统镜像。 Banana PI BPI-M2 Berry 兼容性强大,可以跑android系统,Debian linux,Ubuntu linux, Raspberry Pi系统和全志TinaLinux系统. Banana PI BPI-M2 Berry硬件:全志V40四核处理器,1GB LPDDR3内存,千兆以太网口,...

0
0
发表了博客
2019/07/30 12:08

为 STM32 移植 Berry 脚本语言

Berry 是我为单片机设计的一款脚本语言,该语言具有资源占用小、平台无关、执行速度快和易于掌握等优点。在单片机上使用脚本语言可以提高单片机的二次开发能力以及调试效率,同时也是一种比较新颖的玩法。本教程将简要介绍在 STM32F103RBT6 单片机上移植 Berry 脚本语言的方法。教程的末尾给出了移植完成的示例工程,读者可以根据本教程的内容和示例工程完成自己的移植工作。 我使用 ST 推出的 CubeMX 软件进行单片机固件库的配...

0
0
发表了博客
2019/12/21 14:07

codeforcesC - Berry Jam(折半枚举+1-1序列前后缀和)

Educational Codeforces Round 78 (Rated for Div. 2) C - Berry Jam C. Berry Jam time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Karlsson has recently discovered a huge stock of berry jam jars in the basement of the house. More specifically, there were 2n2n jars of strawberry and blueberry jam. All the 2n2n jars are arranged in a row. T...

0
0
2020/12/23 11:48

ckanext-emailasusername-允许用户使用电子邮件和用户名登录。-Jonathan Berry Requirements Installation Running the Te...

ckanext-emailasusername-允许用户使用电子邮件和用户名登录。-Jonathan Berry 发布:2020-12-23 11:48:50.331965 作者:Jonathan Berry 作者邮箱:jonathan@fjelltopp.org 首页:https://github.com/jonathansberry/ckanext-emailasusername 文档:None 下载链接 .. You should enable this project on travis-ci.org and coveralls.io to make these badges work. The necessary Travis and Coverage config files have been gene...

0
0
发表了博客
2020/12/12 09:12

领先律所ROSEN提醒Berry Corporation投资者注意BRY证券集体诉讼的重要截止日期;鼓励损失超过10万美元的投资者联系律所

纽约--(美国商业资讯)--全球投资者权益律所Rosen Law Firm提醒:(a)依照和/或在2018年7月26日或前后Berry Corporation (NASDAQ: BRY)首次公开募股(“IPO”或“募股”);以及/或者(b)在2018年7月26日至2020年11月3日(含上述日期,简称“集体诉讼期”)期间购买该公司证券的人士注意,本证券集体诉讼中首要原告的重要截止日期为2021年1月21日。诉讼旨在依据联邦证券法弥补Berry投资者所蒙受的损失。 如需加入Berry集体诉讼,请...

0
0
2020/03/30 20:33

经验:停止 cherry-pick,请开始 merge!

点击蓝色小字关注! 关注一下你就不会有bug! cherry-pick 是一个比较常用的 git 操作,可以将一个分支上的 commit “精选”到另一个分支上。然而在最近的开发过程中,却时不时的遇到 merge 冲突。在下文中,我将会详细的分析 cherry-pick 造成冲突的原因,以及 cherry-pick 可能造成的其他更严重问题。 我们以一个简单的例子来进行分析: 如上图:我们有一个 master 分支,以及一个 feature 分支。这个例子中我们只关注其中的一...

0
0
发表了博客
2020/06/25 11:55

运维之数据库查询1(简单入门,从浅入深)通俗易懂

运维之数据库查询1(简单入门,从浅入深)通俗易懂 下篇运维之数据库查询2(简单入门,从浅入深)通俗易懂 其实在青鸟学习了1年的专业技术,数据库都是一概而过的,基本没学到什么,所以到了工作岗位,而且我是做系统运维的,并且是游戏公司,所以数据库真的太重要,尤其数据库查询,根据数据库查询可以很快的查询到所使用的字段,最后介绍个 运维常用数据库工具。 select查询的基本结构 select 字段   ...

0
0
发表于硬件 & IoT专区
2017/10/30 18:21

Banana pi 系列开发板金属外壳面世

Banana pi 系列开发板金属外壳面世 BPI-M2 Berry 金属外壳 ![输入图片说明](https://static.oschina.net/uploads/img/201710/30181716_kbl4.jpg "BPI-M2 Berry 金属外壳") ![输入图片说明](https://static.oschina.net/uploads/img/201710/30181758_YTBe.jpg "BPI-M2 Berry 金属外壳") Banana PI BPI-M64, BPI-M3, BPI-M2 Ultra 金属外壳: ![输入图片说明](https://static.oschina.net/uploads/img/201710/30181851_Y0m7.jpg "...

0
0
发表了博客
2020/12/12 09:11

全球投资者法律顾问ROSEN提醒Splunk Inc.投资者注意SPLK证券集体诉讼的重要截止日期;鼓励损失超过10万美元的投资者联系律所

纽约--(美国商业资讯)--全球投资者权益律所Rosen Law Firm提醒:(a)依照和/或在2018年7月26日或前后Berry Corporation (NASDAQ: BRY)首次公开募股(“IPO”或“募股”);以及/或者(b)在2018年7月26日至2020年11月3日(含上述日期,简称“集体诉讼期”)期间购买该公司证券的人士注意,本证券集体诉讼中首要原告的重要截止日期为2021年1月21日。诉讼旨在依据联邦证券法弥补Berry投资者所蒙受的损失。 如需加入Berry集体诉讼,请...

0
0
发表了博客
2020/11/03 09:28

美国顶级生物技术风投如何孵化AI药物研发组合:大小分子药物两手抓,但数据质量仍是最大掣肘

  计算机辅助药物发现(computer-aided drug discovery,CADD)以“AI药物发现”之名换代升级、热潮又起。距离上一次对计算机高涨的热情已经过去快40年了,但目前AI药物发现的进展依旧缓慢。人工智能的拥护者们在这一次AI浪潮中又将为医药产业带来些什么?   “机器学习算法的突破、计算能力的指数级增长、DNA测序以及DNA合成的加速发展,使我们能够以前所未有的速度从生物学中学习。”国际知名医疗风投机构Flagship Pionee...

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
暂无内容
21 评论
50 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部