这个问题我也挺疑惑的,按道理如果redboot上面的lcd_support运行以后,凭借自己以往的经验,
Microwindows应该能运行才是。但是问题层出不穷。大概的原因是目前在ecos上面用UI的人并不多,
而且ecos里面自带的Microwindows也是比较老的版本,功能较低。
因为笔者曾经对Microwindow有过几日的研究,就把问题解决一下,顺便告诉大家这些bug都是什么。
@@ -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");
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_};