文件的代码生成

在代码生成的过程中,文件会产生完整的生产代码,包括行为代码。根据它们的建模属性,已建模的文件会类似隐式的单例对象。

对于活动或反应文件,IBM® Rational® Rhapsody® 会生成使用活动或反应功能的公用、隐式对象(单例)。该单例的名称即是文件的名称。

注: 单例实例定义在实施源文件中,而非程序包源文件中。
对于具有 Constant 修饰符的变量,Rhapsody 将生成 #define
语句。例如:

    #define MAX 66

下表列示对象代码生成与文件代码生成的区别。

表 1. 对象代码生成与文件代码生成的区别
模型元素 文件代码 对象代码
数据成员(特性、关联或对象) 全局变量 单实例 struct 中的成员
函数名:可以使用 <lang>_CG::Operation::PublicName<lang>_CG::Operation::PrivateName 属性来配置函数的名称模式(对于文件、对象和其他元素)。 函数名模式是 <Function> 公用函数的名称模式是 <Singleton>_<function>

私有函数的模式是 <Function>

函数特征符 为了与框架回调函数的特征符相符(对于反应行为),将在有需要时生成 me自变量。 相同。
初始化 直接在定义中初始化变量和关联。例如:

int x=5;

在生成的 Init 函数中初始化对象。

在初始化函数中完成此任务。
类型名称 类型的名称模式是 <Type>(与可视性无关)。 公用类型的名称模式是 <Singleton>_type

私有函数的名称模式是 <Type>

可以使用 <lang>_CG::Type::PublicNamePrivateName 属性来配置名称模式。

可视性 在规范 (.h) 文件中将公用成员声明为 extern,并在实现 (.c) 文件中定义此成员。

例如:

extern int volume;

在实现文件中,将私有成员声明并定义为 static

例如:

static int volume;

忽略成员可视性;可视性是 struct 的可视性的结果。

例如:

struct Ob_t {
int volume;
};

自动生成
初始化和清除 在初始化方法中,只进行算法初始化(创建部件;初始化链接、行为和动画)。

仅当有需要时,才创建初始化方法和清理方法。

初始化函数的名称是 <file>_Init;清理函数是 <file>_Cleanup

任何初始化都在 Init 方法中进行。

在缺省情况下,将生成 InitCleanup 方法。

框架数据成员 Rational Rhapsody 将生成仅用于存放框架成员的指定 struct 以及名为 <file> 的单一 struct 实例。struct 名称是 <file>_t

例如:

struct Motor_t {
RiCReactive ric_reactive;
}

框架成员作为对象 struct 声明的组成部分生成。
调用框架操作 对文件执行的框架操作是使用该文件来调用的。

例如:

CGEN(Motor, ev());

对单实例执行的框架操作是通过传递该单实例来调用的。

例如:

CGEN(Motor,ev());

状态图数据成员 状态图数据成员是作为生成的结构的特性而生成的。

例如:

struct F_t {
...
enum F_Enum {
F_RiCNonState=0,
F_ready=1}
F_EnumVar;
int rootState_subState;
int rootState_active;
};

状态图数据成员作为 struct 的组成部分生成。
状态图函数名 公用状态图函数将使用前缀 <file>_ 来生成。

例如:

myFile_sIN()

请使用与任何其他操作相同的命名约定。

可以使用 <lang>_CG::Operation::PublicNamePrivateName 属性来配置函数的名称模式(对于文件、对象和其他元素)。


反馈