Zworld培训教材中文.docx
《Zworld培训教材中文.docx》由会员分享,可在线阅读,更多相关《Zworld培训教材中文.docx(92页珍藏版)》请在冰豆网上搜索。
![Zworld培训教材中文.docx](https://file1.bdocx.com/fileroot1/2022-11/16/54f31cd8-1fb6-4b9c-be0d-19ee19e1d4b1/54f31cd8-1fb6-4b9c-be0d-19ee19e1d4b11.gif)
Zworld培训教材中文
Z-world技术培训教材
第一章DynamicC介绍
1.1导言
DynamicC是用于编写嵌入式应用软件的一套集成的开发系统。
它可运行在IBM兼容机上,是专为Z-World控制器和基于Rabbit微处理器的控制器而设计的。
Rabbit2000是高性能的8位微处理器,可以处理大约50,000句C语句或1M字节的C语言应用程序。
1.1.1DynamicC的特点
DynamicC集成了以下开发功能:
•编辑
•编译
•链接
•装载
•调试
事实上,编译、链接和装载是同一项功能。
DynamicC有一个简单易用的内置文字编辑器,可以在源代码级或机器代码级交互式执行或调试程序。
下拉菜单和指令快捷键使得DynamicC的使用更为简单。
DynamicC还支持使用汇编语言编程,编写汇编指令时不需要离开C或开发系统环境,并且C和汇编语言还可以混合应用。
DynamicC环境下的调试可以使用Printf命令、监视表达式、设置断点以及其它高级调试方法。
监视表达式可用于计算C语言中包括目标程序变量和函数的表达式。
其中。
当执行到断点处或系统处在运行程序状态,可以计算出监视表达式的值。
DynamicC在标准C语言的基础上又进行了扩展(比如共享变量、保护变量,costatement和cofunction),来支持实时的嵌入式系统的开发。
中断服务程序可直接由C语言编写。
而且,DynamicC支持协作多任务及抢先多任务处理。
DynamicC带有许多函数库,并且全部为源代码形式。
这些库支持实时编程、芯片级I/O,并提供标准字串和数学函数。
1.1.2速度
DynamicC能够直接对内存进行编译,函数和库则可进行远程编译、链接及下载。
在速度较快的PC机上,当波特率达到115,200bps时,DynamicC可在5秒种之内下载30,000个字节的代码。
1.1.3DynamicC版本的发展
目前DynamicC的版本共有以下三种:
•DynamicC32forZ180
•DynamicCSEforRabbit2000
•DynamicCPremierforRabbit2000
因为Z-world早期的产品使用的是ZILOG公司的产品Z180作为嵌入式产品的微处理器,而相应的开发环境就是DynamicC32,它是专为基于Z180微处理器的单板机设计的。
DynamicSE版本是为基于Rabbit微处理器的单板机设计的。
DynamicC在Z180板和Rabbit板上的操作是不同的。
DynamicCSE是经济开发包的一部分。
有关于硬件和软件的文档,标准C库函数文档,FFT文档和驱动库文档。
这些开发包对于ZWORLD的产品是一个性价比非常高的手段。
DynamicCSE是一个完整的开发平台,但是不包括所有DynamicCPremier的性能。
DynamicCPremier是完全版的基于Rabbit2000的Z-world单板机的开发平台,功能主要有:
·内嵌MicroC/OS-IIRTOS系统
·支持TCP/IP,包括FTP、PPP、HTTP(SSI、CGI、COOKIES、……)、DHCPClient、SMYPmailClient、POP3、TFTP。
·Realtek以太网芯片驱动程序包
·快速傅立叶变换(FFT)函数库
·丰富的函数库、程序实例原代码、Z-world全系列产品文档及手册
·SPI及I2C驱动
·AES(高级加密算法)
·便利的软件网上下载升级。
1.2DynamicC相对标准C的提高和不同之处
DynamicC与运行于PC机或UNIX环境下的标准C有所不同。
其改进是为了帮助用户编写更为可靠的嵌入式控制软件。
如果不对标准C做任何改动的话,是不能够将其应用于嵌入式环境中的。
标准C的许多规则不适于嵌入式系统的开发,例如,标准C只能在已有当前操作系统,并且程序开始时执行记录应为空的情况下才能够运行,而嵌入式系统的存储器可能是电池供电型,并且在经过一个电池周期后保持数据不变。
Z-World已经在一些领域中实现了对C语言的扩展。
1.2.1DynamicC在功能上的提高
DynamicC在许多功能上都有所提高,下面列出其中的一部分:
•函数链,这是一个DynamicC特有的概念,它允许在一个或多个函数中包含特殊的代码块。
当程序执行到指定的函数链时,将执行该串中所有的代码块。
函数链支持软件的初始化、数据恢复以及其它多种请求任务。
•Costatement,可以实现在一个程序中模拟多个并发事件。
•Cofunction,允许在一个程序中模拟协作的过程。
•Slice语句支持单个程序中的抢先过程。
•DynamicC中的中断关键字允许程序员使用标准C来编写中断服务程序。
•DynamicC支持嵌入汇编指令及独立汇编指令。
•DynamicC含有共享和保护关键字,用于实现受保护数据在不同区域的共享或将其存储在电池供电的存储器中。
DynamicC的特征之一就是允许程序员最大限度的使用扩展内存。
它支持微处理器内的1M地址空间,由内存管理单元对这些地址空间进行分段。
一般由DynamicC实现内存管理,但有时也由程序员自己控制。
DynamicC的关键字和指令有助于将代码和数据存放在适当的位置。
关键字root选择了根内存(地址在64K物理地址空间内),关键字xmem选择的是扩展内存,可以是1024K或1M代码空间中的任意位置。
在函数原型中,关键字root和xmem有着重要的用途,可用来生成更多的高效指令。
它们在使用过程中必须保证函数原型与函数定义之间的一致。
指令#memmap支持进一步控制。
详情参见第九章“内存管理”。
1.2.2DynamicC与标准C的不同之处
这里概述了DynamicC与标准C的主要不同之处,详细讨论请参见语言及关键字两章。
•如果在声明中初始化了一个变量(如intx=0),则它将被存储在闪存中,而且在程序中不能使用赋值语句改变它的值。
在使用DynamicC7.x版本运行时,这种声明将引发警告信息,通过使用const关键字:
constintx=0可以消除这个警告。
如果要在RAM中初始化静态变量,则要使用#GLOBALINIT。
•默认值存储类是static的,而非auto。
这就避免了嵌入式系统中许多由于使用动态变量而引发的的错误。
当使用DynamicC7.x版本运行时,默认值存储类可通过编译指令#classauto变为动态。
•DynamicC摒弃了标准C所包括的大量头文件,因为DynamicC有一个系统库,并能在用户程序编译之前,自动为编译器提供函数原型及相似的头文件信息。
这些可以通过指令#use来实现。
这对于自己编写库文件的用户来说十分重要,详情请参见语言篇中的模块部分。
一定要注意#use指令代替了#include指令,DynamicC中已经不支持#include指令了。
•用户在声明函数指针时不能使用变量,只有当使用指针进行间接调用时才可以使用变量,但在调用过程中,编译器不会检查变量列表以确保其准确性。
•DynamicC不支持位域和枚举类型,也不支持对程序中不同部分的单独编译,但能够很容易的引用关键字extern和register。
1.2.3用于Rabbit的DynamicC与用于Z180的DynamicC之间的区别
与Z180或386EX相比,Rabbit使用DynamicC时的一个重要特征在于启动时不要求在对象中包含BIOS核心程序。
这是因为BIOS核心程序已经作为一段C源程序存储在DynamicC中了。
启动时,DynamicC可实现对BIOS核心程序进行编译并把它装载到对象中,这一过程可以通过使用RabbitCPU的引导程序方法和由Rabbit产品开发工具包所提供的特殊编程电缆来完成。
这种方法有着以下诸多优点。
•不需要使用插槽式flash。
由于DynamicC可以与含空白flashEPROM的对象实现通讯,因而BIOS的更新可在无flash-EPROM烧制的情况下进行。
空白flashEPROM可被安装于电路板表面,因而节省了Z-World及其它电路板生产商的生产成本,并且在Web上实现了BIOS更新。
•高级用户可以直接查看和修改BIOS核心程序。
•电路板设计者能够设计出基于RabbitCPU的DynamicC兼容电路板,这一设计可以通过遵循简单的设计原则并运用Z-World提供的BIOS程序框架来完成。
•DynamicC7.x版本的一个重要特征就是它可以通过因特网或当地以太网进行编程和调试。
这需要单独使用Rabbit链接电路板,也可作为Rabbit开发工具包中一个的选项。
1.3特征概述
本节提供了DynamicC运行界面的简单介绍以及在嵌入式编程时非常有用的一些选项。
开发功能
程序载入后将显示在编辑窗口中。
单击任务栏中的Compile或使用Compile菜单可进行程序编译。
编译之后的程序将被译成机器语言并通过串行口下载到对象中。
程序的执行从main函数中的第一条语句开始,运行请按F9键或在Run菜单中选择Run。
如果想按键一次就完成编译和运行,应使用F9键(运行键);如果程序还未编译,运行键可自动对其进行编译。
单步
是通过使用F8键实现的。
使用F7键也可以实现程序的单步执行。
使用F7键时,子程序也将按步执行;而使用F8键时,子程序将快速的一步执行完毕。
设置断点
如果程序已经编译通过,可使用F2键来设置/去除断点。
无论程序遇断点停止或是正在运行当中都可以对其设置断点。
当程序执行到断点处时暂停。
监视表达式
监视表达式是一种C表达式,可在监视窗口中依照指令进行求值。
基本上,表达式可以是C中任意类型的公式,包括运算符、变量以及函数调用,但不包括for或switch之类的多行语句。
在监视窗口中有一个监视表达式列表,如果使用了单步执行,那么在每一步执行过程中都会求取这些表达式的值。
另外,还可以通过使用来对监视表达式进行求值。
如果你的程序中包含runwatch()语句并经常执行它的话,那么即使是在运行过程中也可以使用来求取监视表达式的值。
注意:
在这种情况下,只能包含全局变量的表达式可以进行求值,而且对这个表达式的求值就像对不带局部变量的独立函数求值一样。
Costatement
Costatement是DynamicC的一种扩展,允许用户编写协作多任务程序。
关键词(如abort和waitfor)可用于控制多任务操作。
1.3.1Complier/Edit简介
Coldload.bin
Polit.bin
BIOS
应用程序
1.3.2编译和运行模式
编译模式:
•Compileincludedebugcode
•Compilewithoutdebugcode
运行模式:
•Polling模式/调试模式
•非调试模式
1.4BIOS
1.4.1BIOS的功能
DynamicC把用户的程序编译到开发板时,会首先编译BIOS(基本输入输出系统),它将作为用户程序一个完整的部分存在。
BIOS是一个独立的程序文件,包含连接DynamicC所需要的所有程序。
通常它还包含一个面向用户特定硬件的软件接口。
DynamicC库文件的特定的驱动器需要BIOS程序来实现对硬件相独立的任务。
BIOS支持以下服务:
·系统启动,包括内存配置、等待状态和时钟速度。
·读并对实时时钟编程。
·操作和管理周期性中断