前言
随着嵌入式计算机在各种应用领域中大量使用, Window CE 、VxWork 、pPos、UC/OS2、Linux 、WinNT等嵌入式操作系统被大量使用。设备制造商在选用这些系统时,面临着版税价格高、寻找开发人才如同大海捞针、现场维护困难、维护成本高、存贮空间大、设备驱动程序开发难度大、不能在关键时刻独占CPU时间等种种因素的困扰;而采用DOS系统呢,又不支持多任务、不支持网卡通讯、开发界面麻烦。怎样才能解决上面的问题呢?
现在有一种“WinSail实时嵌入式系统”正在业界普遍使用,其推出真正使嵌入式PC进行产品开发时,设计人员不需要在硬件、底层操作、界面、参数设置等花费太多的时间,只要把精力放在功能开发上。只要您懂C++ For DOS或Visual C++,您就能在DOS/Linux/Unix下编程,生成一个能与Windows竣美的应用系统!
WinSail是基于DOS系统,用BC++3.1、BC++4.5语言,在Large大模式下开发出来的软件开发包,目前版本号是2.0。虽然说完整的软件包大约只有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左右,可在只有
DOS
+ WinSail >= Windows CE
“WinSail V
(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、640*480*65536、640*400*65536、800*600*65536、1024*768*65536等多种分辩率。
(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访问,支持PLC仿真支持、屏蔽底层I/O口。
(11)
具有COMM口通讯接口,支持多种校验位,包括“没有校验位”、“奇校验位”、“偶校验位”、“校验位永为
(12)
支持条形码显示。包括EAN_8、UPC_A、UPC_E、EAN_13(商品码)、ISBN、ISSN、39、128、Codabar、交叉
(13)
窗口支持“用I/O口定义的虚拟键盘”、“窗口定时器”、“空闲时调用某函数”、“窗口刷新时调用某函数”等多种回调函数。
(14)
支持多种常用数学运算,包括“低通”、“高通”、“带通”、“带阻”滤波器系数的产生(可加矩形窗、三角形窗、汉宁窗、海明窗、布莱克窗、Sin(x)/x窗、余弦窗、凯塞窗),滤波、插值、拟合、微积分、相关分析、FFT、DFT等。
(15)
支持统计进程SPC和直方图、测量的可靠性和重复性GageR&R报表。
(16)
支持“Bitmap”、“ICON”图像文件的显示、“Wav”声音文件的播放。
(17)
支持“普通示波器”和“多纵坐标示波器”。
(18)
支持Socket 套接字编程,支持TCP/IP网络协议。
(19)
支持全拼、五笔、区位等多种中文输入法。用户可导入Win9x输入法到WinSail中!
提供和使用“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:\Bc
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:\Bc
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设置成”
对于PCM3386和PCM3486来说Floating Point设置成“Emulation",Instrution
Set设置成“
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);
}