- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
关闭。这个问题需要details or clarity .它目前不接受答案。
想改进这个问题?通过 editing this post 添加详细信息并澄清问题.
7年前关闭。
Improve this question
有没有办法将 JAVA 代码转换为汇编语言(机器语言)。这样它就可以在 IC 上烧录(如微 Controller 8051 或其他)。
最佳答案
构建编译器主要是一件汗水的事情。但是 8051 的地址空间非常小,通常 4K 字节的 ROM 和只有 128 字节的 RAM。
这意味着一个实用的编译器必须有许多限制才能使其在任何地方都可以使用,更不用说实用或有吸引力了。
首先,ROM 空间会极大地限制任何 Java 程序的大小; JDK 中的几乎所有内容都不适合。你买不起 List 或 String 甚至 Object 的大部分; toString 很可能是一种买不起的奢侈品。您的数据类型几乎肯定限于 8 位整数; 32 位和 64 位整数可能完全不切实际。 IEEE 浮点是不可能的,因为它需要支持它的代码空间;你可以实现一个更简单的浮点格式,但它会占用大量的 ROM(我已经在许多小型处理器上编写了浮点数)。
你不能有很多对象;没有足够的空间。更糟糕的是,您可能无法动态分配它们,因为访问它们所需的内存空间(基于指针+offet),因此"new"必须被取缔或以非常严格的方式处理。垃圾收集是完全不切实际的。因此,程序使用的对象很可能在程序启动时必须“神奇地”存在。如何指定? (也许 main 包含所有"new"调用,并且它们是静态编译的,但即使这样也可能会占用宝贵的代码空间,更好地花在其他东西上。
一个非常严重的问题是 Java 没有用户级 I/O。程序如何与硬件对话?一个笨拙的答案是制作一个涵盖所有特殊用途寄存器的巨型对象,以便可以将它们作为字段值进行访问。这相当违反Java语言设计,因为字段仅因程序读取或写入而改变,但特殊功能寄存器可因硬件条件而改变。因此,此解决方案会将语言更改为不完全是 Java。
8051 的最佳特性之一是位寻址。 Java 不做位寻址。充其量它处理字节。因此,您要么丢失它(并且您的程序在空间中爆炸),要么添加有趣的运算符来模拟位寻址。再一次,不完全是 Java。
动态错误对象的抛出和捕获可能是不可能的。如果您强制错误对象被静态分配,您可能会完成这项工作。
大多数微 Controller 最终会控制几个 I/O 点,这些点可以说是异步的。您不能为此使用 Java 任务。您可能会诉诸民意调查;这并不比通常在许多简单的微 Controller 程序上编码的方式差多少。 8051可以处理中断;没有标准的方法可以在 Java 程序中进行设置。您可以使用语言来添加中断关键字;回到不那么Java。
可能可以完成构建具有所有这些限制的编译器。剩下的语言将类似于 Java,但不允许编写任何传统的 Java 程序,因此不清楚实际好处是什么。传统的 Java 程序员必须重新学习如何使用这种语言进行编码。
它似乎没有任何积极的好处。
如果您坚持使用编译器,我认为您最好使用 C compiler .其中一些编译器可以处理更多的 ROM 空间。使用他们的技术,您可能会克服我上面讨论的空间限制的一些后果。但是8051和大内存有点不兼容; 8051 的全部意义在于便宜、便宜、便宜[因为它是单芯片形式],并且添加外部存储器可以消除一些便宜。
对于复杂的程序,您可能不得不回退到汇编程序,以使您能够编写足够聪明的代码来硬塞必要的代码和数据。有些机器最好在硬件附近进行编程。
关于java - 有什么方法可以将 JAVA 代码转换成汇编语言(机器语言)。这样它就可以在 IC 上烧录(如微 Controller 8051 或其他),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28477924/
我被难住了。如果我对文件路径进行硬编码,则此脚本在我的 Windows 机器上的 Eclipse 中运行良好。如果我尝试接受参数并在我的边缘节点(一个 linux 机器)上运行它,它不会抛出任何特定的
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 关闭 8 年前。 这个问题似乎不是关于 a specific programming problem,
我们最近将我们的基础架构从 Solaris(Oracle/Sun Java) 迁移到 AIX(IBM Java)。 我们的客户将使用我们共享的算法(AES)和 key 上传加密文件,一旦加密文件放置在
我想编写一个程序(java),它接受一个文件作为输入,对其进行加密(使用aes128)并通过ftp发送该加密文件,接收者接收它并使用 key 进行解密。我是初学者,有什么帮助可以做到这一点吗?非常感谢
我正在尝试将一些为 1c2 机器 (thumb) 编译的 DLL 导入 WinMobile 6.1 C# 智能设备项目。 然而,当我尝试将它们导入我的 C# 项目时,我得到“无法添加对...的引用”,
我正在寻找 FPGA + 机器。 它应该是入门级定价(例如不超过 200 美元)。 编辑:我想制作一个 ASM 图表并将 FPGA 编程为我在图表中指定的行为 最佳答案 你看过Arduino ? 关于
这是我想完成的: Write a program that stimulates a bean machine Your program should prompt the user to enter
我尝试使用以下命令在 Windows 10 上使用 hyperv 创建一台机器: docker-machine create --driver hyperv default 但它给了我: This m
我有个问题 我的问题是我有一个将 mapred.map.tasks 配置为10的作业(抓取工具),这意味着我的工作将一次创建10个映射器。但是我的集群将 mapred.tasktracker.map.
我正在尝试使用命令重新启动 Docker sudo docker restart a7f8ce75f51f 但我收到以下错误 Error response from daemon: Cannot re
在新机器上引导 Eclipse 是一个非常耗时的过程,您最终会问自己是否真的需要每个插件。但这些都很方便,并且有助于养成一致的习惯。 Eclipse 引导问题包括: 解释/记录需要发生的事情 粘贴正确
我们希望建立一个 Docker 开发节点,我们团队中的任何人都可以将东西部署到其中。 我使用 SSH 创建了一个新的 Docker 机器,如下所示: docker-machine create \
如果可能的话,我想使用 java.util.logging 来做到这一点,有什么想法吗?谢谢。 最佳答案 您可以尝试一下SLF4J . Simple Logging Facade for Java (
当 vagrant up 时,我们的 vagrant box 需要大约 1 小时才能提供第一次运行,在配置过程的最后,我想将盒子打包到本地文件夹中的图像,以便下次需要重建时将其用作基础盒子。我正在使用
我正在为我的图像处理项目构建一个 SVM 线性机,在其中提取正样本和负样本的特征并将其保存到目录中。然后,我使用这些功能训练 SVM,但收到一个无法调试的错误。下面是我用于训练分类器的 train-c
问题描述: 我要将MySQL server 5.7.11 (win32) 安装到Windows server 2012 中。服务器中安装了多个网络接口(interface)卡,我将安装多个绑定(bin
我想安排一台 (AWS) Linux 计算机启动、运行程序,然后自行关闭(以将成本保持在最低水平)。我可以放 mycommand; shutdown 在/etc/rc.local 文件中。但如果我需要
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 4 年前。 Improve this ques
如何将此文件的输出发送到另一台 Linux 计算机的主目录。 显然,我想发送此文件的输出: sed '/^\s*#/d;/^$/d' /etc/httpd/conf/httpd.conf 到 nati
我有一个 Linux 机器,我可以使用 SSH 进行 root 访问。 我想使用GDB来调试系统。 这是一个精简的 Debian 软件包;因此,我里面没有任何编译工具。 uname -a 给出: 2.
我是一名优秀的程序员,十分优秀!