Microwindows 在 MINI2440 QEMU上的移植

来源:互联网 发布:阿里云qq 编辑:程序博客网 时间:2024/06/09 20:55

1、为什么有LCD_Support还需要移植

这个问题我也挺疑惑的,按道理如果redboot上面的lcd_support运行以后,凭借自己以往的经验,

Microwindows应该能运行才是。但是问题层出不穷。大概的原因是目前在ecos上面用UI的人并不多,

而且ecos里面自带的Microwindows也是比较老的版本,功能较低。

 

因为笔者曾经对Microwindow有过几日的研究,就把问题解决一下,顺便告诉大家这些bug都是什么。

 

2、一个老问题,Server和Client不能通过sokect连接

 

@@ -47,6 +47,7 @@

 

 # include <pkgconf/microwindows.h>

 # ifdef CYGPKG_NET

 #  define NONETWORK 0

+#  define MW_NOSIGNALS 1

 # else

 #  error Not yet supported.

 #  define NONETWORK 1

@@ -725,9 +726,11 @@

  selection_owner.typelist = NULL;

 

 #if !NONETWORK

 

+#ifndef MW_NOSIGNALS

  /* ignore pipe signal, sent when clients exit*/

  signal(SIGPIPE, SIG_IGN);

  signal(SIGHUP, SIG_IGN);

+#endif

 

  if (GsOpenSocket() < 0) {

  EPRINTF("Cannot bind to named socket/n");

3、MW_APP TABLE的编译器BUG

 

 CYG_HAL_TABLE_TYPE是ecos特有的一种表操作方式,他可以定义在内存特定的区域。

ecos的最新版本中,加入了牛人把这个表应用到ecos app的补丁,乍一看眼花撩乱的。

不过也不用害怕,一些宏操作就是替换变量名和函数名的方法。

 

为了能在把定义好的struct放到内存中的table段,需要用到HAL层次的CYG_HAL_TABLE_TYPE这个宏。

 

稍微看看就开始疑惑了吧,之前的写法怎么看上去怎么不像是宏应用。

于是参考ecos本身应用CYG_HAL_TABLE_TYP做设备列表的方法改了如下代码,

在ARM系统下就可以应用了。

 

不过还有一个红色和蓝色对调的问题没有去解,好像Microwindows没有预留这样的参数。

另外一个问题就是,本人发布的synthetic平台的ecos microwindows并没有这样bug,和网友讨论过

PC上的API模拟本身就有这样那样的问题。

不过比较庆幸,这个修改没有影响synthetic平台的ecos microwindows运行。


(2014年11月重新用GCC的结构体对齐进行了修改)

 

------- packages/services/gfx/mw/current/include/microwin/ecos_mw_app.h -------

@@ -56,7 +56,7 @@

 

 #define STACKSIZE ( 65536 )

 typedef void fun(CYG_ADDRWORD);

struct _mw_app_entry {

     char         *name;

     fun          *entry;

     int          prio;

@@ -64,11 +64,11 @@

     cyg_handle_t t;

     cyg_thread   t_obj;

     char         stack[STACKSIZE];

-} CYG_HAL_TABLE_TYPE;

+} CYG_HAL_TABLE_TYPE __attribute__ ((packed));

 

 #define _mw_app(_name_,_id_,_pri_,_init_)               /

 externC void _id_##_thread(CYG_ADDRWORD data);          /

struct _mw_app_entry _mw_app_##_pri_##_##_id_           /

    CYG_HAL_TABLE_QUALIFIED_ENTRY(_mw_apps,_pri_) =      /

      { _name_, _id_##_thread, _pri_, _init_}; 

 

 

 

.

原创粉丝点击