FlexBASIC

P2上的FlexBASIC

概述

基本的编程语言是在1964年开发的,作为向初学者教学编程的简单语言。多年来它已经发展成为许多不同的方言,许多不同的用途。基本在微型计算机革命的早期和基本邮票中非常受欢迎,并且仍然在PC上作为脚本语言成功。

FlexBASIC是P2的FlexProp编程套件所接受的BASIC语言。BASIC的FlexBASIC版本主要兼容流行的PC BASIC版本,如QuickBasic和FreeBASIC,以及较老的BASIC版本,如用于C64的Commodore BASIC。

支持平台

FlexBASIC是FlexProp的一部分。FlexProp可以在Windows、Mac OS X和Linux上运行。下面的说明是针对Windows的。对于Mac,你会使用非常类似的说明。对于Linux,克隆可能是最简单的FlexProp git源码库并进行“安装”。

语言特性

FlexBasic具有任何现代基本的大部分功能,例如:

  • 结构化编程构造(如果/然后/ else,wher / wend,do / loop)
  • 函数和子程序
  • 数据类型:整数,浮点,字符串,类
  • 支持旧式行号和GOTO/GOSUB
  • 函数式编程功能(闭包和一级函数)

FlexBASIC还有一些引人注目的P2编程扩展,包括:

  • 内联汇编
  • 支持直接从BASIC调用Spin2对象
  • CPU用于在另一个COG中运行功能的函数
  • 用于访问P2指令的内置内在特性

获得FlexBASIC / FlexProp

要下载FlexProp GUI,请转到FlexProp发布页面并下载flexprop.zip文件。将此文件解压缩到方便的地方,例如桌面。

不要把它放在系统文件夹中(比如Program Files文件夹;FlexProp配置文件存储在可执行文件旁边,所以它所在的文件夹必须是可写的。

运行FlexBasic.

连接P2评估板

将micro-USB线缆插入P2 Eval板上的“PC USB”插座;将另一端连接到PC的USB插座上。USB-2或USB-3都可以。

运行和配置FlexProp

导航到解压缩FlexProp.zip的FlexProp文件夹。双击FlexProp.exe。您可能会收到有关未知出版商的警告;您可能会忽略此警告。

(在MacOS和Linux上,您应该运行flexprop.tcl文件而不是flexprop.exe。这需要安装tcl/Tk语言。默认情况下,它安装在MacOS上。在Linux上,请确保使用Linux软件包管理器安装tcl和Tk。)

你应该看到一个窗口,上面有一个顶部和底部。

窗口的顶部是编辑器。这将包含许多标签(对于您打开的每个文件一个)。

下半部分标记为编译器输出,包含来自编译器的消息,包括任何错误消息。

最初,编辑器中没有打开的选项卡。要开始,您必须启动一个新文件(文件>新文件)或加载一个示例(文件>打开文件)。对于这个快速入门GUI,我们将尝试一个新文件。

运行Hello World

选择文件>新文件。这将打开一个新的文件选项卡,您可以键入您的程序。让我们从经典的“Hello World”程序开始。

输入:

打印“你好,世界”

如你所见,这很简单。print是将消息打印到串行终端的基本命令。要打印的消息括在双引号中。

现在选择文件>将文件保存为...并输入程序的名称(如Hello.bas)。* .bas是基本程序的传统文件扩展名。FlexProp使用此文件扩展名来确定您的程序写入的语言;这是必要的,因为FlexProp还支持许多语言,例如Spin2和C,除了基本之外。

现在单击“在P2上编译并运行”按钮。您应该会看到一些编译消息,然后会弹出一个标有“螺旋桨输出”的终端窗口,该窗口将显示:

选择文件>另存为…并输入程序名称(如hello.c)。FlexProp窗口现在应该看起来像:

你好世界节目

现在单击“编译和运行”按钮。您应该看到一些编译消息,然后终端窗口应弹出标记的螺旋桨输出,如:

基本程序打印的任何内容都将显示在螺旋桨输出窗口中。这是一个标准的ANSI控制台窗口(它使用适用于您的平台的默认终端程序,无论是Windows、Mac还是Linux),因此您可以使用ANSI转义序列执行清除屏幕、移动光标、更改文本颜色等操作。

Propeller Output窗口实际上是一个交互式终端,所以如果您的程序需要终端输入,您也可以在那个窗口中输入它。

默认情况下,基本程序在P2引脚63和62上使用230400的波特率,并且该输出在终端中捕获。在任何打印之前,您可以通过在基本程序开始时添加_setbaud(_baud)如_setbaud(_baud)的行来更改波特率。这条线将使波特率设置为_Baud的值。FlexProp GUI会自动为_Baud添加定义,该_Baud匹配您在端口菜单中选择的内容。

完成与程序的交互后,必须关闭“螺旋桨输出”窗口。如果没有,则以后在P2上运行的尝试将失败,并出现“找不到P2”错误(请参阅下面的故障排除部分)。关闭窗口实际上不会终止螺旋桨上的程序;它只是关闭串行连接并保持P2运行。

闪烁的领导

而不是打印信息,我们可能想要闪烁的LED。选择File > New并进入以下程序:

Const Ledpin = 56
方向(ledpin) = output '使引脚输出


输出(ledpin) = 1 '设置引脚高
暂停500'等待1/2秒
输出(LEDPIN)= 0'SET PIN LOW
暂停500'等待1/2秒

选择文件>将文件另存为…并选择一个名称,如blink.bas。现在再次按下“在P2上编译并运行”按钮。终端窗口将再次出现,但其中不会显示任何输出(因此您可以关闭它)。相反,您将看到连接到针脚56的LED每秒闪烁一次。

注意,在所有情况下(在不希望与P2交互的情况下)都会弹出一个Propeller Output窗口。你可以立即关闭这个窗口。关闭它不会终止在P2上运行的程序;LED会一直闪烁。在任何情况下,都必须在尝试运行另一个P2程序之前关闭该窗口。

多核闪烁LED

这里有一个闪烁多个LED的示例程序,每个LED使用一个CPU核(“齿轮”)。这当然有点过分了,在实际的程序中,您可能会使用smartpins,或者最多只使用一个齿轮来处理所有的led,但它说明了在另一个CPU中运行代码的原理。

'多芯led闪光灯

“常数
const STACKSIZE=每个COG的10'小堆栈
常量NUMCOGS=4

'每个独立核心(cog)都需要一些堆栈空间
一起工作。最小堆栈大小为8;更多的
复杂的子程序可能需要更多
'每个局部变量额外的长,至少)

dim stack(STACKSIZE*(NUMCOGS+1)) as integer
'使针脚上的led闪烁的子例程
'延迟是切换之间的延迟毫秒数
'请注意,与所有变量一样,参数也是默认值
'到整数;要获取字符串或单个,可以是变量
'名称必须分别以$或%结尾,否则
'给出一个显式类型,如"as string"
'
子闪烁(引脚、延迟)

PINHI(PIN)
waitms(延迟)
pinlo(销)
waitms(延迟)

终止子
声明一个变量来保存哪个CPU启动了
如上文所述,可以省略“as integer”,因为
' integer是默认的变量类型
Dim cog为整数
for i = 1 to NUMCOGS
= cpu(blinkit(55+i, 200*i), @stack(i*STACKSIZE))
打印“起始cog”;齿轮
waitms(1000)
接下来,我

打印“睡觉”
waitms (10000)

故障排除

找不到P2

如果您在Propeller输出窗口中获得“找不到P2”错误消息,请检查并确保您已关闭所有其他螺旋桨输出窗口。一次只能打开一个螺旋桨会话,如果您尝试在螺旋桨输出(终端)窗口打开时运行程序,则它将无法工作,并且找不到P2。

如果这不是问题,请检查到P2的连接,并在Ports菜单下查看选择了哪个端口。如果你知道P2连接到哪个端口,你可以手动选择那个端口来强制FlexProp使用它。

如果有多个P2设备连接到您的计算机,您可以在FlexProp的“端口”菜单下找到要连接的特定端口。如果您想要的端口未显示,请单击端口>扫描端口。

语法错误

如果在你的程序中有一个语法错误,你会得到一个对话框:

单击“确定”,然后检查编译器输出窗口中的错误消息。例如,如果我们忘记了分号,则可能存在语法错误消息。错误消息提供指向编译器首先注意到问题的行的链接。如果单击该链接,它将带您到行和困难。

在看到下一行之前,编译器无法始终找出问题所在,因此请始终查看周围的代码。

FlexBASIC语言文档

FlexProp中使用的基本语言的文档可在帮助>基本语言菜单项下找到。这将打开包含FlexBASIC文档的web浏览器。此文档也可以在FlexProp发行版的doc文件夹中的basic.PDF文件中找到PDF格式。

使用FlexBasic使用Spin2对象

Spin2对象可以直接在FlexBASIC程序中使用。这在FlexBASIC文档中已经讨论过了,但是它非常重要,所以我们应该在这里强调一下。Spin2对象可以使用特殊的class using语法定义为FlexBASIC类。FlexProp附带的Turtle演示就是一个很好的例子。这可以在文件示例\Multi-Language\turtle_demo.bas中找到。它使用了由Roger Loh在Spin2中编写的P2视频对象。这是用:

使用“video/p2videodrv.spin2”将视频变暗为类

这将创建一个名为vid的对象,该对象使用位于视频子文件夹中的p2videodrv.Spin2文件中的Spin2代码。此对象的Spin2方法可以使用通常的基本语法调用,如:

vid.initdisplay(@ display1,vid.vga,vga_base_pin,vga_vsync_pin,vid.rgbhv,@linebuffer,linebufsize,0);

这个多语言的turtle演示还演示了FlexBASIC的其他一些特性,比如使用BASIC中的C函数,以及访问PC或SD卡上的文件的mount命令。

其他资源

FlexProp帮助菜单具有页面,该页面讨论FlexProp支持的语言的各种功能。帮助>常规编译器参考菜单具有适用于所有语言的信息,包括Flexbasic。帮助>基本语言菜单有很多关于FlexBasic的信息。

有关FlexProp和FlexBASIC的更多信息,请参见Parallax论坛。

支持FlexProp和FlexBASIC开发

FlexProp和FlexBASIC是社区开发和支持的开源项目。源代码在https://github.com/totalspectrum/flexprop。您的错误报告和错误修复有助于改进它。

非常感谢对FlexProp开发的财政支持。您可以通过以下方式向FlexProp开发部门捐款:https://patreon.com/totalspectrum. Patreon支持尽早访问测试版,并优先修复bug。捐款也可以通过PayPal接受https://www.paypal.com/paypalme/totalspectrum.