Embedded Systems mit RISC-V und ESP32-C3

 

嵌入式系统 RISC-V 和 ESP32-C3

Image

关于

作者

Patrick Ritschel

译者

Google翻译

译文摘抄

Hallo, Welt!
你好,世界!

»Das Durchschnittliche gibt der Welt ihren Bestand,
»平均数赋予世界存在,

das Außergewöhnliche ihren Wert.«
非凡有其价值。«

OSCAR WILD
奥斯卡·王尔德

Seit Kernighan und Ritchie in ihrem Buch The C Programming Language [36] gleich zu Beginn ein Programm schrieben, das
由于 Kernighan 和 Ritchie 在他们的书《C 编程语言》[36] 中一开始就编写了一个程序,

hello, world
你好世界

auf dem Bildschirm ausgab, verwenden viele Programmierbücher diesen Ansatz. Die Begründung, »der einzige Weg, eine Programmiersprache zu lernen, ist, Programme in ihr zu schreiben«, ist ja durchaus plausibel.
在屏幕上,很多编程书籍都使用这种方法。 “学习编程语言的唯一方法就是用它编写程序”的推理当然是有道理的。

Da dieses Buch unter anderem den Anspruch erhebt, die Programmierung von Embedded Systemen als Fertigkeit zu erlernen, wird dieser beispielgetriebene Ansatz auch hier verfolgt. In diesem Kapitel wird ein erstes C-Programm erstellt, auf eine embedded Plattform mit einem RISC-V-basierten Mikrocontroller aufgespielt und dort gestartet. Der Debugger dient dann zur schrittweisen Programmausführung.
由于本书的目标之一是学习嵌入式系统编程作为一种技能,因此这里也遵循这种示例驱动的方法。在本章中,将创建第一个 C 程序,将其上传到具有基于 RISC-V 的微控制器的嵌入式平台并在那里启动。然后使用调试器逐步执行程序。

PC, Personal Computer: Heimcomputer oder Arbeitsplatzrechner wie Desktop, Notebook oder TabletPC、个人电脑:家用电脑或工作站,例如台式机、笔记本电脑或平板电脑 Auf diese Weise werden die einzelnen Komponenten des Entwicklungsflusses verständlich. Begleitend zu dieser praktischen »Implementierung« werden die Entwicklungsumgebung und das »Embedded System«, nämlich der Rechner, auf dem das Programm ausgeführt wird, erläutert. Dieses Embedded System unterscheidet sich doch stark von einem klassischen PC mit Monitor, Tastatur, Maus und grafischer Benutzeroberfläche.
通过这种方式,开发流程的各个组件变得易于理解。伴随着这个实际的“实现”,还解释了开发环境和“嵌入式系统”,即执行程序的计算机。这种嵌入式系统与带有显示器、键盘、鼠标和图形用户界面的经典 PC 有很大不同。

Embedded System
嵌入式系统

Unter einem embedded system (zu Deutsch: eingebettetes System) versteht man ein Computersystem, bestehend aus Hard- und Software, das in einen technischen Kontext eingebettet ist. In diesem Kontext verrichtet es Arbeiten wie Überwachung, Steuerung, Regelung und die weitere Datenverarbeitung. In modernen Systemen nimmt die Kommunikation eine wachsende Rolle ein, was sich in den technischen Modeschlagworten IoT und IIoT ([Industrial] Internet of Things: Sensoren und andere Geräte, die [im industriellen Umfeld] vernetzt sind) niederschlägt.
嵌入式系统是由嵌入技术环境的硬件和软件组成的计算机系统。在此背景下,它开展监测、控制、调节和进一步数据处理等工作。通信在现代系统中发挥着越来越重要的作用,这反映在技术流行语 IoT 和 IIoT([工业] 物联网:[工业环境中]联网的传感器和其他设备)中。

Embedded Systeme treten in ihren Applikationen oft so weit in den Hintergrund, dass sie für Anwender unsichtbar sind oder nicht mehr als Computer wahrgenommen werden. Beispiele sind moderne Haushaltsmaschinen, Unterhaltungsgeräte wie Uhren etc., aber auch Geräte der Kommunikationsinfrastruktur, Industrie und Fahrzeuge vom Automotive-Bereich bis zur Raumfahrt. Aufgrund dieser Unsichtbarkeit, Durchdringung und Allgegenwärtigkeit von Computersystemen stößt man im Umfeld auf die Begriffe invisible, pervasive und ubiquitous Computing.
嵌入式系统通常会淡入应用程序的背景,以至于用户看不到它们或不再被视为计算机。示例包括现代家用机器、手表等娱乐设备等,还包括通信基础设施、工业和从汽车领域到太空旅行的车辆中的设备。由于计算机系统的这种隐形性、渗透性和普遍性,人们会遇到隐形计算、普遍计算和无处不在计算等术语。

Da solche Systeme oft mobil sind, keinen Anschluss an das Stromnetz haben, auch extremen Umweltbedingungen ausgesetzt sind und technisch in großen Stückzahlen produziert werden, liegt der Fokus auf kleinen, stromsparenden, robusten und günstigen Komponenten. Dadurch nicht vergleichbar mit üppig ausgestatteten PCs sprechen wir von ressourcenbeschränkten Systemen. Diese Beschränkung von Ressourcen wie Arbeitsspeicher, Akkukapazität, Bandbreite und Latenz der Kommunikation, Ein-/Ausgabemöglichkeiten, Antwortzeit und Echtzeitfähigkeit, Kosten etc. wirkt sich direkt auf die gesamte Hard- und Softwareentwicklung aus.
由于此类系统通常是移动的、不与电网连接、暴露在极端环境条件下并且在技术上是大批量生产的,因此重点是小型、节能、坚固且廉价的组件。因为它们无法与装备精良的个人电脑相媲美,所以我们称之为资源有限的系统。这种对内存、电池容量、通信带宽和延迟、输入/输出选项、响应时间和实时能力、成本等资源的限制直接影响整个硬件和软件的开发。

Die Hardware besteht neben Gehäuse und mechanischen Komponenten aus einer Elektronik, die diverse Schnittstellen bereitstellt. Neben LEDs, Displays, Tastern, Joysticks, Segmentanzeigen, Leistungselektronik, Sensoren für Temperatur, Druck, Helligkeit, Beschleunigung und vielem mehr enthält die Hardware als steuernde Komponente einen Mikroprozessor bzw. Mikrocontroller.
除了外壳和机械组件之外,硬件还包括提供各种接口的电子设备。除了 LED、显示器、按钮、操纵杆、分段显示器、电力电子设备、温度、压力、亮度、加速度等传感器外,硬件还包含微处理器或微控制器作为控制组件。

2.1Wahl der Programmiersprache
2.1编程语言的选择

Für die Programmierung von Embedded Systemen werden verschiedene Programmiersprachen angepriesen und in der Praxis auch verwendet. Sowohl von Skriptsprachen als auch von Sprachen mit einer virtuellen Maschine wird in diesem Buch aus mehreren Gründen Abstand genommen:
各种编程语言被宣传并在实践中用于嵌入式系统编程。本书中避免使用脚本语言和虚拟机语言,原因如下:

Ein wesentliches Ziel dieses Buches ist es, ein grundlagenbasiertes Verständnis des Systems zu vermitteln, weshalb auf die gesamte Hardware direkt, also ohne interpretierende Zwischenschicht, zugegriffen wird. Python, Lua, Java, C# usw. fallen dadurch weg.
本书的一个关键目标是提供对系统的基本理解,这就是为什么所有硬件都是直接访问的,即没有解释性中间层。这消除了 Python、Lua、Java、C# 等。

Das wohl stärkste Kriterium bei der Auswahl einer Programmiersprache für Embedded Systeme ist aufgrund der beschränkten Ressourcen die Performanz in Bezug auf Ausführungsgeschwindigkeit und Speichernutzung. Um den Zugang zu sämtlichen Ressourcen zu ermöglichen, spielt die Hardwarenähe ebenso eine große Rolle, was die Sprache C mit ihrem Pointer-Konzept in den Fokus rückt.
由于资源有限,为嵌入式系统选择编程语言时最重要的标准是执行速度和内存使用方面的性能。为了能够访问所有资源,硬件的邻近性也发挥着重要作用,这使得 C 语言以其指针概念成为焦点。

Viele Konstrukte und Paradigmen moderner Sprachen wie Objektorientierung und funktionale Programmierung spielen in den hardwarenahen Schichten eine untergeordnete Rolle. Bei der Bewältigung von Aufgaben mit hoher Komplexität, wie sie in höheren Schichten üblich sind, sind sie aber hilfreich, weshalb Sprachen mit derartigen Konzepten hier breiten Einsatz finden. Die Sprache C++ kann deshalb als durchgängige Sprache eingesetzt werden, wird aber gerade wegen der Fülle an Funktionalität und damit einhergehender Komplexität und Beherrschungsschwierigkeiten oft gemieden.
现代语言的许多构造和范例,例如面向对象和函数式编程,在硬件相关层中扮演着从属角色。然而,它们在处理高度复杂的任务时很有帮助,例如那些在更高级别中常见的任务,这就是为什么具有此类概念的语言在这里被广泛使用的原因。因此,C++ 语言可以用作一致的语言,但正是由于其丰富的功能以及相关的复杂性和掌握它的困难,人们经常避免使用 C++ 语言。

Meist fällt die Wahl als Sprache der »unteren Schichten« auf die Programmiersprache C, was sich auch dadurch ausdrückt, dass die Mikrocontrollerhersteller vorrangig C-Code in ihren Entwicklungskits, Application Notes und Treiberbibliotheken bereitstellen.
通常选择 C 编程语言作为“下层”的语言,这也反映在微控制器制造商主要在其开发套件、应用笔记和驱动程序库中提供 C 代码。

Der TIOBE Index beurteilt monatlich die Popularität von Programmiersprachen.TIOBE 指数每月评估编程语言的受欢迎程度。 Aus diesen Gründen wurde auch für die Praxisbeispiele in diesem Buch die Programmiersprache C gewählt. Die Einfachheit und Klarheit der Sprache dürfen ebenfalls nicht unterschätzt werden. Die Programmiersprache C gehört laut TIOBE Index [60] zu den populärsten Programmiersprachen überhaupt. Zuletzt war C 2019 »Programming Language of the Year«.
出于这些原因,本书选择 C 编程语言作为实际示例。语言的简单性和清晰度也不应被低估。根据 TIOBE 指数 [60],C 编程语言是最流行的编程语言之一。最近,C 荣获 2019 年“年度编程语言”。

C wurde mit dem Ziel entwickelt, eine Hochsprachenabstraktion zur Assemblersprache zu bieten. Als Resultat ist C-Code verhältnismäßig leicht in Assembler zu übersetzen, was den Aufwand der Compiler-Portierung auf eine neue Prozessorplattform gering hält. Der freie GNU C Compiler (gcc) ist auf allen gängigen Plattformen und Betriebssystemen verfügbar, und C-Programme sind damit leicht auf diese portierbar. Die Performanz des übersetzten C-Codes ergibt sich auch daraus, dass Mikroprozessorarchitekturen wie RISC-V, ARM, MIPS und weitere gemeinsam mit einem (und damit für einen) C-Compiler entwickelt werden.
C 的开发目的是为汇编语言提供高级语言抽象。因此,C 代码相对容易翻译成汇编程序,从而减少了将编译器移植到新处理器平台所需的工作量。免费的 GNU C 编译器 (gcc) 可在所有常见平台和操作系统上使用,使 C 程序可以轻松移植到这些平台和操作系统上。翻译后的 C 代码的性能还源于这样一个事实:RISC-V、ARM、MIPS 等微处理器架构是与 C 编译器一起开发的(因此也是针对 C 编译器开发的)。

Eine interessante, weil auf Performanz und Sicherheit hin entwickelte Sprache stellt Go dar. Aufgrund der derzeit geringen Verbreitung wird diese objektorientierte Sprache in diesem Buch aber nicht eingesetzt. Eine weitere Sprache mit diesem Fokus ist Rust, auf dessen Grundlage Google das embedded Betriebssystem KataOS entwickelt.
Go是一门有趣的语言,因为它是为了性能和安全性而开发的,但是由于目前它的发行量较低,本书中没有使用这种面向对象的语言。另一种关注这一点的语言是 Rust,Google 在此基础上开发了嵌入式操作系统 KataOS。

Eine weitere hardwarenahe Programmiersprache, die aber zunehmend durch Hochsprachen ersetzt wird, ist Assembler. Moderne optimierende Compiler generieren Code, der an Effizienz oft handgeschriebenes Assembly übertrifft, und das bei schnellerem Entwicklungstempo und stärkerer Sicherheit der Hochsprachen. Im Rahmen dieses Buches wird RISC-V Assembler gestreift, um die RISC-V ISA (Instruction Set Architecture) zu verstehen. Ebenso wird das Disassembly beim Debuggen verwendet, um schwer zu findende Fehler zu lokalisieren.
另一种与硬件相关的编程语言是汇编语言,它越来越多地被高级语言所取代。现代优化编译器生成的代码在效率上往往超过手写汇编,具有更快的开发速度和更强的高级语言安全性。本书涵盖了 RISC-V 汇编器,以便了解 RISC-V ISA(指令集架构)。同样,反汇编用于调试以定位难以发现的错误。

2.2Benötigte Komponenten für die Applikationsentwicklung
2.2应用开发所需的组件

Damit eine Applikation entwickelt werden kann, werden verschiedene Komponenten benötigt, wie sie auch in Abb. 2–1 ersichtlich sind. Nach der folgenden Übersicht wird in diesem Abschnitt detailliert auf die einzelnen Teile eingegangen.
为了开发应用程序,需要各种组件,如图 2-1 所示。在完成以下概述之后,本节将详细讨论各个部分。

下载