有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (3) 个答案

  1. # 1 楼答案

    Java通常被编译成“字节码”;字节码通常由Java虚拟机执行。在控制器上运行它们的一种方法是编写一个在控制器上运行的Java虚拟机;这是否可行取决于控制器的体系结构。它是否实用取决于这一点以及其他因素

    假设目标处理器的体系结构支持字节码中包含的操作,那么直接将Java代码编译成汇编语言当然是可能的。一个是否已经存在是另一个问题

  2. # 2 楼答案

    构建编译器主要是一件费力的事情。但8051的地址空间非常小,通常是4K字节的ROM,只有128字节的RAM。 这意味着一个实用的编译器必须有许多限制,才能使它在任何地方都接近可行,更不用说实用或吸引人了

    首先,ROM空间将大大限制任何Java程序的大小;几乎所有的JDK都不适合。你负担不起拥有大多数列表、字符串甚至对象;toString很可能是一种负担不起的奢侈品。您的数据类型几乎肯定限制为8位整数;32位和64位整数可能完全不切实际。IEEE浮点是不可能的,因为它需要代码空间来支持它;您可以实现一个更简单的浮点格式,但它需要占用大量的ROM(我已经在许多小型处理器上编写了浮点)。 你不能有很多东西;没有足够的空间。更糟糕的是,您可能负担不起动态分配它们,因为访问它们所需的内存空间(基于指针+offet),所以“新”必须被取缔或以一种非常严格的方式处理。垃圾收集是完全不切实际的。因此,当程序启动时,程序使用的对象很可能“神奇地”存在。如何具体说明?(可能main包含所有“new”调用,并且它们是静态编译的,但即使这样,也可能会占用宝贵的代码空间,最好花在其他东西上

    一个非常严重的问题是Java没有用户级I/O。程序如何与硬件通信?一个拙劣的答案是制作一个覆盖所有特殊用途寄存器的巨型对象,这样它们就可以作为字段值访问。这违反了Java语言的设计,因为字段只会因为程序读写而改变,但是特殊函数寄存器会因为硬件条件而改变。因此,这个解决方案将改变语言,使其不完全是Java

    8051最好的特性之一是位寻址。Java不做位寻址;充其量只能处理字节。所以你要么失去它(你的程序在空间中爆炸),要么你添加有趣的操作符来模拟位寻址。同样,不完全是Java

    使用动态错误对象抛出并捕获可能是不可能的。如果强制以静态方式分配错误对象,则可能会实现这一点

    大多数微控制器最终控制多个I/O点,这些I/O点可以说是异步的。您不能为此使用Java任务。你可以求助于投票;这并不比通常在许多简单的微控制器程序上进行编码差多少。8051可以处理中断;在Java程序中没有标准的设置方法。您可以使用kluge语言添加中断关键字;回到不那么好的java

    使用所有这些限制构建编译器可能是可行的。剩下的语言类似于Java,但不允许编写任何传统的Java程序,因此不清楚实际的好处是什么。传统的Java程序员必须重新学习如何使用这种语言进行编码

    它似乎没有任何积极的好处

    如果你坚持使用编译器,我认为最好使用C compiler。有些编译器可以处理更多的ROM空间。使用他们的技术,您可能会克服我上面讨论的空间限制的一些后果。但是8051和大内存是不兼容的;8051的全部意义在于便宜、便宜、便宜(因为它是单芯片形式),而增加外部存储器会降低一些成本

    对于复杂的程序,您可能不得不求助于汇编程序,以使您能够编写足够聪明的代码来保存必要的代码和数据。有些机器最好在硬件附近编程