前言                             

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

 

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

 

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

DOS + WinSail >= Windows CE

WinSail V2.0目前支持

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

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

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

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

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

(6)         支持640*480*16640*400*256800*600*2561024*768*256640*480*65536640*400*65536800*600*655361024*768*65536等多种分辩率

(7)         支持GroupLabelEdit、多行EditComboBoxButtonRadioCheckListBoxGridScrollBarDesktopToolsBarStatusBarMenuPopuMenuSliderCtrl,ProcessCtrlWindowDialogIconBitmapMessageBox、示波器、多元纵坐标示波器、数字键盘、虚拟软件键盘等界面元素。

(8)        支持扩展内存--XMS、扩充内存EMS的内存访问,支持扩展内存仿真技术。

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

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

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

(12)    支持条形码显示。包括EAN_8UPC_AUPC_EEAN_13(商品码)ISBNISSN39128Codabar、交叉25

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

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

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

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

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

(18)      支持Socket 套接字编程,支持TCP/IP网络协议。

(19)      支持全拼、五笔、区位等多种中文输入法。用户可导入Win9x输入法到WinSail中!

 

提供和使用“WinSail

一、文件说明

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

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

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

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

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

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

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

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

    02Memroy.h------------ XMSEMS内存,类接口

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

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

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

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

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

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

04Filter.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

    对于PCM3386PCM3486来说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内核库文件

对于PCM3386PCM3486主板用户来说,加入的是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);

          }