ecos 自带的Microwindows中加入mwin的支持

开源GUI-Microwindows简介 作者:EasyWave 时间:2014.06.07 类别:开源GUI系统-Microwindows简介 声明:转载,请保留链接 一:Microwindows简介 Microwindows 是一个著名的开放式源码嵌入式GUI 软件,目的是把图形视窗环境引入到运行Linux 的小型设备和平台上。作为X Window 的替代品,Microwindows可以使用更少的RAM 和文件存储空间(100K-600K)提供与X Window 相似 阅读详情

本文原创,转载请注明出处 (rickleaf)

1. MWIN是什么啊

Microwindows 在发布之初,提供了两种API接口,WinAPI和Nano-X

之前本博客曾经讨论过如何应用ecos自带的Microwindows的Nano-X接口,并且应用了FLNX作为Nano-X下面轻量级的GUI库。

那么ecos下面的Microwindows的WINAPI支持吗?

 

2. MWIN的移植

参考了新版Microwindows的WINAPI对ecos是支持的,不过老板不的Microwindows采用的select函数和unix是共用的。

所以我稍微做了一次改动就可以在ecos上运行起来了。

首先是cdl,加入mwin的代码

cdl_component CYGBLD_MICROWINDOWS_MW {
        display   "Build the Windows-compatible API"
        default_value 0
        requires CYGPKG_KERNEL

        # NANO X
        compile                 /
            mwin/winclip.c /
            mwin/windefw.c /
            mwin/winevent.c /
            mwin/winexpos.c /
            mwin/winfont.c /
            mwin/wingdi.c /
            mwin/winmain.c /
            mwin/winrgn.c /
            mwin/winsbar.c /
            mwin/winuser.c      /
            mwin/bmp/microwin.c /
            mwin/bmp/penguin.c /
            mwin/winlib/draw3d.c /
            mwin/winlib/ptinsid.c /
            mwin/winlib/insetr.c /
            mwin/winlib/fastfill.c /
            mwin/winlib/graph3d.c /
            mwin/winlib/mwuser.c /
            mwin/winlib/button.c /
            mwin/winlib/edit.c /
            mwin/winlib/listbox.c /
            mwin/winlib/progbar.c /
            mwin/winlib/static.c /
            mwin/winlib/combobox.c /
            mwin/winlib/caret.c /
            mwin/winlib/scrlbar.c /
            ecos/ecos_winmain.c
       cdl_option CYGBLD_MICROWINDOWS_MW_DEMO {
            display  "Build complete eCos MicroWindows WAPI application"
            default_value 0
            make -priority 320 {
                <PREFIX>/bin/ecos_mwin.elf : $(PREFIX)/lib/target.ld $(PREFIX)/lib/vectors.o $(PREFIX)/lib/libtarget.a $(PREFIX)/lib/libextras.a $(REPOSITORY)/$(PACKAGE)/src/demos/mwin/mdemo.c
                        @sh -c "mkdir -p $(dir $@)"
                        $(CC) -c $(INCLUDE_PATH) $(CFLAGS) -o $(PREFIX)/lib/mdemo.o $(REPOSITORY)/$(PACKAGE)/src/demos/mwin/mdemo.c
                        $(CC) $(LDFLAGS) -L$(PREFIX)/lib -Ttarget.ld -o $@ $(PREFIX)/lib/mdemo.o
            }
        }
    }

要加入我们自己的ecos_winmain.c

#include <cyg/kernel/kapi.h>

#include <pkgconf/system.h>

extern void invoke_WinMain(int argc, char** argv);

#define STACK_SIZE (16*1024)

struct ecos_winmain_data
{
    cyg_thread thread;
    cyg_handle_t handle;
    char stack[STACK_SIZE] __attribute__ ((aligned(16)));
    int argc;
    char** argv;
};

static void winmain_mainloop(cyg_addrword_t data)
{
    struct ecos_winmain_data* winmain_data=(struct ecos_winmain_data*)data;
    invoke_WinMain(winmain_data->argc, winmain_data->argv);
}

void start_WinMain_thread(int priority, int argc, char** argv)
{
    static struct ecos_winmain_data winmain_data;
    winmain_data.argc=argc;
    winmain_data.argv=argv;

    cyg_thread_create(priority, winmain_mainloop, (cyg_addrword_t) &winmain_data,
              "winmain", (void *)  winmain_data.stack, STACK_SIZE,
              &winmain_data.handle, &winmain_data.thread);

    cyg_thread_resume(winmain_data.handle);
}

void start_WinMain(int argc, char** argv)
{
    invoke_WinMain(argc, argv);
}


#ifndef CYGPKG_LIBC_STARTUP

#include <cyg/infra/diag.h>


void exit(int status)
{
    diag_printf("exit(%d) was called !/n", status);
}

#endif
然后修改mdemo,让他能在ecos上运行

1. MWIN是什么啊

Microwindows 在发布之初,提供了两种API接口,WinAPI和Nano-X

之前本博客曾经讨论过如何应用ecos自带的Microwindows的Nano-X接口,并且应用了FLNX作为Nano-X下面轻量级的GUI库。

那么ecos下面的Microwindows的WINAPI支持吗?

 

2. MWIN的移植

参考了新版Microwindows的WINAPI对ecos是支持的,不过老板不的Microwindows采用的select函数和unix是共用的。

所以我稍微做了一次改动就可以在ecos上运行起来了。

首先是cdl,加入mwin的代码

cdl_component CYGBLD_MICROWINDOWS_MW {
        display   "Build the Windows-compatible API"
        default_value 0
        requires CYGPKG_KERNEL

        # NANO X
        compile                 /
            mwin/winclip.c /
            mwin/windefw.c /
            mwin/winevent.c /
            mwin/winexpos.c /
            mwin/winfont.c /
            mwin/wingdi.c /
            mwin/winmain.c /
            mwin/winrgn.c /
            mwin/winsbar.c /
            mwin/winuser.c      /
            mwin/bmp/microwin.c /
            mwin/bmp/penguin.c /
            mwin/winlib/draw3d.c /
            mwin/winlib/ptinsid.c /
            mwin/winlib/insetr.c /
            mwin/winlib/fastfill.c /
            mwin/winlib/graph3d.c /
            mwin/winlib/mwuser.c /
            mwin/winlib/button.c /
            mwin/winlib/edit.c /
            mwin/winlib/listbox.c /
            mwin/winlib/progbar.c /
            mwin/winlib/static.c /
            mwin/winlib/combobox.c /
            mwin/winlib/caret.c /
            mwin/winlib/scrlbar.c /
            ecos/ecos_winmain.c
       cdl_option CYGBLD_MICROWINDOWS_MW_DEMO {
            display  "Build complete eCos MicroWindows WAPI application"
            default_value 0
            make -priority 320 {
                <PREFIX>/bin/ecos_mwin.elf : $(PREFIX)/lib/target.ld $(PREFIX)/lib/vectors.o $(PREFIX)/lib/libtarget.a $(PREFIX)/lib/libextras.a $(REPOSITORY)/$(PACKAGE)/src/demos/mwin/mdemo.c
                        @sh -c "mkdir -p $(dir $@)"
                        $(CC) -c $(INCLUDE_PATH) $(CFLAGS) -o $(PREFIX)/lib/mdemo.o $(REPOSITORY)/$(PACKAGE)/src/demos/mwin/mdemo.c
                        $(CC) $(LDFLAGS) -L$(PREFIX)/lib -Ttarget.ld -o $@ $(PREFIX)/lib/mdemo.o
            }
        }
    }

要加入我们自己的ecos_winmain.c

#include <cyg/kernel/kapi.h>

#include <pkgconf/system.h>

extern void invoke_WinMain(int argc, char** argv);

#define STACK_SIZE (16*1024)

struct ecos_winmain_data
{
    cyg_thread thread;
    cyg_handle_t handle;
    char stack[STACK_SIZE] __attribute__ ((aligned(16)));
    int argc;
    char** argv;
};

static void winmain_mainloop(cyg_addrword_t data)
{
    struct ecos_winmain_data* winmain_data=(struct ecos_winmain_data*)data;
    invoke_WinMain(winmain_data->argc, winmain_data->argv);
}

void start_WinMain_thread(int priority, int argc, char** argv)
{
    static struct ecos_winmain_data winmain_data;
    winmain_data.argc=argc;
    winmain_data.argv=argv;

    cyg_thread_create(priority, winmain_mainloop, (cyg_addrword_t) &winmain_data,
              "winmain", (void *)  winmain_data.stack, STACK_SIZE,
              &winmain_data.handle, &winmain_data.thread);

    cyg_thread_resume(winmain_data.handle);
}

void start_WinMain(int argc, char** argv)
{
    invoke_WinMain(argc, argv);
}


#ifndef CYGPKG_LIBC_STARTUP

#include <cyg/infra/diag.h>


void exit(int status)
{
    diag_printf("exit(%d) was called !/n", status);
}

#endif
然后修改mdemo,让他能在ecos上运行

----------- packages/services/gfx/mw/current/src/demos/mwin/mdemo.c -----------
@@ -6,9 +6,10 @@
 #define MWINCLUDECOLORS
 #include "windows.h"
 #include "wintern.h"        /* for MwSetDesktopWallpaper*/
-
 #include "device.h"
-
+#if __ECOS
+#include "ecos_winmain.h"
+#endif
 #if DOS_TURBOC
 unsigned _stklen = 4096;
 #endif
@@ -486,3 +487,10 @@
     }
     return 0;
 }
+
+#if __ECOS
+void cyg_user_start(void)
+{
+    start_WinMain_thread(10,0,0);
+}
+#endif

 

本文原创,转载请注明出处 (rickleaf)

3. 重新配置ecos 选择MW的MWIN方式,去掉nano-x的支持,编译mdemo

Microwindows 0.91版本:嵌入式GUI系统详解 Microwindows是一个开源的、微内核的图形用户界面(GUI)系统,它提供了一种轻量级的方式,为嵌入式系统和小型设备提供窗口化操作界面。0.91版本是该系列中的一个里程碑,它在功能和性能上都有显著提升,为开发者提供了更为丰富的工具集和优化选项。 阅读详情

相关推荐

阿里云搭建vps服务器的过程

最近突发奇想想要搭建一个阿里云的的vps服务器,下面是搭建的过程: 首先,登录阿里云网站: 搜索,esc控制台: 点击创建实例: 选择地区: 选择实例规格: 选择镜像: 将存储规格改成100G(40G可能不够用) 点击下一步: 这里面不需要更改,点击下一步 设置连接密码即可 创建成功后点击启动 点击远程连接,然后立即登录,在弹出的框里面输入之前设置的密码即可 登录成功:

zhanchulan的博客 3373

microwindows位图解析

 第1章 microwinodows图形显示框架1.1 microwindows体系结构Microwindows 采用了分层结构设计方法,其层次结构如下图所示。同时, 这里也列出 Microwindows 源代码目录树下的主要目录结构,以便于对照参考。 microwindows --bin --Configsnano-X /win32 API --demos

bisword的专栏 2301

vivado2020.2安装教程:Windows平台完整指南

手把手带你完成vivado2020.2安装教程,覆盖下载、配置到验证全过程,解决常见安装问题,确保在Windows平台顺利部署开发环境,适合初学者快速上手。

weixin_42607969的博客 1345

ecos内存管理

    在嵌入式系统中,为了对内存资源进行很好地控制,避免发生不可预测的后果,一般建议使用静态内存分配。ecos是专门为实时嵌入式系统量身定做的操作系统,它的大多数系统调用在被使用时都要求将预先指定的由系统调用所产生的目标对象的内存地址传递给该系统调用(即对其进行静态内存分配)。如第一讲cyg_thread_create系统调用函数就要求传入句柄指针和线程数据结构体指针及堆栈起址,而这三个指针对应

aaaaatiger--寻路 4151

四大厂商网络设备巡检命令实战指南:华为、华三、锐捷、思科

本文详细介绍了华为、华三、锐捷、思科四大厂商网络设备的巡检命令实战指南,涵盖硬件状态、软件运行和网络功能等核心维度。通过具体命令示例和实用技巧,帮助网络工程师高效完成设备巡检,预防潜在故障,确保网络稳定运行。

weixin_29235923的博客 390

【Unity】网络游戏实战(序章)MMORPG大型多人在线角色扮演 + 中国象棋联网对战

本系列会基于两种常见的网络游戏类型(MMORPG大型多人在线角色扮演和多人棋牌),从零开始实现网络游戏开发中的大多数环节。【杜绝代码炫技】本系列杜绝代码炫技,摈弃那些高深的设计模式,一切业务逻辑的实现代码追求浅显易懂,即便是网络编程菜鸟,也能循序渐进掌握本系列的核心要点。【授之鱼也授之渔】与一些开源库那样只授予源码不同,本系列还会基于各个技术要点展开详解,并结合切实的可直接运行的Demo,授之鱼更授之渔。

神码编程 1962

MicroWindows介绍

   MicroWindows Open Source Project成立的宗旨是针对体积小的装置建立一套先进的视窗环境。在Linux桌面上通过交叉编译可以很容易地制作出MicroWindows的程序。MicroWindows能够在没有任何操作系统或其他图形系统的支持下运行,它能对裸显示设备进行直接操作。因此,MicroWindows就显得十分小巧,便于移植到各种硬件和软件系统上。  然而Mi

冷雨 专栏 1394

Oracle EBS(R12+)通过Multi-Org 多组织架构、Multi-Ledger 多账簿、SLA 子分类账会计、多币种引擎、多会计政策并行五大核心能力,为跨国企业提供一体化、自动化、合规的

Oracle EBS(R12+)提供全球会计核算解决方案,通过Multi-Org多组织架构实现跨国集团数据隔离与共享,支持四层组织结构(业务组→法律实体→经营单位→库存组织)。Multi-Ledger多账簿功能允许一笔业务多准则自动核算,包含主账簿、辅助账簿和报告币种。系统内置多币种处理引擎,覆盖全流程货币业务,支持自动重估、再计量和折算。通过SLA子分类账会计实现多会计政策并行处理,满足不同国家会计准则和税制要求。该方案可同时支持本地法定、集团合并及管理分析需求,实现全球财务数据集中管理,提升合规性和运营

金牌架构师 553

Microwindows安装与配置指南

Microwindows,也称为Nano-X Window System,是一个轻量级的图形窗口系统。它为Linux、Mac OS X、Android、EMSCRIPTEN等多种平台提供了Win32和Nano-X(类似X11)API,用于在窗口中执行剪裁图形绘制。它是一个开源项目,遵循Mozilla Public License协议。该项目主要使用C语言编写。 ## 2. 关键技术和框架 - ...

gitblog_00481的博客 1005

uniapp - Invalid value “iife” for option “output.format” - UMD and IIFE output formats are not suppo

Invalid value “iife” for option “output.format” - UMD and IIFE output formats are not supported for code-splitting builds. uniapp 编译报错,vite vue3 Hbuilder 中编译报错,uniapp 打包 App 报错(vue3)hbuilder提示错误,uniapp运行到手机/模拟器 App 报错(vue3)uniapp项目启动报错,如何解决这个问题,安卓app,苹果app

🏆 前端领域优质创作者 3965

Isaac Sim/Lab & ROS2 入门教程 —— 宇树人形机器人 H1 强化学习策略部署

本文介绍了如何通过ROS2和IsaacSim运行H1人形机器人的强化学习运动策略。主要内容包括:1)设置机器人关节配置和初始位置;2)添加IMU传感器;3)配置ROS2节点以发布观测数据和接收动作指令;4)创建模拟环境并发布ROS时钟;5)最终运行ROS2策略实现对机器人的键盘控制。文中详细说明了关节参数设置、传感器配置、ROS2节点创建等关键步骤,并提供了注意事项和验证方法。完成配置后,用户可通过键盘指令控制机器人在平坦地形上的运动。

2506_90492529的博客 2170

嵌入式系统下的Microwindows实现

前 言 目前,伴随着各种手持、无线及嵌入式设备的迅猛发展,相应的软硬件设计也发生了很大的变化。许多设备都使用了 Intel,MIPS,摩托罗拉的32位微处理器及大屏幕的液晶图形显示器。由于在过去10年中,桌面操作模式取得...

ciyi7513的博客 1283

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

eCos中的线程与同步

1.线程的创建 void cyg_thread_create(...),创建一个线程,处于挂起状态   2.线程的控制 void cyg_thread_yield (),使线程放弃对处理器的控制 void cyg_thread_delay (cyg_tick_count_t    delay),使线程挂起一定的时间 void cyg_thread_suspend (cyg_handle

4765

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

linux轻量级的图形库,基于Microwindows的嵌入式Linux轻量级图形应用库的设计

本文引用地址:http://www.eepw.com.cn/article/201809/388534.htm这里基于Linux2.4.19和Microwindows0.89进行讨论,主要难点:一是将Microwindows层次打乱后如何进行代码的重构,用最少的代码实现最有效的功能,二是提供中文显示和中文输入的支持。2.1 结构重构(1)底层驱动层整个系统的核心是键盘和屏幕数据结构,它们在Linu...

weixin_42522817的博客 443

用Microwindows(Nano-X)编写“hello world”

用Microwindows(Nano-X)编写“hello world” By: 吴垠 Date: 2008-05-09 Homepage:

吴垠的专栏 1万+

Microwindows 介绍

Microwindows 介绍(The Nano-X Window System is an Open Source project aimed at bringing the features of modern graphical windowing environments to smaller devices and platforms. Nano-X allows applicati

ShorminHsu的专栏 1214

Microwindows(Nano-X)移植

Microwindows(Nano-X) Gui移植笔记 (2011-11-07 20:38) 分类: Gui 首先需要下载Microwindows的源文件以及依赖的库. 下载zlib包 http://www.zlib.net/zlib-1.2.3.tar.bz2 下载jpeg包 http://www.fmsoft.cn/uploads/minigui_org_

AMOVLAB(阿木实验室) 2376

Microwindows 及其 触摸屏驱动 在eCos MINI2440 上的实现

1. 修复MINI2440 QEMU的BUG2. 实现触摸屏驱动3. 修正eCos自带Microwindows的ecos_app错误。 同时简单讲述一下ecos的终端和字符设备的使用方法,给刚参与同人一个参考

嵌入式虚拟系统实验室 2047

Linux 下的图形库介绍

在进行Linux下的图形系统编程时,我们常常会遇到以下这些概念: Framebuffer,X11,SDL,DFB,miniGUI,OpenGL,QT,GTK,KDE,GNOME等等。 一、Linux图形领域的基础设施1.1XWindow XWindow从逻辑上分为三层:XServer、XClient和X协议。 最底层的XServer(X服务器)主要处理输...

weixin_34176694的博客 755

eCosBox搭建过程

这里记录了eCosBox的搭建过程,一方面做个记录免得自己忘记,另一方面给需要自己搭建eCos开发环境的同学做个参考。如果对VirtualBox不熟,请下载已经创建好的虚拟机映像,请阅读《eCosBox使用说明(1)——快速入门》 eCos官网:http://ecos.sourceware.org eCos中文技术网:http://www.52ecos.net eCos交流QQ群:144940...

zoomdy's blog 2611

Microwindows及其中文化方法

 [转帖]Microwindows及其中文化方法 嵌入式GUI系统是嵌入式系统中实现友好人机界面的关键技术,应用于嵌入式的GUI系统必须具备体积小、反应快、高可靠性、可移植性好以及可裁减等特点,对于实时系统还需要有时实方面的要求。目前,流行的嵌入式GUI系统有Microwindows、MiniGUI、Qt/Embedded等。基中Microwindows以其开放的源

bisword的专栏 1991

microwindows代码分析 (一)c/s模型的简化

转载时请注明出处和作者联系方式:http://blog.youkuaiyun.com/mimepp 作者联系方式:YU TAO microwindows代码分析 (一)c/s模型的简化 在microwin的运行模式中,nano-x通常的使用方式是c/s模型的,这是类似于x-windows的方式的,好处是某个client端的异常不会影响到server对其他client提供的服务。但是在很多嵌入

mimepp的专栏,这里都是原创 1950

【亲测免费】 Microwindows/Nano-X Window System 使用教程

Microwindows,也称为Nano-X Window System,是一个轻量级的图形窗口系统。它实现了Win32和Nano-X(类似X11)API,用于在Linux、Mac OS X、ELKS、EMSCRIPTEN、Android等多种平台上进行窗口中的图形绘制。它是开源的,并遵循Mozilla Public License。 该项目支持多种图形库和工具,如Nuklear即时模式GUI、...

gitblog_00829的博客 736

eCos读UART数据实例

eCos读UART数据实例

汽车以太网和SOA 3839
上一篇: flnx 在 mini2440 qemu ecos的nano-x上运行起来了
下一篇: RTEMS 在 Linux环境开发的小技巧
知秋一叶
博客等级 码龄19年 196粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值