EDN China > 设计实例 > 嵌入式系统 > 参考设计 > 正文
? 2016博客大赛-不限主题,寻找电子导师,大奖升级??

一种基于Java平台的可编程嵌入式系统设计

杜海兵 王民北?? 2008年10月24日 ?? 收藏0

  尽管第一种方案的效率较高,并且没有引入额外开销,但是修改Java虚拟机内核是相当繁杂的工作,同时也可能会引起潜在的系统不稳定。第二种方案虽然引入了一定的额外开销,但便于移植和实现。因此,我们采用方案二,在Java虚拟机和Java本地接口之外又设计了一个本地通信库。

  本地通信库API形式如下:

?????? int hwWriteXXX(int addr, XXX p);
  int hwWriteArrayXXX(int addr, XXX[] p);
  XXX hwReadXXX(int addr);
  XXX[] hwReadArrayXXX(int addr);
  int hwConfig(int cf_mem_addr, int bitstr_size);
  Java本地接口层接口的形式如下:
  class HWInterface{
  static int ConfigStatus;
  public static native int setParam(CID hw_cid, object P)
  {
  if(type_of_P == XXX)
  err = hwWriteXXX(hw_cid.addr, (XXX)P);
  return err;
  }
  public static native int getResult(CID hw_cid, object R);
  public static native int setCMD(CID hw_cid, int cmd);
  public static native int getStatus(CID hw_cid);
  public synchronized static native int configHW( CID hw_cid);
  }

  在上面代码中,XXX表示基本的Java数据类型如整型(integer)、浮点型(float)、双精度型(double)等。

  Java应用程序通过类HWInterface提供的方法访问本地库。上面的代码中给出了setParam的具体实现。其中,CID是包括硬件方法映射到的缓存地址的一个对象,对应于每个硬件方法的CID都是唯一的,因此,该地址和缓存区大小都是事先已经确定了的。但是,由于系统中只有一个配置控制器,我们无法同时就两个或多个硬件方法向FPGA进行编程,也可以说同一时刻只能有一个硬件方法在使用配置控制器。为此,引入了一个静态变量ConfigStatus来反映配置控制器的当前状态。所以,访问配置控制器的函数configHW()是静态的同步的。

  使用上面给出的接口,则下面这段代码

methodA()
  {
  ? …;
  ? int a = objA.m1(2); //SW method
  ? int b = objB.m2(3); //HW method
  ? int c = a + b;
  …;
  }

就应该写成下面的形式:

methodA()
  {
  ?? …;
  1????? HWInterface.configHW(cid2); // cid2 is the ID of HW method m2
  2????? Object P = new Integer(3);
  3????? HWInterface.SetParam(cid2,P);
  4????? HWInterface.startHW(cid2);
  5????? int a = objA.m1(2);
  6????? Object R = new Integer();
  7????? While(HWInterface.getResult(cid2, R) == 0)
  ????? ; //wait until HW method finished
  8????? HWInterface.getResult(cid2, R);
  9????? int b = ((Integer)R.getValue());
  10???? int c = a +b;
  ?? …;
  }


?? ?? ??


打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮

1.扫描左侧二维码
2.点击右上角的分享按钮
3.选择分享给朋友
?? ??

Java平台? 可编程? 嵌入式系统?

相关文章

我来评论
美国的游客
美国的游客 ??? (您将以游客身份发表,请登录 | 注册)
?
有问题请反馈