liuweiele 发表于 2011-5-24 16:09:41

基于ARM的 多进程操作系统 -- 建立应用程序开发环境 及 编写第一个应用程序

在前篇中,已经介绍过如何固化操作系统内核到目标平台及运行;
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4758877&bbs_page_no=1&search_mode=4&search_text=liuweiele&bbs_id=9999

一旦操作系统在硬件平台上运行成功,我们便可开始设计和运行用户应用程序;
接下来,将介绍如何建立应用程序开发环境并开发第一个入门级应用程序;

在这之前,用户需安装ADS开发工具,在这里就不在介绍如何安装和使用该工具;如果用户事先安装了ADS,可以略去这一步骤...

本篇需要用到的资源:

软件开发包(SDK):
点击此处下载 ourdev_642490J1P2IE.rar(文件大小:40K) (原文件名:sdk.rar)

应用程序模板(AppTemplet):
点击此处下载 ourdev_642491ZSASGE.rar(文件大小:345K) (原文件名:AppTemplet.rar)

第一个应用程序工程源码(HelloWorld):
点击此处下载 ourdev_642492ACMX3B.rar(文件大小:148K) (原文件名:HelloWorld.rar)

avr-arm 发表于 2011-5-24 16:19:59

nb,自成一家

liuweiele 发表于 2011-5-24 16:21:21

SDK安装:

1.下载后解压sdk.rar;
2.复制sdk\inc目录下所有文件到 ADS "..\Include"    目录下
3.复制sdk\lib目录下所有文件到 ADS "..\Lib\armlib" 目录下
4.完成SDK安装

http://cache.amobbs.com/bbs_upload782111/files_39/ourdev_642494UH8GB3.GIF
(原文件名:001.GIF)

http://cache.amobbs.com/bbs_upload782111/files_39/ourdev_642495LJQPL4.GIF
(原文件名:002.GIF)

liuweiele 发表于 2011-5-24 16:38:53

至此,应用程序开发环境已经建立完成;
接下来将介绍如何编译第一个应用程序:
既然是"第一个应用程序",那还是按照
这条行业内的一条不成文的老规矩:
经典而又乏味的 "HelloWorld" ~~~~

下面是图文介绍说明(为了节省流量和加快网页浏览速度,这里使用了256色 GIF格式;单独打开图片,效果更佳)
http://cache.amobbs.com/bbs_upload782111/files_39/ourdev_642496NW9HUK.GIF
(原文件名:003.GIF)

http://cache.amobbs.com/bbs_upload782111/files_39/ourdev_642497B9U75R.GIF
(原文件名:004.GIF)

http://cache.amobbs.com/bbs_upload782111/files_39/ourdev_642498KFL9E6.GIF
(原文件名:005.GIF)

http://cache.amobbs.com/bbs_upload782111/files_39/ourdev_642499HYQ9TD.GIF
(原文件名:006.GIF)

http://cache.amobbs.com/bbs_upload782111/files_39/ourdev_642500P71Z1U.GIF
(原文件名:007.GIF)

http://cache.amobbs.com/bbs_upload782111/files_39/ourdev_642501THVCTK.GIF
(原文件名:008.GIF)

http://cache.amobbs.com/bbs_upload782111/files_39/ourdev_642502DVW6SQ.GIF
(原文件名:009.GIF)

liuweiele 发表于 2011-5-24 16:45:03

如何在目标平台上运行该应用程序:

http://cache.amobbs.com/bbs_upload782111/files_39/ourdev_642506P6BWZI.JPG
(原文件名:P5242150.JPG)

http://cache.amobbs.com/bbs_upload782111/files_39/ourdev_642507V78NAN.JPG
(原文件名:P5242151.JPG)

http://cache.amobbs.com/bbs_upload782111/files_39/ourdev_642508DGXYFD.JPG
(原文件名:P5242152.JPG)

10000years 发表于 2011-5-24 16:52:43

mark   nb

liangyurongde 发表于 2011-5-24 16:58:26

mark

jianchi08 发表于 2011-5-24 17:05:02

mark

chinaye1 发表于 2011-5-24 17:28:27

曲高和寡

zzm24 发表于 2011-5-24 17:33:33

我盼星星盼月亮,终于盼到了...强烈感激liuweiele!!

liuweiele 发表于 2011-5-24 17:45:25

回复【9楼】zzm24
我盼星星盼月亮,终于盼到了...强烈感激liuweiele!!
-----------------------------------------------------------------------

各位有什么疑问,可以在这里反馈.

liuweiele 发表于 2011-5-24 19:48:20

目前,该系统提供了约600来个API可供用户调用,其中约75%为GUI API;
API原型及功能请参考 "Kernel.h"; "GWIS.h"; "MultiMedia.h";

shanyan 发表于 2011-5-24 20:23:29

神人!!牛B!!收徒弟不??呵呵!

voval 发表于 2011-5-24 21:45:42

很好很强大~

huanben 发表于 2011-5-24 22:51:58

马克下,!!

yeahmen 发表于 2011-5-24 23:09:03

顶啊,

liuweiele 发表于 2011-5-25 09:53:51

有过 win32 编程经验的人,对该系统的API一定不会陌生,非常容易上手.

liuweiele 发表于 2011-5-25 17:50:27

HelloWorld源码注释


HANDLE        hInst;//全局变量,保存进程句柄
/*============================================================================*/
/*============================================================================*/
/*============================================================================*/
//窗口过程
static        LRESULT        WinProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
        HDC hdc;
        RECT rc;

        switch(msg)//消息分支处理
        {
                               
                case        WM_PAINT: //处理窗口客户区绘制消息

                                hdc=BeginPaint(hwnd);   //在WM_PAINT中,使用BeginPaint获得窗口客户区DC
                                GetClientRect(hwnd,&rc);//获得窗口客户矩形
                                rc.x        =0;            
                                rc.y        =0;
                                    
                                     //在指定的矩形位置显示字符串,风格:垂直居中|水平居中|单行
                                DrawText(hdc,"HelloWorld",-1,&rc,DT_VCENTER|DT_CENTER|DT_SINGLELINE);
                               
                                     //绘制结束
                                     EndPaint(hwnd,hdc);
                       
                                break;
                                ////
                               
                default: //其它消息交给系统默认处理
                return        DefWindowProc(hwnd,msg,wParam,lParam);
        }
               
        return        WM_NULL;
}

/*============================================================================*/
/*============================================================================*/

//程序入口
int        WinMain(HANDLE hInstance,void *argv)
{
        HWND hwnd;
        MSG        msg;
        WNDCLASSEX wcex;
        ////
       
        argv        =argv;//进程参数
        hInst                                =hInstance; //设置全局进程句柄
       
        //初始化窗口类
        wcex.cbSize                 = sizeof(WNDCLASSEX);

        wcex.style                        = CS_HREDRAW | CS_VREDRAW; //窗口类风格
        wcex.lpfnWndProc        = (WNDPROC)WinProc;      //窗口过程函数
        wcex.cbClsExtra                = NULL;
        wcex.cbWndExtra                = NULL;
        wcex.hInstance                = hInstance;
        wcex.hIcon                        = NULL;
        wcex.hCursor                = NULL;
        wcex.hbrBackground        = NULL;
        wcex.lpszMenuName        = NULL;
        wcex.lpszClassName        = __Name;
        wcex.hIconSm                = NULL;
       
         //在屏幕10,20处创建240x200像素的主窗口;窗口名指向__Name;该函数返回主窗口句柄
         //备注:这个系统的CreateWindow比Windows多出一些功能,如果窗口风格包含了WS_NATIVECLASS,
                则窗口类可以不用注_册,直接使用本地类;
        hwnd        =CreateWindow(        &wcex,__Name,WS_OVERLAPPEDWINDOW,
                                                        10,20,240,200,
                                                        NULL,NULL,hInst,NULL);
        //显示窗口                                               
        ShowWindow(hwnd,SW_SHOW);
         //更新窗口
        UpdateWindow(hwnd);
       
         //进入主窗口消息循环
        while(GetMessage(&msg,hwnd)) //从主窗口消息队列中获取消息,直到窗口退出(WM_QUIT)
        {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
        }
         //退出进程
        return        TRUE;       
}

/*============================================================================*/

qtds11 发表于 2011-5-25 18:04:14

mark

luosudou 发表于 2011-5-25 22:04:23

ljt8015 发表于 2011-5-27 17:21:28

高!实在是高!

zhangjinxing 发表于 2011-5-27 17:28:59

mark

woody1983cn 发表于 2011-5-27 17:38:44

mark

xinglucao 发表于 2011-6-2 00:16:05

收我这个徒弟吧!我想从你这先学学裸奔,能把一些6410裸奔的程序发给我吗?我邮箱 qijian.ckr@163.com

wuha 发表于 2011-6-2 09:37:02

请问楼主,能不能介绍下这个系统,是否是开源免费的?

Excellence 发表于 2011-6-3 09:17:56

牛。。。。看代码和WINDOW的很相似。
很亲切。

liuweiele 发表于 2011-6-3 09:49:40

回复【25楼】Excellence 精益求精
牛。。。。看代码和window的很相似。
很亲切。
-----------------------------------------------------------------------

这里有另一个应用程序,用到了该操作系统更多的API,包括多线程:
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4765993&bbs_page_no=1&search_mode=4&search_text=liuweiele&bbs_id=9999

liuweiele 发表于 2011-6-4 12:57:03

回复【24楼】wuha 致命武器
请问楼主,能不能介绍下这个系统,是否是开源免费的?
-----------------------------------------------------------------------

系统组成: OS + GUI + FS

OS:
1. 支持 多进程+多线程,进程和线程数量无限制
2. 256个线程优先级,支持相同优先级线程,抢占式调度+FIFO调度
3. 内核同步及通讯: Semaphore,Mutex,Queue
4. 设备管理功能
5. 动态内存管理

GUI:
1. 基于类 Win32 消息机制
2. 高效的GDI,支持硬件加速
3. 支持多窗口,剪切,重叠.
4. 绘图缓冲机制,完全避免"刷屏闪烁"问题.   
5. 提供高效的块传输功能(支持光栅操作),BitBlt,StretchBlt,TransparentBlt,AlphaBlend,RotateBlt
6. 集成(BMP),GIF,JPEG解码
7. 支持控件子类化,超类化,用户自定义控件

FS(FatFS):
1. 支持多个磁盘设备及根目录
2. 支持多个块读写操作

其它特性:
1. 应用程序无需和操作系统一起编译;应用程序可放在SD卡和NandFlash中由系统加载运行.
2. 占用资源: ROM约 400KB, RAM: 512KB以上(具体和LCD分辨率,系统颜色数,系统服务数量有关)

关于是否免费开源:

该系统会有两种版本:免费版 和 非免费版;
免费版:   在网上公布的,没有作特别声明的,都可以免费使用.
非免费版: 可能不会在网上公布,具体还没定论.

内核部分暂时由本人维护,以尽可能保证应用程序的兼容性;目前,该系统可提供约 600 来个 API 供用户使用.
等BSP模板完善之后,将会逐步公布一些不同硬件平台的完整BSP源码,
到时,各位可以利用提供的BSP模板源码,移植到自己需要的平台.

bitter 发表于 2011-6-9 08:37:13

强烈关注。

lang1437 发表于 2011-6-9 08:40:19

又见楼主啊!强人一枚!

liuweiele 发表于 2011-6-20 12:41:49

新版本操作系统内核 + S3C6410 BSP源码即将公布......

liuweiele 发表于 2011-6-22 16:55:45

回复【30楼】liuweiele Liuwei
新版本操作系统内核 + s3c6410 bsp源码即将公布......

-----------------------------------------------------------------------
S3C6410 BSP源码:
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4823445&bbs_id=9999

SNOOKER 发表于 2011-6-23 21:54:30

mark nb

Bicycle 发表于 2011-6-23 22:37:44

学习了

shunda 发表于 2011-6-23 22:47:27

标记下

9509238 发表于 2011-6-23 23:44:33

楼主用友好的ADS1.2作为开发环境,顶上微软的Embedded Visual C++了!用自己设计开发的系统,可以和Widnows CE有得一拼了。
这是难能可贵的,如果用在商业上,这就降低了应用者的门槛。因为windows上搞ARM开发的没几个不会ADS!而且微软的API大伙都熟,这样一来,就什么问题都解决了!
一人之力可以顶人家一大公司,牛人!
如果能找到有慧眼的投资商进行商业操作,都很有前途!

chaquetn 发表于 2011-6-24 00:01:46

标记下。高人。能跟你混就好了!

gavinchou 发表于 2011-6-25 12:50:56

mark!

sczh01 发表于 2011-7-4 09:26:30

discy 发表于 2011-7-4 11:04:32

回复【楼主位】liuweiele Liuwei
-----------------------------------------------------------------------

mark!

liuweiele 发表于 2011-7-4 15:36:45

回复【38楼】sczh01
能否直接在非arm平台移植嘛,比如mips/openrisc/nios-2等呢
-----------------------------------------------------------------------

可以移植到其它CPU体系,不过CPU要有MMU功能才能支持多进程;
后续可能会考虑使用GCC编译器,到时会移植到MIPS.

alexmayer 发表于 2011-7-7 10:41:18

mark!

yulri 发表于 2011-7-26 15:45:39

楼主高人,请问这个系统与Wince有什么区别呢?它和Wince相比有哪些优势和劣势呢?
我是菜鸟,如果你觉得是愚昧的问题请别见笑啊!

liuweiele 发表于 2011-7-26 17:52:34

回复【42楼】yulri
楼主高人,请问这个系统与wince有什么区别呢?它和wince相比有哪些优势和劣势呢?
我是菜鸟,如果你觉得是愚昧的问题请别见笑啊!
-----------------------------------------------------------------------

暂时还没正式与WINCE进行对比测试,所以不好明确表态;

先说缺点:
1. 功能上,这个系统目前比WINCE少,比如网络协议,USB Host,多媒体功能等暂时还没集成,但用户可以自行添加这些功能.
2. 应用程序和BSP移植使用通用的ARM IDE环境(如ADS,MDK,GCC...),对部分人来讲,可能不如MS的 eVC,VSxxxx方便.
3. 新生的操作系统,认可度未知.
...

优点:
1. 资源消耗低于WINCE,目前 完整功能多进程版"内核" + "GUI" + "FS",ROM 约 300KB; RAM: 512KB以上.
2. 进程性能,图形性能高于WINCE.
3. BSP移植比WINCE更简单,方便.
...

johnwjl 发表于 2011-9-7 15:55:17

中国又多了一位牛人!

xuyqhd 发表于 2011-9-7 16:14:24

mark

liuweiele 发表于 2011-9-7 18:05:36

回复【42楼】yulri
-----------------------------------------------------------------------

另外,这个系统同时支持16位色和24位色,更加适合大分辨率的屏幕,相比WINCE 16位色,具有更佳的显示效果.
而系统的色数和应用程序是无关的,同一应用程序,可以在两种不同色数的硬件平台上正常运行.

haigerl 发表于 2011-9-7 18:14:05

mark

hubeilcsun3 发表于 2011-9-7 18:24:25

mark

licheng0620 发表于 2011-9-16 21:58:56

mark

klmt 发表于 2011-9-19 16:05:17

mark

fenjinzhe 发表于 2011-11-21 22:39:48

NIU REN !

lefty7 发表于 2011-11-30 08:46:57

厉害啊楼主

sblpp 发表于 2011-12-13 09:10:54

佩服的五体投地啊!!!
希望大家都能推广起来!!!

gtnr 发表于 2011-12-13 09:18:12

找个项目推广起来,很有前途。

liuweiele 发表于 2011-12-13 10:09:48

回复【54楼】sblpp
佩服的五体投地啊!!!
希望大家都能推广起来!!!
-----------------------------------------------------------------------

回复【55楼】gtnr
找个项目推广起来,很有前途。
-----------------------------------------------------------------------

如果各位有兴趣组织一个应用开源项目,我必将大力支持.
使用该系统的优势在于:入门简单;扩展性强;各用户不必统一硬件来分享第三方应用程序资源...

losting 发表于 2012-1-6 00:25:55

mark
页: [1]
查看完整版本: 基于ARM的 多进程操作系统 -- 建立应用程序开发环境 及 编写第一个应用程序