我正在用java编写一个应用程序,它将有助于使用现成的微控制器、传感器和收音机创建无线传感器网络。每个传感器和无线电很可能需要独特的代码。我计划为每个平台创建框架,然后为每个传感器和无线电提供模块代码,这些代码可以插入到这些框架中。这将产生一个静态信息库,用于动态生成这些传感器的代码。
我不知道存储和组织这些数据的最佳方法是什么。首先,我尝试为每个传感器创建类,封装其独特的属性,但只使用对象进行数据存储似乎很奇怪。我觉得SQL太过分了,因为数据并没有真正改变,而且我也希望将所有内容都保存在版本控制中。我应该直接用平面文件吗?XML?任何关于如何设计这个项目的建议都是非常欢迎的。
发布于 2015-11-01 04:21:12
不是生成源,而是二进制。从概念上讲,就是。
如果设备被插入或拔出,为什么源代码需要更改?只需编译二进制设备驱动程序库,并将它们链接到主应用程序。有一个汇编程序,所以很可能有一个链接器。
如果没有链接器,并且您被迫使用单块源文件,那么至少我们可以使用链接器的概念。
链接源代码
为了获得灵感和细节,我想了解一下操作系统设计,设备驱动程序、IO设备和网络套接字的概念。我会用它来仔细查看将要生成的源,以及如果一个设备被更改的话,到底会发生什么变化,并修复它,以便尽可能少地,理想的情况下,什么都不需要更改。
运行在(想必是嵌入式)系统上的应用程序的代码应该与设备驱动程序分开维护,所以这里需要从抽象开始。需要重构,将设备的细节抽象成抽象的设备类。
因此,这是第一步:重构生成的源,以抽象出设备驱动程序的细节,这样您就有了一个通过符号调用函数的主应用程序。
这样,无论可用设备的数量和种类如何,主应用程序都可以工作。
接下来,我将研究编译器理论,特别是符号解析和静态/动态链接以及存根的概念。由于生成的源是重构的,所以有一个主应用程序和一个设备驱动程序列表,剩下的就是让应用程序可以使用这些设备。
插图
应用程序可以通过将主应用程序的源代码与设备驱动程序的源连接起来来生成要组装的源代码。
它还提供了一个存根:一个小型库,它提供了一个函数来迭代设备并询问它们的类。
您的应用程序变得如此简单,以至于*NIX提示符上的一行程序就可以做到这一点。不需要Java:
cat program stub drivers/foo drivers/bar > generated-source-or-binary在最简单的形式中,program将包含对stub中的iterate_devices标签的调用。
下面是源和/或二进制图像的布局:
// application
main() {
for ( device in list_devices() ) {
switch ( device.class ) {
....
}
}
}
// stub
list_devices() {
for ( device = first; device != null; device += *cur )
yield device;
}
first: // drivers follow
// drivers/foo
dev_foo: .long dev_foo_end - . // size
....
dev_foo_end
// drivers/bar
dev_bar: .long dev_bar_end - .
....
dev_bar_end组织驱动源
这不应该比有文件的目录更复杂。
一种简单的方法是将这些内容包含在特定包中的.jar中。例如,有一个类提供这样的驱动程序源:
package myapp.drivers;
public class DriverSource {
public static InputStream getDriverSource( String identifier ) {
return this.getClass().getClassLoader().getResourceAsStream(
this.getClass().getPackage().getName().replace('.', '/')
+ '/' + identifier + '.source'
);
}
}需要将驱动程序源放在myapp/drivers/{identifier}.source中。在一个标准的eclipse项目中,您可以将文件放在src/myapp/drivers/中。使用Maven,您可以将它们放入src/main/resources/myapp/drivers/中。您还可以将它们放在另一个目录中,只要它们作为资源复制到适当的包目录中。
上面的类还可以作为更复杂的存储的基础:您可以查询远程服务并下载源文件,或者查询SQL数据库。但资源文件将是一个不错的开端。
https://stackoverflow.com/questions/33458279
复制相似问题