许多嵌入式环境都需要使用一个运行在主机上的交叉编译器然后转移到目标系统执行程序。在本文章中,主机指的是应用程序编译和连接的环境,目标机指的是程序被执行的环境。
下面的步骤都需要在主机上完成,会生成一组能够直接在目标机上执行的库文件。
1. 编辑 glbtypes.h,把SISCO数据文件与目标机本地C数据类型对应。这个文件包含了很多例子环境的类型定义。
2. 编辑 sysincs.h 文件,选择合适的开发环境的头文件
3. 预览系统特殊代码,例如数据对齐,浮点格式,高分辨率定时器。
4. 预览和跟踪堆栈组件,看后续以获得更详细的信息
5. 修改MMS-EASE精简版生成文件以确定是能够允许在主机上执行的文件。
6. 编译MMS-EASE 精简版,使其能够在目标机上创建程序
7. 编辑align.cfg 以能够确认满足目标环境的要求。QNX和win32位级的例子在\mmslite\mvl\util\foundry下。如果目标系统需求不确定,编译和执行可执行文件findalgn.exe在目标环境下。
全球变量初始化
MMS-EASE 精简版有许多全球版本,有些是在编译时初始化并可能在执行期间改变。在某些初始化的全局变量放置在代码段的环境下,可能会导致拒绝校验和验证的问题。于是,我们定义,NO_GLB_VAR_INIT,可以用在代码段里避免全局变量被初始化的问题。囚这个功能被应用,用户应用必须使用mvl_init_glb_vars在任何MVL和MMS-EASE精简版的活动之前。
Mvl_init_glb_vars
用法:此功能用于初始化所有不能被编译器初始化的全局变量
函数属性: ST_VOID Mvl_init_glb_vars(ST_VOID)
参数: NONE
返回值:ST_VOID
开发系统准备
在MMS-EASE精简版创建之前,需要考虑以下条目
条件编译定义
MMS-EASE 精简版是一个灵活的代码库能够创建丰富的通信模块。都是通过很多指定的特殊指令来完成。能够完成此功能的定义都在下面。特别指出,这个列表不包括用来建立特殊功能的功能。
初级一般定义 |
功能描述 |
MMS_LITE |
这个定义是为了编译MMS-EASE精简版代码 这个定义通常用在标准产品生成文件 |
DEBUG_SISCO |
这个定义用在大部分SISCO软件编译组件的两个目的是: 1. 编译的日志报表。这显著的增加了静态字符串空间的大小,并且仅会微弱的减慢速度。SISCO建议使用此定义。 2. 实现在一定程度上的编译错误级别检查。是用DEBUG_SISCO定义的第二影响 3. 内存分配调试调用编译。用于跟踪所有分配的文件/行数 这个命令用在标准输出文件中以创作调试文件夹 |
NO_GLB_VAR_INIT |
这个命令使用在当目标环境不支持便是时间数据初始化的情况,在MMS-EASE出现了很多情况。这并不是定义在标准生成文件中。 |
S_MT_SUPPORT |
这个定义是为了在多种MMS-EASE 库中支持多线程。并不定义在除windows之外的标准输出文件中。 |
SD_BYTE_ORDER |
这必须定义在glbtypes.h中,为每个平台来表示存储数据的字节顺序(大端或小端)。大端必须使用SD_BIG_ENDIAN。小端必须使用SD_LITTLE_ENDIAN |
UNICODE_LOCAL_FORMAT |
此定义选择本地格式存储UNICODE字符串。在MMS标准规范中,UNICODE字符串必须被编码成UTF8格式。这也是大多数UNIX操作系统中存储的格式。当然,一些系统中比如(windows)使用UTF16存储UNICODE字符串。ASN.1编码把unicode字符串从本地字符转化成UTF8。ASN.1解码把UTF8转化成本地格式。这个转化是被这个定义所控制。一定要被定义成UNICODE_UTF8和UNICODE_UTF16。目前被定义成UNICODE_UTF8除了windwos系统环境下。 |
高级框架初级定义 |
|
MVL_UCA |
这部分定义允许在高级框架中使用UCA.用于编译MVLU |