Flex C

P2版FlexC快速入门指南

概述

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

C语言并不是官方支持的,但是有很多第三方的解决方案允许用C语言编程P2。本指南将告诉你如何开始使用FlexC,这是编程语言FlexProp套件中的C编译器。FlexProp是一个社区开发和支持的编译器,它允许用C、BASIC、Spin 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指令的内置内在特性

当前的限制

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

  • 不支持64位算术(long long不支持,double和float一样被处理)
  • 没有可变长度数组
  • 没有匿名结构和联合
  • 对指定初始化器的限制
  • 不完整的标准库

获得FlexC / FlexProp

要下载FlexProp GUI,请访问FlexProp发布页面并下载flexprop.zip文件。解压缩到某个方便的地方,例如你的桌面。

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

运行FlexC

连接P2评估板

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

运行和配置FlexProp

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

你会看到一个窗口,看起来像这样:

FlexProp初始屏幕

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

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

运行Hello World

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

输入:

# include < stdio . h >

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

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

Hello World程序

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

Hello World运行

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

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

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

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

闪烁的领导

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

# include < stdio . h >

int main ()

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

选择File > Save File As…

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

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

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

这些和其他螺旋桨特定特性在FlexC文档中进行了讨论,您可以通过Help > C Language菜单访问该文档。

故障排除

找不到P2

如果在Propeller Output窗口中得到“Could not find a P2”错误消息,请检查并确保已经关闭了所有其他的Propeller Output窗口。一次只能打开一个Propeller会话,如果您试图在Propeller Output(终端)窗口打开时运行程序,那么它将无法工作,也无法找到P2。

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

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

C语法错误

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

编译失败的对话框

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

FlexProp错误消息

在本例中,实际错误在前面一行,即带有printf(缺少分号)的那一行。编译器不可能总是在看到下一行之前就发现有问题,所以一定要看看周围的代码。

C支持Propeller2功能

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

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

该文件中还记录了其他有用的FlexC特性,所以很值得一读。

在命令行或Makefile中使用FlexC

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

使用来自FlexC的Spin2对象

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

struct __using(视频/ p2videodrv.spin2) vid;

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

从视频。initDisplay (&display1,请看。VGA, VGA_BASE_PIN, VGA_VSYNC_PIN, vid。RGBHV, &lineBuffer, linbufsize, 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编译器的视差螺旋桨和螺旋桨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,用户需要有一些嵌入式系统编程的经验。

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