第六章 PC方软件设计
6.4 编译和下载
除了以上例子还有四个子程序也是按以上方式封装的:
/6-2 显示下行*/
void LCDLine2(char *p,int i1,int i2) /*7 红外传感器*/
int infraredSensor(int x) { para1=x;
_Sensor();
return (unsigned int)((rvalue2 << 8) | rvalue3);
}
/*8 灰度传感器*/
int greySensor(int x) /*9 超声波传感器*/
int ultraSonic(int x)
有了这些封装的函数就可以像常用的 C 语言设计一样来设计机器人的程序了。
类 C 语言编译时要将这些子程序得封装文件包含到编译文件中。
6.4 编译和下载
编译和下载工作是程序设计的最后一项工作。当用户对编译器的编译方法比较熟 悉时,用户可以自己制作编译文件,按照自己的要求进行编译。另外编译工作也可以 把设计好的 C 程序拷贝到包含编译器的嵌入式 C 集成开发环境中自动编译,但是在 使用集成开发环境之前要求用户必须了解集成开发环境的使用,完成编译的初始的设 置。这两种编译方式对于本开发平台所面向的对象都是不适合的。最好的方式是平台 中设计好编译的流程,用户通过一个按键就可以完成编译工作,繁琐的设置工作交给 平台软件去完成。SD-HCS08-Robot 设计平台的编译工作正是基于这种考虑而设计的。
6.4.1 编译过程
在软件平台中完成机器人程序设计以后,保存图形化语言文件时便会自动生成嵌 入式 C 的源代码。点击编译按钮就可以完成所有的编译工作,实际的编译过程包含 了以下几个步骤:
(1) 编辑编译脚本文件:软件平台根据主控芯片设置(FLASH 地址、RAM 地址、
堆栈指针)、源程序文件列表生成编译的脚本文件(.mak 文件),该文件中包含了编译 指令及相关的参数。
(2) C 程序向汇编程序的转化:启动 08C 编译器,根据.mak 文件的编译脚本将所
59
有.c 文件编译成.s 文件及.lst 文件。
(3) 汇编代码向机器码的转化:汇编程序将所有的汇编文件编译成.o 的中间目标 文件,即所有的汇编语句都编译成机器码,此时机器码是分开存放的,没有统一连接 在一起构成可执行的目标代码。
(4) 连接:启动连接器,连接器根据.mak 文件中的连接脚本,把所有的.o 文件统 一连接成一个.s19 文件,该文件可以下载到目标机器上执行,同时还可根据用户需求 生成.lst 文件和.mp 文件。
6.4.2 编译参数
在生成编译脚本文件时要使用到许多的编译参数,以下为在本平台软件设计编译 命令时使用到的编译参数,下面将对这些参数作简要的注解[33]。
(1) –I:包含的头文件和连接文间所在目录。
(2) -g :带 Debug 调试信息 。 (3) -l :输出 lst 文件。
(4) -o :最终连接的主文件名。
(5) –c:包含的子文件所在的位置。
(6) -blit :Flash 的起始地址。
(7) -bvregs :内存区的地址空间。
CC = E:\毕业设计\software\NewStyle3-19\bin\sdcc08
CFLAGS = -IE:\ 毕业设计\software\NewStyle3-19\include\ -e -l ASFLAGS = $(CFLAGS)
LFLAGS = -LE:\ 毕业设计\software\NewStyle3-19\lib\
-blit:0x5000 -bvregs:0xA0.0x107F -dinit_sp:0x107F -fmots19 FILES = sub.o 4.o
4: $(FILES)
$(CC) -o 4 $(LFLAGS) @4.lk sub.o:
sub.o:
$(CC) -c $(CFLAGS) E:\ 毕业设计\software\NewStyle3-19\tempC\sub.c 4.o:
4.o:
$(CC) -c $(CFLAGS) E:\毕业设计\software\NewStyle3-19\tempC\4.c 图 6-6 mak 文件
PDF 文件使用 "pdfFactory Pro" 试用版本创建 www.fineprint.cn
(8) -dinit_sp :栈底地址。
(9) -fmots19 :最终编译成为 motorola 的 s19 文件格式。
(10) -wf-xmem: 编译专用参数,使用间接寻址方式编译。
图 6-6 为一个 C 文件编译前由平台系统生成的.mak 文件,其中包含了一个 sub.c 的子文件和 4.c 的主文件。编译后输出 motorola 的 s19,同时产生 lst 文件和包含错 误信息 err 文件。
6.4.3 编译设置
(1) 堆栈,Flash 空间,内存空间
主控芯片内存空间范围为 4KB 地址为$0080~$107F,前 32 个字节平台系统设计 时保留,所以内存空间设置为$00A0~$107F,同时将堆栈空间的栈底设置为$107F;
Flash 空间 为 60KB , 地 址 空间 为 分 为 两 段 , $1080~$17FF 和 $182C
~$FFFF,前半部分已经用于存放了监控程序,后半部分的前端已经用于存放了驻留 子程序,所以将用户使用的 Flash 空间定义从$5000 开始。
(2) 直接页与间接页设置
由于主控芯片的内存空间较大,因而在设置编译参数时为了能够访问到所有的内 存空间,因而应该将编译参数设置为间接页编译。
6.4.4 机器代码下载
编译完成后就生成了可以写到芯片中的 S19 机器代码文件。目前平台上是使用串 行口下载程序的。下载之前要对编译器编译出的 S19 文件做一番预处理。首先要将 S19 文件中的内容按照地址空间的大小进行排序。然后去处掉在$5000 以前的所有机 器代码,因为在前一节中提到要求把定义的用于访问底层函数的子程序所编译出的代 码在写入时去掉。接着根据最大地址和最小地址计算出待写入数据所占的页数。最后 通过串口控件将机器代码写入到芯片中,实现对机器人的控制。
61