我能在Kotlin中编程微控制器吗?

7

是否有可能使用Kotlin编程语言来编写Arduino或ESP8266微控制器程序? 同样的问题也适用于单板计算机(如Raspberry Pi)。


4
kotlin-native只支持少数架构,不支持基于AVR和Cortex M3的Arduino,而且我认为LLVM甚至都不支持ESP8266,所以它可能永远都不会被支持。即使它们被支持了,在Arduino或ESP8266的内存管理、运行时和内存量非常有限的情况下,运行任何大于Hello World程序都会很困难。另一方面,树莓派与任何其他基于ARM的Linux计算机相同,因此直接运行Kotlin和JVM没有问题。 - Blender
假设您使用单板计算机这个术语意味着它可以运行操作系统,例如Linux或Windows,那么您就有了在板上执行此类操作所需的资源。但是,您需要投入多少工作可能超过学习更自然的裸机编程语言所需的工作量。 - old_timer
这通常适用于许多非C/ASM语言,甚至在某种程度上也适用于C++。一般由系统或基于系统的各种大小库处理的后端比使用轻量级语言(ASM、C、Pascal等)更容易移植。现在,一些解释型语言可以编译(Pascal、Python、JAVA、kotlin等),但是这些语言可能具有内置的系统调用,那么就必须由裸机后端支持和/或不支持并且出现错误。 - old_timer
@Blender 看起来与 LLVM 和 Cortex M3 有关的问题:https://github.com/martinribelotta/cortex-m-llvm - elect
4个回答

4

有一个名为Kotlin/native的新玩家出现,这改变了情况。由于支持LLVM,我认为可以从Kotlin编译到所需设备的本地代码。


2
根据 https://github.com/JetBrains/kotlin-native/issues/1229,Kotlin需要200-300 KB的RAM。我认为这主要是用于其stdlib。相比之下,Arduino使用的ATmega SOC只有2或8 KB的SRAM。 - spaaarky21

2

是的,微控制器仍然是计算机。如果Python可以在Raspberry上使用,那么Kotlin也可以使用。

首先,您需要使用该微控制器工具链编译带有JVM(开源例如OpenJDK)的镜像。 然后在微控制器中运行该镜像。 现在创建一个Kotlin文件,使用该JVM对其进行编译并运行。 这是如果微控制器运行在内核上(例如Linux)。

确保微控制器具有足够的内存。


微控制器的问题在于它们的资源非常有限,能够挤出一个足够完整的JVM是个问题,虽然你会发现一些大型MCU,但其中很大一部分将无法工作。 - old_timer
3
请注意,尽管树莓派的某些型号价格与微控制器评估/引出板相当,但Broadcom芯片绝不是微控制器。该板具有足够的资源,如果您想要尝试移植足够完整的裸机JVM,然后在其之上运行,也是可行的。 - old_timer
一般来说,使用更适合任务的语言要好得多,C/asm是最常用的语言。 - old_timer

1

是的。LLVM 现在已经有了 AVR 后端 (自 8.0 版本开始),所以你可以编译 Kotlin/Native 源代码到 Arduino。你可以查看 此处 AVR 目标的开发情况。


未找到 请求的URL /viewvc/llvm-project/llvm/trunk/lib/Target/AVR/在此服务器上未找到。Apache/2.4.7 (Ubuntu) 服务器位于llvm.org端口443。 - Marian Paździoch
1
@Marian Paździoch 我修复了链接。 - dan1st

1
在这个时刻 - 不,Kotlin使用LLVM编译器。即使微控制器支持LLVM代码,也需要适应“内部组件”(如中断、PWM、DAC、ADC、看门狗和其他东西)的工作,并且对于任何微控制器,这些适应将是独特的。

1
当我说Kotlin时,我的意思是 - Kotlin/Native。 - Андрей Кирьянцев
1
现在,AVR/LLVM团队正在开发Arduino支持,也许将来我们会得到所有兼容Arduino的板子和MC的LLVM支持,然后我们就可以在MC上运行Kotlin。[https://github.com/avr-llvm](Github repos)。 - Андрей Кирьянцев

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接