ASCET代码生成简易说明
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ASCET 代码生成配置
ETAS/陈炯
对于所有特定芯片的项目都需要对相应的target 文件夹中的 *.ini , *.mk and *.xml 等文件进行配置,以满足代码生成的需要.
ASCET 从模型生成代码, 在利用外部工具对代码进行编译链接生成可执行文件。
参看下图。
所有特定芯片的代码生成过程是由以下三种类型的配置文件控制的:
1. codegen [_*].ini 文件控制核心的代码生成器。
2. target.ini 给用于OS 配置的项目编辑器提供特定的芯片信息。
3. memorySections.xml 定义了用于ASCET 实施编辑器中的内存类的名称,并将名称与特定芯片的编译指令映射起来。
ASCET 对代码进行编译是通过一系列的GNU makefile (后缀是 .mk )的文件进行控制的. ASCET 对代码的编译是在对项目编译的过程中进行的。
本文档所有内容摘自 v6.1 SE 手册,具体相关信息请查看手册。
C:\ETAS\
ETASManuals\ASCET V
C:\ETAS\ETASManuals\ASCET V6.1\ASCET-SE Manual.pdf
1 codegen[_*].ini 文件 ASCET 使用3个文件来控制代码生成器:
• .\target\trg_<targetname>\codegen.ini
• .\target\trg_<targetname>\codegen_<target>.ini
• .\target\trg_<targetname>\codegen_ecco.ini
这几个文件一起控制以下的属性:
• 代码风格,例如变量名称
• 代码生成,例如变量初始化,使用 #pragma 语句等
• 整合操作系统,例如消息的选择,创建钩子函数,OIL 描述文件的产生
用户可以定义在代码生成过程中使用的这些 *.ini 文件,但一般不用修改这些文件。
2 target.ini 文件
每个ASCET-SE target都有一个target描述文件叫做target.ini. 这个文件的内容用来配置OS的编辑器(参看ASCET在线帮助)。
另外这个文件还包含一些ASCET-SE的内部配置信息,这些不能由用户来修改。
3 memorySections.xml 文件
ASCET模型允许数据和代码放在指定的存储空间。
存储类被抽象的定义出来并赋予一个独特的名称,例如划分片段可能是IROM (Internal ROM),EXT_RAM (EXTernal RAM), FLASH (FLASH memory)。
此外ASCET代码生成器会根据前后设置自动创建存储类名称,比如对于引用或虚拟参数。
在代码生成过程中,存储类的名称要转化为实际的名称,特定编译器的编译指令以及类型限定词。
存储类名称和与其对应的转化都定义在基于XML的存储片段定义文件中,该文件是memorySections.xml。
对于这个文件的具体说明可以参看v6.1中target文件夹中新增的说明文档。
C:\ETAS\ASCET6.1\target\trg_*
\ReadMe_memorySections.html C:\ETAS\ASCET6.1\
target\trg_m68HCS12
对于每一个target都有一个配置文件的范例,在target的路径中可以找到。
如果需要不同的片段名称和设置,就需要修改这个文件。
通过下面的步骤对存储类进行定义,并指定给ASCET中的变量:
第一步
在ASCET的implimentation编辑界面中(在"Memory Location"选项框中选择)将变量指定到要求的存储类。
可用的类的名称定义在特定芯片配置文件memorySections.xml中。
如果要显示不同名称,或者添加新的存储类,就需要对类进行编辑,修改memory-Sections.xml中<MemClassCategories>的声明。
每一个自定义的存储类的类别都要有一个相应的<MemClass> 定义。
第二步
在编译之后,中目标文件中的存储片段必须放置在处理芯片的存储空间中。
连接控制文件定义了存储片段和地址范围的映射关系。
连接控制文件的范例可以在\target\trg_<targetname>\example\路径中找到。
这个范例文件可以被修改已满足不同项目的需要,用户也可以直接使用自行编写的文件。
4从模型到可执行文件
这部分关于在执行Build →Compile|Build All|Rebuild All 这些选项后,ASCET模型转化成可执行程序的处理过程。
整个过程参看下图。
1. Expander扩展器
扩展器将ASCET数据模型写入cgen路径中。
每个在ASCET中定义的模块扩展成3个文件:扩展名为*.db的数据文件,扩展名为*.h.pl的头文件,扩展名为*.c.pl的C文件。
2. ECCO代码生成优化器
在cgen路径下的数据模型传给ECCO。
ECCO分析数据模型,针对特定芯片做一定调整,对代码进行优化。
ECCO最后输出对应特定芯片的C源文件和头文件。
代码生成过程是由generate.mk和makefile文件控制的。
后者是由ASCET为每一步代码生成自动产生的。
OSEK OIL文件(temp.oil)被产生出来,RTA-OSEK被启动基于OS基本配置(confVx.y.oil)生成OS 数据结构。
3. Compile编译器
C源文件和头文件由ECCO和RTA-OSEK产生,由特定芯片的编译器进行编译。
编译过程由ASCET通过一些编译控制文件来进行控制。
ASCET编译控制文件扩展名是 .mk ,例如project_settings.mk 和target_settings.mk。
名为makefile的文件本身是由ASCET产生的,包含了用户通过编辑界面输入的路径,以及用于compile.mk文件的包含命令。
根据"Smart-Compile"优化,很多不同的文件产生,并用于编译阶段。
相应的,产生一组目标文件。
4. Build编译
编译后的文件连接成可执行的程序。
这个过程由build.mk和特定的makefile,以及project_settings.mk
和target_settings.mk来控制的。
最后用户得到可运行的程序文件。
4.1 项目设置– 编译控制文件project_settings.mk
这个编译控制文件定义了关于项目的配置,可以在target的路径中找到该文件(例
如, .\target\trg_<target>\project_settings.mk).
project_settings.mk 文件可以由用户修改,从而适应项目的要求,它由编译控制文件compile.mk 和build.mk所包含。
产品发布的project_settings.mk 中是将example mode 打开的,也就是EXAMPLE_MODE 变量设置成TRUE。
这样的话在example文件夹中的范例文件将参与编译过程。
如果要使用自定义的配置文件,可以对这些文件进行修改,或是将EXAMPLE_MODE设置成FALSE,再对project_settings.mk文件中的其它设置进行相应的修改。
参数STOPWATCH_TICK_DURATION 告诉ASCET 一个振荡周期以纳秒为单位的长度,从而作为dT的参考时间长度。
设置的值要与芯片硬件设置相匹配,从而使ASCET中dT的时间长度准确。
4.2 芯片和编译器设置– 编译控制文件target_settings.mk and settings_<compiler>.mk
编译控制文件target_settings.mk 由另外两个控制编译和连接的编译控制文件(compile.mk 和
build.mk)所包含,它又包含另一文件settings_<compiler>.mk。
settings_<compiler>.mk 文件定义了文件的扩展名,以及预编译,编译,连接和其他程序的一些调用规范,还有程序调用路径,包含的文件和库等。
另外调用编译连接的命令行参数也在这里定义。
除了在项目属性中预先设定的编译器,可以改变COMPILER SETTINGS中的设定值来添加另一个编译工具。
如果这样做,就要确定所有与编译器相关的内容都做修改。
4.3 代码生成– 编译控制文件generate.mk
这个编译控制文件不能由用户修改。
它是控制ECCO代码产生过程。
所有项目和特定芯片的文件在这步传递给ECCO。
例如编译变量FILES_HEADER_PROJ 在这里定义,这个变量包含项目中所有生成的头文件。
4.4 Compile编译– 编译控制文件compile.mk
这个编译控制文件控制解释过程。
通过使用适当的选项,在这步将所有项目对应的文件进行编译整合。
所有的目标文件也就写作cgen路径下。
此外,所有编译错误被评估,必要的话会传到ASCET。
如果编译过程中出现错误,生成过程会终止,并弹出错误窗口。
4.5 Build编译– 编译控制文件build.mk
build.mk控制连接的过程。
编译后的目标文件和需要的库集成在可执行文件中,并写在cgen路径下。
Build编译过程可以通过编辑project_settings.mk进行自定义。
对build.mk文件的编辑不是必须的。
5操作系统集成
这部分介绍了ASCET-SE如何集成操作系统,从而为ASCET中的process提供实时的调度。
在对RTA-OSEK 或Generic OSEK进行代码生成时,OS配置文件( temp.oil )根据配置过的OS模板自动生成出来。
这个文件包含OSEK实施语言(OIL)配置,这是针对ASECT中声明的OS对象进行的配置,例如:tasks, ISRs, resources, messages, alarms 和应用模式。
temp.oil 并不包含所有的OS配置。
还有一些OS配置需要用来进行ASCET与OS的集成。
这些配置由一个OIL框架文件给出。
用于RTA-OSEK集成的OIL框架文件范例可以在target路径中找
到..\target\trg_<targetname>\example\conf<version>.oil. 通过使用宏$(EXAMPLE_CONF_OIL)可以使用这个文件。
建议是备份这个OIL框架文件,并根据具体项目需要对文件进行修改。
conf<version>.oil 文件用于RTA-OSEK。
RTA-OSEK 使用"smart comments" (OIL注释使用
//RTAOILCFG or // RTAOSEK) 提供额外要求的OS配置,但是并没有用OIL来定义(例如,中断优先级和中断向量地址)。
system_counter 中断用外部C代码来实现。
对每个ASCET target都有一个范例文件,可以在target路径中找到,..\target\trg_<target>\example\target.c。
关于这部分更多的信息可以参看RTA-OSEK User Guide中
的内容。
C:\rta\docs\RTA-OSEK User Guide.pdf (6 Building the Example Application C:\ETAS\rta\docs\
RTA-OSEK Getting St)。