FlexBASIC

P2上的FlexBASIC

概述

BASIC编程语言是1964年开发的一种简单语言,用于向初学者教授编程。多年来,它已演变成许多不同的方言,有许多不同的用途。BASIC在微型计算机革命的早期非常流行,并带有BASIC戳记,作为一种脚本语言在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源码库然后做“makeinstall”。

语言特性

FlexBASIC具有任何现代BASIC的大部分功能,例如:

  • 结构化编程构造(IF/THEN/ELSE、WHILE/WEND、DO/LOOP)
  • 函数和子程序
  • 数据类型:整数、浮点、字符串、类
  • 支持旧式行号和GOTO/GOSUB
  • 函数式编程特性(闭包和一级函数)

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

  • 内联汇编
  • 支持直接从BASIC调用Spin2对象
  • 用于在另一个COG中运行函数的cpu函数
  • 用于访问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。)

您应该看到出现了一个具有顶部和底部部分的窗口。

窗口的顶部是编辑器。这将包含多个选项卡(每个打开的文件对应一个选项卡)。

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

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

运行Hello World

选择文件>新建文件。这将打开一个新的“文件”选项卡,您可以在其中键入程序。让我们从经典的“hello world”节目开始。

输入:

打印“你好,世界”

正如你所看到的,这很简单。打印是将消息打印到串行终端的基本命令。要打印的消息用双引号括起来。

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

现在单击P2上的Compile & Run按钮。您应该会看到一些编译消息,然后会弹出一个标记为Propeller Output的终端窗口,该窗口将显示:

选择File > Save File As…并输入程序的名称(如hello.c)。FlexProp窗口现在看起来像这样:

Hello World程序

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

BASIC程序使用print打印的任何内容都将显示在Propeller Output窗口中。这是一个标准的ANSI控制台窗口(它使用适合于您的平台的默认终端程序,无论是Windows、Mac还是Linux),因此您可以使用ANSI转义序列来做一些事情,如清除屏幕、移动光标、更改文本颜色等等。

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

默认情况下,基本程序在P2引脚63和62上使用230400的波特率,该输出在终端中捕获。在任何打印之前,您可以在基本程序的开头添加一行,如_setbaud(_baud),以更改波特率。该行将波特率设置为_baud的任何值。FlexProp GUI会自动添加一个与您在Ports(端口)菜单中选择的内容相匹配的define for _BAUD。

当您完成与程序的交互后,必须关闭Propeller Output窗口。如果不这样做,那么以后在P2上运行的尝试将会失败,出现一个“无法找到P2”错误(请参阅下面的故障排除部分)。关闭窗口实际上并不会终止螺旋桨上的程序;它只是关闭串行连接,让P2运行。

闪烁的领导

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

常数ledpin=56
方向(ledpin) = output '使引脚输出


输出(ledpin) = 1 '设置引脚高
暂停500秒,等1/2秒
输出(LED引脚)=0'设置引脚低
暂停500秒,等1/2秒
循环

选择File > Save File As…现在再次按下P2上的Compile & Run按钮。终端窗口将再次出现,但没有输出显示在其中(所以您可以直接关闭它)。相反,你会看到连接在引脚56上的LED每秒钟闪烁一次。

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

多芯闪烁LED

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

多核led指示灯

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

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

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

子blinkit(销,延迟)

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

打印“睡觉”
waitms (10000)

故障排除

找不到P2

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

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

如果你有多个P2设备连接到你的计算机上,你可以通过在FlexProp的端口菜单中找到一个端口来选择要连接的端口。如果您想要的端口没有显示,单击Ports > Scan for Ports。

语法错误

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

单击OK,然后检查编译器输出窗口中的错误消息。例如,如果我们忘记了分号,可能会出现语法错误消息。错误消息提供了一个指向编译器第一次注意到问题所在行的链接。如果你点击链接,它会把你带到那条线上并点亮它。

编译器不可能总是在看到下一行之前就发现有问题,所以一定要看看周围的代码。

FlexBASIC语言文档

FlexProp中使用的BASIC语言文档可以在Help > BASIC语言菜单项下找到。这将打开一个带有FlexBASIC文档的web浏览器。该文档以PDF格式存在于FlexProp分发版的doc文件夹中的basic.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作为类

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

vid.initDisplay(@display1,vid.VGA,VGA_BASE_引脚,VGA_VSYNC_引脚,vid.RGBHV,@lineBuffer,LINEBUFSIZE,0);

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

其他资源

FlexProp帮助菜单包含讨论FlexProp支持的语言的各种功能的页面。Help>General Compiler Reference菜单包含适用于所有语言的信息,包括FlexBASIC。Help>BASIC Language菜单中有很多关于FlexBASIC的信息。

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

支持FlexProp和FlexBASIC开发

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

非常感谢对FlexProp开发的财政支持。您可以在https://patreon.com/totalspectrum上为FlexProp开发捐款。Patreon支持尽早访问beta版本,并优先修复bug。也可以通过PayPal的https://www.paypal.com/paypalme/totalspectrum接受捐赠。

视差标志白色背景
万博娱乐平台app
华盛顿州门罗路599号
美国加州罗克林95765
免费888-512-1024
订阅我们的通讯
保持联系
狗万地址多少
美国加州设计制造