一、WD-Forth简介 (1)金湖X51 Forth编译器软件(以下简称金湖X51)是由“我的Forth(以下简称WD-Forth)”和“交叉编译器”两个部分组成,这两个部分已经集成在一个名为“金湖x51_V31.exe”的Windows可执行程序中了。 (2)金湖X51编译器的设计目标是对PC机上的STC单片机的Forth 8051程序进行编译,形成二进制的内存机器码映像,然后再生成HEX格式文件供STC-ISP软件烧录到目标单片机中运行,控制单片机实现各种功能。 (3)Forth语言与其他计算机语言最大的不同是用户可以自己定义新的语法,定义工作流程,甚至可以生成一个新的计算机语言。 例如你对传统Forth的条件分支程序结构语法“… IF … ELSE … THEN”和循环程序结构的语法“… DO … LOOP”不满意,你可以按你的意愿设计新的语法,然后生成一个新的Forth语言软件,在新的软件里,你和你的朋友就可以使用你自己定义的新语法结构来编写你自己的程序了。 (4)笔者喜欢BASIC语言,因为它对不擅长编程的科研人员十分友好,因此就编写了一个BASIC风格的WINDOWS环境下运行的Forth系统,取名为“我的Forth”,其语法结构最大程度的借用了BASIC的。 比如在WD-Forth中,逻辑条件是用算术堆栈顶的整数来表示,数值为“非0”时表示逻辑“真”和数值为“0”时表示逻辑“假” 。这时WD-Forth的基本程序结构语法有下面5种形式: 1)条件分支结构 (条件) if … endif (条件) if …else … endif 2)固定循环结构。 ( 上限 下限 步长 ) for … exitfor … endfor 根据步长决定循环方向,初值至少做一次,上限和下限都能达到,其中执行exitfor指令时就从从该程序点跳出循环。 例:执行程序“0 10-2 for I . endfor”时(其中I为最内层循环指标变量),结果显示为“10 8 6 4 2 0”。 3)后条件循环结构 repeat … exitrepeat … ( 条件* ) until *条件:成立则退出循环 本循环结构至少执行一次,其中执行exitrepeat指令时就从该程序点跳出循环。 例:执行程序“0 repeat DUP . 2 + DUP 10 = until DROP”时,结果显示为“ 0 2 4 6 8 10”。 4)前条件循环结构 while … ( 条件* ) do … exitdo … loop *条件:成立则进入循环,可能一次都不执行,其中执行exitdo指令时就从该程序点跳出循环。 例:执行程序“0 while DUP 10 != do DUP . 2 + loop DROP”时,结果显示为“ 0 2 4 6 8 10”。 5)程序块结构 begin … exit … end 本结构用于模块化结构,用exit代替GOTO语句。执行exit指令就可以让程序从该程序点跳出程序模块。 例子:程序块程序用于多重选择,其中if前面的条件可以是任意类型的逻辑表达式: 10 0 1 for begin I 1 = if … exit endif I 3 = if … exit endif I 5 = if … exit endif I 7 = if … exit endif I 9 = if … exit endif … ( 这一部分是I为偶数时执行的程序 ) end endfor (5)金湖X51交叉编译器的主要设计目标是可定制各种目标机机器指令的交叉编译器平台,为其配上不同的汇编语言编译器,就可以生成不同计算机上运行的目标程序。 比如为金湖X51交叉编译器配上8051汇编语言编译器,就可以生成在8051单片机运行的机器码。 再比如为金湖X51交叉编译器配上8086汇编语言编译器,就可以生成PC机DOS下的可执行程序。
二、加载与编译Forth程序 (6)Forth程序行像英文句子一样,由一个个“Forth字”组成,字与字之间由空格分隔,以回车作为程序行结束符。Forth字(语法作用类似C语言中的函数)也称“Forth命令”,可以从键盘上输入,也可以写在程序文件中作为程序输入。 WD-Forth程序文件是纯文本文件,一般用“.wdf为后缀来区分,可以用任何文本编辑器编辑。 WD-Forth程序文件用金湖X51编译器界面上的“编译”按钮来加载,用文件打开窗口选择要加载的文件即可。 (7)金湖X51随编译器提供了一个求平均值得Forth程序“WD-Forth_Demo_01_求平均值.wdf”,进入金湖X51编译器,选择该范例就可以编译执行改范例程序的结果了: 其中上面文字框中的“平均值 等于 5”是“11 22 33 -44”这4个数按照整数求平均值的结果。
(8)下图是“WD-Forth_Demo_01_求平均值.wdf”范例程序: 这个程序定义了一个求平均值的Forth字“AV”,以后只要按照要求的格式输入N个数,就可以求出这N个数的平均值并显示出来了。 如上图第23行输入“11 22 33 -44 4 AV<回车>”之后,通过第24行程序就显示出“11,22,33,-44 ”这4个数的平均值为“5”来了。 (9)Forth程序以精确无歧义和精简著称,在上面程序中第19行到第21行是求平均值的Forth字的程序,这段程序总共14个单词,是世界上最短的求平均值计算机程序了,没有之一。 三、后记
金湖X51编译器有许多新颖的特点,但与常规编译器最大的不同点是用户可以自己为某款8051开发板定制专用的编译器,把单片机和开发板上的许多设备的驱动程序都内含在编译器里,成为某个或某类产品的“专属编译器”,大大方便用户的程序开发。
|