Ultibo系统包含一个完全用Object Pascal编写的内核,以及构建嵌入式系统所需的所有基本组件。从USB堆栈到网络的所有功能全是用Object Pascal编写的。
Ultibo 核心是一个功能齐全的环境,用于在树莓派(所有型号)上进行嵌入式或裸机(没有操作系统)开发。它不是操作系统本身,但提供许多与操作系统相同的服务,如内存管理、线程、网络和文件系统。Ultibo 核心主要旨在通过提供通用功能和服务,并消除从头开始的需求,使嵌入式应用程序的开发尽可能类似于其他平台的开发,因此可以使用许多不同的方式。
您可能希望仅使用它来开发利用大量 API 创建连接设备的应用程序,或者支持通用硬件(如 USB 和标准协议(如 IP、TCP 和 UDP)或通过 GPIO 的物理计算的应用程序控制。或者,您可以使用它来试验操作系统设计和嵌入式开发,避免从头开始创建所有内容,并允许您在已经采用基础知识的环境中专注于尝试想法和概念照顾。
更高级的用户可以选择使用 Ultibo 核心作为探索特定 ARM 技术(如 TrustZone 和虚拟机管理程序模式)的基础,因为您拥有完整且不受限制的硬件访问,您可以"接管"一个或多个 CPU,例如根据需要使用,仍然允许 Ultibo 内核提供基本服务,如网络连接和日志记录。
虽然 Ultibo Core并非设计为实时操作系统 (RTOS),但它提供对硬件的无限制访问,并允许选择包括实时组件而无需绕过操作系统功能。
无论你选择用哪种方式,可能性都只受你的想象力的限制。
安装 Ultibo 内核
开始嵌入式编程有时需要几个小时的工作,然后才能编写哪行代码,Ultibo 内核通过打包 Windows 的简单可下载安装程序中所需的一切来减轻开始的痛苦。
安装程序包括Free Pascal编译器、Lazarus IDE 和 Ultibo Core,所有配置并准备开始创建应用程序。从下载页面获取 Ultibo 核心安装程序并将其保存到计算机上的临时位置。
Ultibo 内核在任何 Windows 计算机上安装都相当安全,除了上面的项目外,没有其它内容安装,并且所有内容都包含在单个文件夹中(通常为 C:\Ultibo\Core)。即使您已经安装了 Lazarus 或 Free Pascal,它们也不会受到影响,因为 Ultibo 核心安装到不同的文件夹中,并将其设置与官方的 FPC 和 Lazarus 安装分开保留。如果您以后决定它不是为您,那么您可以简单地卸载,所有内容都将被删除。
您只应下载Ultibo核心使用官方下载页面上的链接,我们的目标是为您提供高质量的开发工具,但也有其他人有不同的意图。
当您准备好开始双击您下载的 Ultibo 核心安装程序文件时,并在提示时选择安装的语言。
安装程序将询问你在哪里安装 Ultibo 内核,默认情况下,这将是 C:\Ultibo\Core,但如果适合您,您可以选择其他文件夹。
注意:由于编译器中的限制,您不能选择具有空格的路径,如 C:\Ultibo。
在还有其他几个问题之后,安装程序将继续将所有必要的文件复制到您选择的文件夹并配置安装,当它完成时,您将看到如下所示的对话框。如果一切成功,您可以选择完成并继续创建第一个应用程序。
Lazarus介绍
Lazarus 是 IDE 或集成开发环境,它提供的第一件事是具有语法突出显示、自动缩进和自动完成源代码编辑器。但它也提供了许多更高级的功能,如代码完成、参数预览、单键导航和编译过程中的集成错误突出显示。您可以详细了解 Lazarus,以及通过访问文档或通过内置帮助使编码更快实现编码的许多方法。
通过选择开始菜单中的图标打开 Lazarus IDE。
在屏幕顶部,你会发现 Lazarus 主栏,其中包含所有菜单选项,用于打开、保存和关闭项目和文件,并允许您访问一系列选项,以自定义您在屏幕上看到的内容。主栏还包含一个工具栏,其中包含一些常用项,您可以通过右键单击和选择选项添加其他项。
主栏下方是代码编辑器,这是编辑代码以创建应用程序的位置。源编辑器可以有多个选项卡,每个选项卡都打开不同的文件,因此您可以在程序中的单位之间快速导航。
创建新项目
与介绍,让我们做一些事情!第一步是通过选择项目,新项目启动 New Project...菜单中。
我们定义了一些基本的项目模板,以便轻松创建新项目,除了已选择的选项外,它们之间没有太大的区别。选择适合您可用的树莓派类型的一种。
提示:要查找树莓派项目和树莓派2项目之间的区别,请查看"Project"、"Project Options..."、Config and Target 菜单中。
Hello World 示例
创建新项目可能留给您在 Lazarus 的代码编辑器窗口(称为 project1.lpr)和一些文本。让我们把新项目变成一个工作的应用程序。
请注意,在代码编辑器页面的顶部有一行,说,这告诉编译器,这是一个程序,它应该使一个可执行,当我们编译它。如果行以关键字开头,那么这将是一个单元,我们可以在程序中使用,但它不会自行编译为完整的程序。program Project1 unit
Units 是一种非常有用的方式将项目分解为多个部分,以便相关代码可以分组在一起并在多个位置重用。我们现在需要包括几个Ultibo单位,开始创建hello world 的例子。在编辑器中查找从开头的部分,并将其更改为如下所示:uses
uses
RaspberryPi,
GlobalConfig,
GlobalConst,
GlobalTypes,
Platform,
Threads,
SysUtils,
Classes,
Ultibo,
Console,
Framebuffer
{ Add additional units here };
请注意,我们将控制台和 Framebuffer 单元添加到列表中,这告诉编译器将它们作为项目的一部分,以便我们可以在代码中使用它们的函数。
在使用部分的正下方和关键字添加新部分之前,我们将稍后解释它的作用:begin
var
WindowHandle:TWindowHandle;
我们的代码在 和 关键字之间,因为这是一个 hello world 示例,您可能会认为这只是一行,但我们需要一些额外的处理在 Ultibo 的一些内务。我们应用程序的第一行如下所示:begin
end
WindowHandle:=ConsoleWindowCreate(ConsoleDeviceGetDefault,CONSOLE_POSITION_FULL,True);
这将调用控制台单元中的函数,所需的第一个参数是控制台设备,因此我们还会调用获取第一个可用的控制台设备(应只有一个)并将其传递给函数。下一个参数是我们窗口的位置,所以我们传递常量,最终参数告诉函数,如果可以使这个默认窗口,所以我们传递的值。ConsoleWindowCreateConsoleDeviceGetDefaultCONSOLE_POSITION_FULLTrue
函数的结果存储在我们在上面的节中创建的变量中。变量只是存储值的位置,因此您可以反复使用它。ConsoleWindowCreateWindowHandlevar
现在,我们可以在我们刚刚创建的控制台窗口中打印 hello 世界消息。如下所示:
ConsoleWindowWriteLn(WindowHandle,'Hello Ultibo!');
在这里,我们调用函数并传递变量,以便知道文本的写入位置,当然第二个参数是我们想要显示的文本。ConsoleWindowWriteLnWindowHandle
最后,我们需要告诉 Ultibo 核心停止为我们执行此工作的线程。Ultibo 内核始终是多线程的,因此绝不应让启动程序的线程(主线程)退出程序的部分。我们可以通过这样调用来停止线程:begin..endThreadHalt
ThreadHalt(0);
"Hello Ultibo"程序应该看起来像这样现在:
begin
WindowHandle:=ConsoleWindowCreate(ConsoleDeviceGetDefault,CONSOLE_POSITION_FULL,True);
ConsoleWindowWriteLn(WindowHandle,'Hello Ultibo!');
ThreadHalt(0);
end.
编译项目
我们最好先保存我们的示例,以便以后找到它,选择项目,保存项目...并选择一个文件夹保存到,可能最好在某处创建新文件夹,并记住该文件夹的名称中不应有任何空格。如果您愿意,可以将项目文件的名称更改为 project1.lpr 以外的内容。
要编译我们的示例:
只需选择"运行",在菜单中编译,Lazarus 将传递到 Free Pascal 所需的所有信息,这将创建可执行文件。
如果消息窗口中的顶行(源编辑器下方)变为绿色,则编译成功,应用程序可以进行测试。
制作可引导的 SD 卡
要测试应用程序,您需要 SD 卡,几乎任何大小都会执行,因为应用程序将小于 2MB。SD 卡需要使用 FAT 文件系统进行格式化(大多数是在获取它们时格式化),并且需要将这些文件复制到根目录:
bootcode.bin
start.elf
fixup.dat
kernel.img 或 kernel7.img
前三个是树莓派固件的一部分,您可以在 Ultibo Core安装的固件文件夹中找到(通常为C:\Ultibo\Core\firmware),或者您可以在树莓派固件GitHub 页面下载最新版本,第四个固件将在您将示例项目保存到的文件夹中找到。如果你的项目是树莓A,B,A+,B+,那么文件将是kernel.img,如果你选择了树莓派2B或3B,当你开始该项目,那么文件将是kernel7.img代替。
测试项目
关闭并拔下您的树莓派,如果它已经在做其他事情,删除任何SD卡当前在插槽中,并插入一个你复制的文件到上面。
插上电源,在大约 2 到 3 秒内,您应该会看到显示"Hello Ultibo!" 消息的屏幕。
如果没有,请检查电源是否已连接,SD 卡是否正确插入,请检查监视器是否连接到树莓派上的 HDMI 端口,并且显示器已通电,然后重试。
接下来呢?
Ultibo 核心安装中包括许多示例,可用于探索 Ultibo core 和pascal 编程。这些示例从 hello world 开始,以便您可以跳过该功能并完成各种不同的功能,最后以功能齐全的 Web 服务器作为最后一个示例。
要尝试示例,只需选择"Tools",Example Projects
官网地址:
https://ultibo.org/
Ultibo Core下载:
https://github.com/ultibohub/Core/releases/download/2.0.029/Ultibo-Core-2.0.029-Beetroot.exe