<\/i>","library":"fa-solid"},"toggle":"burger"}" data-widget_type="nav-menu.default">

P2上的FlexC快速入门指南

概述

C语言被广泛用于各种计算机的编程,从嵌入式系统到超级计算机。它是一种相对低级的语言,但是比汇编语言更容易使用。由于C语言如此受欢迎,网上和书本上都有很多学习C语言的好资源。

官方并不支持C语言,但是有很多第三方解决亚搏娱乐网站方案允许用C语言编程P2。本指南将向您展示如何开始使用FlexProp编程语言套件中的C编译器FlexC。亚博竞彩app下载FlexProp是一个社区开发和支持的编译器,它允许用C、BASIC、Spi亚搏娱乐网站n 1、Spin 2和汇编语言对P2进行编程。

本文档假设您已经熟悉C语言。如果你还没有,网上有很多学习C语言的优秀资源。我们将主要讨论P2和FlexProp C编译器特有的特性。

FlexProp中的C:概述

FlexC (FlexProp C语言)仍在开发中,但它旨在支持C99编程语言规范,并从c++和GNU C进行了一些扩展。亚搏娱乐网站

平台支持亚搏娱乐网站

FlexProp可以在Windows、Mac OS X和Linux上运行。下面的说明适用于Windows。对于Mac,你会使用非常相似的指令。对于Linux,可能最容易克隆FlexProp git源存储库然后执行“make install”。

P2特定语言特征

FlexC还为P2编程提供了一些值得注意的扩展,包括:

  • 亚搏娱乐网站支持内联汇编
  • 亚搏娱乐网站支持调用Spin2和BASIC对象
  • __builtin_cogstart用于在另一个COG中运行函数
  • 用于访问P2指令的其他一些内置intrinsic

当前的限制

FlexC的当前版本相对于C99有一些限制

  • 不支持亚搏娱乐网站64位算术(不支持long long, double被视为float)
  • 没有可变长度数组
  • 没有匿名结构和联合
  • 对指定初始化式的限制
  • 不完整的标准库

获得FlexC / FlexProp

要下载FlexProp GUI,请转到FlexProp发布页面下载flexprop.zip文件。解压到方便的地方,比如你的桌面。

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

运行FlexC

连接P2评审板

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

运行和配置FlexProp

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

你应该会看到一个窗口出现,看起来像这样:

FlexProp初始屏幕

窗口的顶部部分是编辑器。这将包含许多选项卡(每个文件对应一个选项卡)。下面的部分标记为Compiler Output,包含来自编译器的消息,包括任何错误消息。

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

运行Hello World

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

输入:

# include < stdio . h >

Int main() {
printf (" hello, world ! \ n ");
返回0;

选择文件>另存为…,并为您的程序输入一个名称(如hello.c)。FlexProp窗口现在看起来应该是这样的:

Hello World程序

现在点击P2上的Compile & Run按钮。你应该会看到一些编译消息,然后会弹出一个名为Propeller Output的终端窗口,如下所示:亚博最新网站登录

Hello World运行

C程序打印的任何内容(例如printf函数)都将显示在螺旋桨输出窗口中。亚博最新网站登录这是一个标准的ANSI控制台窗口(它使用适用于您的平台的默认终端程序,无论是Windows、Mac还是Linux),因此您可以使用ANSI转义序列来做诸如清除屏幕、移动光标、更改文本颜色等事情。

螺旋桨输亚博最新网站登录出窗口实际上是一个交互式终端,所以如果你的程序需要终端输入,你也可以在那个窗口中输入。

默认情况下,C程序在引脚63和62上使用的波特率为230400,该输出在终端中捕获。您可以通过添加像_setbaud(_BAUD)这样的行来更改波特率;就在你的C main函数的开头,在任何printfs之前。这一行将设置波特率为_BAUD的值。FlexProp GUI自动为_BAUD添加一个定义,该定义与您在Ports菜单中选择的内容相匹配。

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

闪烁的领导

而不是打印信息,我们可能想要闪烁一个LED。选择“File > New”,进入如下程序:

# include < stdio . h >

int main ()

(,) {
_pinh (56);
_waitms (500);
_pinl (56);
_waitms (500);

选择“文件>另存为…”,并选择名称为“blink.c”。

现在再次按下P2按钮上的Compile & Run。终端窗口将再次出现,但不会显示任何输出(因此您不妨将其关闭)。相反,你会看到连接在引脚56上的LED每秒闪烁一次。

注意,在所有情况下都会弹亚博最新网站登录出一个螺旋桨输出窗口(当你不期望与P2交互时)。您可以立即关闭这个窗口。关闭它不会终止在P2上运行的程序;LED会一直闪烁。在任何情况下,您都必须在尝试运行另一个P2程序之前关闭该窗口。

_pinh(n)函数设置引脚n输出并驱动它高;类似地,_pin (n)驱动引脚低。_waitms(m)等待m毫秒。

这些和其他螺旋桨特定的特性在Fl亚博最新网站登录exC文档中进行了讨论,您可以通过帮助> C语言菜单访问该文档。

故障排除

找不到P2

如果在“螺旋桨输出”窗口中出现“无法找到P2”错误消息,请检查并确保已关闭所有其他“螺旋桨输出”窗口。亚博最新网站登录一次只能打开一个P亚博最新网站登录ropeller会话,如果你试图在一个Propeller Output(终端)窗口打开时运行一个程序,那么它将无法工作,也将找不到P2。

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

如果您有多个P2设备连接到您的计算机,您可以通过在FlexProp的Ports菜单下找到它来选择一个特定的端口连接。如果需要的端口没有出现,请单击“端口>扫描端口”。

C语法错误

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

编译失败对话框

单击OK,然后在Compiler Output窗口中检查错误消息。例如,如果我们忘记了一个分号,可能会有一个语法错误消息。错误消息提供了一个链接,指向编译器第一次注意到问题的行。如果你点击链接,它会把你带到这行,并突出显示它:

FlexProp错误信息

在这种情况下,实际错误在前面的行上,即带有printf的行(它缺少分号)。在看到下一行之前,编译器不能总是发现有问题,所以总是查看周围的代码。

C支亚搏娱乐网站持螺旋桨2功能亚博最新网站登录

大多数Pr亚博最新网站登录opeller2特性都包含在< Propeller2 .h>头文件中,这是P2的C编译器(大部分)标准化的。使用这些特性的程序应该可以移植到Catalina、riscvp2和其他用于P2的C编译器上。

P2的C特性文档可以在Help > C Language菜单项下找到。这将打开一个带有Flex C文档的web浏览器。propeller2.h部分描述了从C访问P2特性的可移植函数。亚博最新网站登录

其他有用的FlexC特性也记录在这个文件中,所以非常值得一读。

在命令行或Makefile中使用FlexC

有一个称为flexcc的前端,它可以用于在命令行上编译FlexC程序(或者从另一个构建系统(如Make)调用时)。

使用FlexC中的Spin2对象

在FlexC程序中可以直接使用Spin2对象。这一点在FlexC文档中已经讨论过了,但是它非常重要,我们应该在这里强调一下。Spin2对象可以使用特殊的结构体__using语法定义为FlexC结构。一个很好的例子是FlexProp附带的Mandelbrot演示。这可以在文件样本\Multi-Language\mandelbrot.c中找到。它使用Roger Loh用Spin2编写的P2视频对象。这是用:

Struct __using("video/p2videodrv.spin2")

这将创建一个名为vid的对象,该对象使用来自文件p2videodrv的Spin2代码。Spin2位于video子文件夹中。该对象的Spin2方法可以用常用的c++语法调用,例如:

从视频。initDisplay (&display1,请看。VGA, VGA_BASE_PIN, VGA_VSYNC_PIN, vid。RGBHV, &lineBuffer, LINEBUFSIZE, 0);

多语言的Mandelbrot演示还演示了FlexC的一些其他特性,比如内联汇编的使用。

其他资源

FlexProp帮助菜单中有讨论FlexProp支持的各种语言特性的页面。亚搏娱乐网站帮助>通用编译器参考菜单有适用于所有语言的信息,包括FlexC。帮助> C语言菜单有一些特定于C语言的信息。

关于FlexProp和FlexC的更多信息,请访问Parallax论坛。

用于P2的其他C编译器

除了FlexC,还有很多社区支持的P2 C编译器。亚搏娱乐网站

卡特琳娜C

https://sourceforge.net/projects/catalina-c/

Catalina是一个成熟的C编译器,用于Parallax Propeller和Propeller亚博最新网站登录 2。它支持亚搏娱乐网站C89标准和一些C99扩展。它适用于Windows和Linux,并带有GUI和调试器。它更注重稳定性和易用性,而不是性能。它友好的GUI和丰富的文档使它成为FlexC的一个很好的替代品,特别是对于P2和C编程的新手。

LLVM

https://github.com/ne75/p2llvm

这是一个基于LLVM工具链的原生P2编译器,LLVM是一个成熟的C编译器,可在许多平台上使用。P2端口仍在进行中,需要熟悉LLVM和嵌入式系统编程才能进行设置。

riscvp2

https://github.com/totalspectrum/riscvp2

这是一个基于GCC的用于RISC-V的P2工具链,以及一个从RISC-V rv32imac指令到P2指令的JIT编译器(因此是一种RISC-V模拟器)。因为指令在运行时被编译为P2代码,所以它的性能非常好,在一些基准测试中,它的性能超过了所有其他可用的P2编译器。它还有一个非常完整的运行时库(基于newlib)。但是,它没有GUI,并且它的用户需要有一些嵌入式系统编程的经验。