前言                           

随着嵌入式计算机在各种应用领域中大量使用, Window CE 、VxWork 、pPos、UC/OS2、Linux 、Win9x、WinNT等嵌入式操作系统被大量使用。设备制造商在选用这些系统时,面临着版税价格高、寻找开发人才如同大海捞针、现场维护困难、维护成本高、存贮空间大、设备驱动程序开发难度大、不能在关键时刻独占CPU时间等种种因素的困扰;而采用DOS系统呢,又不支持多任务、不支持网卡通讯、开发界面麻烦。怎样才能解决上面的问题呢?

 

现在有一种“WinSail V2.0嵌入式系统”正在业界普遍使用,其推出真正使嵌入式PC进行产品开发时,设计人员不需要在硬件、底层操作、界面、参数设置等花费太多的时间,只要把精力放在功能开发上。只要您懂C++ For DOS或Visual C++,您就能在DOS下编程,生成一个能与Windows竣美的应用系统!

 

WinSail V2.0”是基于DOS系统,用BC++3.1、BC++4.5语言,在Large大模式下开发出来的软件开发包。虽然说完整的软件包大约只有450K左右,却能在DOS下生成的程序具有与Win9x完全相同的界面,拥有Group、Label、Edit、ComboBox、Button、Radio、Check、ListBox、Grid、ScrollBar、Desktop、ToolsBar、StatusBar、Menu、PopuMenu、SlideeCtrl、ProcessCtrl、Window、Dialog、ICON、Bitmap、示波器、键盘控件等界面元素,支持鼠标,控件的操作99.9%与Windows兼容!可加载运行脚本对话框支持Socket套接字编程;具有完整窗口图形界面的最小应用只有150K左右,可在只有1M的电子盘中运行;具有0.5uS微秒精确度的delay函数。在某些场合下,可以说:

DOS + WinSail >= Windows CE

WinSail V2.0目前支持

(1)         WinSail”的API与“C++ For DOS”函数库“共存”,特别是与C语言的图形函数BGI共存。

(2)       支持具有优先级的多任务,同时可达到50个任务。(注:可配置脚本文件来不需要多任务支持,使程序运行于单任务中)

(3)         支持数据库,生成的文件与Foxpro 2.6库兼容,可在微软Office的Excel中直接打开。

(4)         使用16*16的简体、繁体中文字库、8*16的英文字库,支持TrueType字库

(5)       “对话框”能在Visual C++预先做好界面,然后通过转换软件,能使Windows的对话框界面变成“WinSail”系统的对话框的界面代码源文件或脚本文件,充分利用Visual的优越性,使DOS平台的应用程序界面开发“不再难”!!!!!

(6)         支持640*480*16、640*400*256、800*600*256、1024*768*256多种分辩率。

(7)         支持Group、Label、Edit、多行Edit、ComboBox、Button、Radio、Check、ListBox、Grid、ScrollBar、Desktop、ToolsBar、StatusBar、Menu、PopuMenu、SliderCtrl,ProcessCtrl、Window、Dialog、Icon、Bitmap、MessageBox、示波器、多元纵坐标示波器等界面元素。

(8)       支持扩展内存--XMS、扩充内存EMS的内存访问。

(9)         支持文本注册表--INI文件的读写,在写键值时,可保证在键值后面的“注释内容”仍然还存在。

(10)      支持面向对象的I/O访问,屏蔽底层I/O口。

(11)      具有COMM口通讯接口,支持多种校验位,包括“没有校验位”、“奇校验位”、“偶校验位”、“校验位永为1”、“校验位永为0”。后两种校验方式多用在多机通讯中区别“地址”和“数据”。

(12)   支持条形码显示。包括EAN_8、UPC_A、UPC_E、EAN_13(商品码)、ISBN、ISSN、39、128、Codabar、交叉25码

(13)   窗口支持“用I/O口定义的虚拟键盘”、“窗口定时器”、“空闲时调用某函数”、“窗口刷新时调用某函数”等多种回调函数。

(14)   多种常用数学运算,包括“低通”、“高通”、“带通”、“带阻”滤波器系数的产生(可加矩形窗、三角形窗、汉宁窗、海明窗、布莱克窗、Sin(x)/x窗、余弦窗、凯塞窗),滤波、插值、拟合、微积分、相关分析、FFT、DFT等。

(15)      统计进程SPC和直方图、测量的可靠性和重复性GageR&R报表。

(16)      支持“Bitmap”、“ICON”图像文件的显示、“Wav”声音文件的播放。

(17)      支持“普通示波器”和“多纵坐标示波器”。

(18)      支持Socket 套接字编程。

 

提供和使用“WinSail”

一、文件说明

1:目录:Application------------------VC++程序,内核里面有多个对话框是从这里转换来的。

2:目录:C_Boot-----------------------启动盘根目录的Config.Sys和Autoexec.bat文件配置

3:目录:WinToDos---------------------转换程序

4:目录:include2---------------------系统“头文件”和“库文件”

5:目录:Sail3000---------------------演示工程实例

6:目录:详细编程文档2005_05_01-------编程文档

二、include2目录里面的文件说明

    01:Symbol.h-----------  符号定义

    02:Memroy.h------------ XMS和EMS内存,类接口

03:Mouse.h------------  鼠标,API接口

    04:Listing.h----------- 双向链表,类接口

    05:Register.h---------  文本INI文件读写访问,类接口

06:HglgPrit.h---------- 文字、BITMAP图片、ICON图标的显示,WAV声音播放,API接口

    07:SVga_Dev.h---------  800*600*256,1024*768*256分辨率图形驱动,API接口

08:MyFrame.h----------  控件和内核初始化,类和API接口

    09:Wizard.h-----------  “向导”类接口

10:Barcode.h----------- 条形码显示/打印头文件,      类接口

    11:DownComm.h---------- COMM口通讯,                 类接口

    12:Foxpro.h------------ Foxpro2.6数据库,            类接口

    13:GageRR.h------------ 测量的可靠性和重重性报表,   类接口

    14:Graph.h------------- 示波器和多纵坐标示波器,     类接口

    15:Kernel.h------------ 多任务,API接口

    16:NewMath.h----------  数学库,API接口

    17:Relay.h------------  面向对象的I/O访问,API接口

    18:Spc.h--------------  进程统计控制SPC,类接口

19:Socket3.h----------- SOCKET套接字编程接口

20:Socket4.h----------- SOCKET套接字编程接口

21:Socket5.h----------- SOCKET套接字编程接口

22:Bmp256.Pal-----------256色BMP图片调色板

    23:EgavgaF.Obj--------  BC31远调用驱动程序

    24:Sail.Lib-----------  WinSail V2.0编程库

    25:Sail.Prj-----------  WinSail V2.0编程的工程模板(注:强烈建议使用它作为模块)

 

三、Sail3000目录里面的文件说明

    01:Config.Sys----------- 系统驱动配置文件

    02:Display.Fon---------- 8*16英文字库和16*16简体字库

    02:DisplayF.Fon--------- 8*16英文字库和16*16繁体字库

    03:Dwpword.Exe---------- 用户和密码观看文件(高级应用)

    04:Pass.Bin------------- 用户和密码数据库,二进制

    05:Mouse.Com------------ 鼠标驱动程序

06:*.Cpp --------------- 用户工程的源文件示例

    07:*.h   --------------- 用户工程的源文件示例

    08:Sail2000.Prj--------- 用户工程的工程文件示例

    09:Sail2000.Exe--------- 用户工程的主程序

    10:a.bat---------------- 用户工程的批处理文件

    11:Bmp\Computer.Bmp----- 内核使用的一幅图片

    12:Bmp\Desktop.Bmp------ 内核使用的一幅图片

    13:Bmp\Sail2000.BMp------密码框使用的一幅图片

    14:Bmp\Sail200.Ico------ 窗口默认的标题栏图标

    15:Bmp\BookS??.Ico------ 菜单默认的图标

    16:Bmp\MsgBox??.Ico----- 信息框使用的图标

    17:Bmp\Display.Ico------ 内核使用的一幅图标

    18:Bmp\Net.Ico---------- 内核使和的一幅图标

19:Bmp\Bmp256.Pal------- 256色BMP图片调色板

20:Internet\*.* -------- 基于Packet多种网卡驱动

21:Ime\*.Ime ----------- 输入法码表文件

22:BGI\*.BGI ----------- 额外BGI图形驱动(由用户指定的显示模式)

    23:Sys\*.Sys------------ 用户工程的I/O配置文件

 

四、WinToDos目录里面的文件说明

    对于VC工程中的文件,只有“工程.rc”和“Resource.h”文件有价值

    01:MakeDlg.Exe---------- 将VC中的资源对话框转成WinSail的对话框源程序

    02:RegisterDll.Dll------ 支持MakeDlg.Exe访问文本INI注册表的DLL文件

03:UdpDemo.Exe ---------  与WinSail的TCP/IP进行远程控制,包括键盘、鼠标下发、文件互传、屏幕界面上传等等

04:Filter.Exe ----------  滤波器演示程序(Windows版本)

 

五:DOS起动文件配置说明

    假设Win的目录名称是“c:\Windows”,BC31的目录是“C:\Bc31”

 

    C:\Config.Sys请如下配置

     Device=C:\Windows\Himem.Sys/TestMem:Off

     Device=C:\Windows\Emm386.Exe noems novcip

     DOS=High,Umb

     Stacks=9,256

     Files=30

 

    C:\Autoexec.Bat请如下配置

       path C:\Windows;C:\Windows\Command;C:\Bc31\Bin

       Lh   SmartDrv.Exe

 

六:对Main()主函数的要求:

    1:需包含头文件<Symbol.h>和<MyFrame.h>

    2:先调用BOOL InitSystem(int argc, char** argv)内核初始化函数

    3:中间写自己的代码

    4:最后调用BOOL CloseSystem()内核退出函数.

    5:例:

       #include <Symbol.h>

       #include <Myframe.h>

 

       extern unsigned _stklen = 60u * 1024u;

       //作为所有窗口默认的I/O键盘钩子回调函数

       int far TransrateKey(CObject* pCurObj)

       {

           return(0);

       }

 

       int main(int argc, char** argv)

       {

           //系统内核初始化

           if (!InitSystem(argc, argv))

           {

               ::CloseSystem() ;

               ::printf("\nInit System Error!") ;

               return(0);

           }

 

           //用户代码开始

          

           //……

 

           //用户代码结束

 

           //退出系统内核

           ::CloseSystem();

           return(1);

       }

 

七:如何创建Sail2000工程并编码

    01:在C盘中安装Borland C++ 3.1(以下简称BC31),最好目录为C:\Bc31”

    02:用户在自已BC31的目录中,创建"Include2"目录

03:将include2\*.*的所有文件拷贝C:\bc31\include2"目录中。

04:在BC31集成环境中,创建一工程,假设工程名称为Sail2000.Prj(可任意定),最好使用c:\bc31\include2\Sail.prj作为工程模板。既将Sail.Prj拷贝到您所在的工程目录,然后将Sail.Prj更名为您所需要的工程名称,强烈推荐使用“Sail2000.Prj”作为工程名称。

    05:在BC31集成环境中,将include头文件路径设置成"c:\bc31\include2;c:\bc31\include"

    06:在BC31集成环境中,将lib库路径设置成"c:\bc31\lib"

07:在BC31集成环境中,设置"Large"大模式;"Default for memory model"默认内存模式。

    08:在BC31集成环境中,Floating Point设置成"80287/387"Instrution Set设置成”80386”

    对于PCM3386和PCM3486来说Floating Point设置成“Emulation"Instrution Set设置成“80186”

09:在BC31集成环境中,选中“Graphics library”

10:在BC31集成环境中,选中“Standard dos Exe”

11:为了减小程序最终生成的尺寸,不要选中“Debug info OBJs”选项。也不要选上“Source Debugging”选项

12:在工程中加入“C:\BC31\include2\Sail.Lib”内核库文件

对于PCM3386和PCM3486主板用户来说,加入的是“C:\BC31\include2\Pcm3386.Lib” 内核库文件

13:在工程中加入“C;\BC31\include2\Egavgaf.Obj”图形库文件

14:在工程中加入您自己编写的“*.CPP”源程序文件和“*.H”头文件。

15:在main()函数所在的模块中,须指定“堆栈”的尺寸。既填写BC31内部变量extern unsigned _stklen的值。推荐赋予60K。

     extern unsigned _stklen = 60u * 1024u;

16:在工程中,须编写int far TransrateKey(CObject* pCurObj)的默认的窗口虚拟键盘函数,一般如下所示

          int far TransrateKey(CObject* pCurObj)

          {

              return(0);

          }