osate / osate2

Open Source AADL2 Tool Environment
http://osate.org
Eclipse Public License 2.0
36 stars 8 forks source link

Support for subprogram implementation #153

Closed juli1 closed 11 years ago

juli1 commented 11 years ago

It seems that subprogram implementation calls are not supported. See the model below :

package imported::runtime public with runtime::common; with SEI; with ARINC653;

data generictype end generictype;

subprogram vrs1 features from_MGR : in parameter generictype; from_App0_DM : in parameter generictype; from_App1_DM : in parameter generictype; from_App2_DM : in parameter generictype; from_App3_DM : in parameter generictype; end vrs1;

subprogram vrs2 features to_MGR : out parameter generictype; end vrs2;

subprogram VR features from_MGR : in parameter generictype; from_App0_DM : in parameter generictype; from_App1_DM : in parameter generictype; from_App2_DM : in parameter generictype; from_App3_DM : in parameter generictype; to_MGR : out parameter generictype; end VR;

subprogram implementation VR.i calls mycall : { call1 : subprogram VRs1; call2 : subprogram VRs2; }; connections parameter call2.to_MGR -> to_MGR; end VR.i;

thread thr_VR features from_MGR : in event data port generictype; from_App0_DM : in event data port generictype; from_App1_DM : in event data port generictype; from_App2_DM : in event data port generictype; from_App3_DM : in event data port generictype; to_MGR : out event data port generictype; end thr_VR;

thread implementation thr_VR.i calls mycall : { call1 : subprogram VR.i; }; connections parameter from_MGR -> call1.from_MGR; parameter from_App0_DM -> call1.from_App0_DM; parameter from_App1_DM -> call1.from_App1_DM; parameter from_App2_DM -> call1.from_App2_DM; parameter from_App3_DM -> call1.from_App3_DM; parameter call1.to_MGR -> to_MGR; end thr_VR.i;

process pr_VR features from_MGR : in event data port generictype; from_App0_DM : in event data port generictype; from_App1_DM : in event data port generictype; from_App2_DM : in event data port generictype; from_App3_DM : in event data port generictype; to_MGR : out event data port generictype; end pr_VR;

process implementation pr_VR.i subcomponents thr : thread thr_VR.i;

connections port from_MGR -> thr.from_MGR; port from_App0_DM -> thr.from_App0_DM; port from_App1_DM -> thr.from_App1_DM; port from_App2_DM -> thr.from_App2_DM; port from_App3_DM -> thr.from_App3_DM; port thr.to_MGR -> to_MGR; end pr_VR.i;

subprogram App3 features to_App3_DM : out parameter generictype; end App3;

thread thr_App3 features to_App3_DM : out event data port generictype; end thr_App3;

thread implementation thr_App3.i calls mycall : { call1 : subprogram App3; }; connections parameter call1.to_App3_DM -> to_App3_DM; end thr_App3.i;

process pr_App3 features to_App3_DM : out event data port generictype; end pr_App3;

process implementation pr_App3.i subcomponents thr : thread thr_App3.i;

connections port thr.to_App3_DM -> to_App3_DM; end pr_App3.i;

subprogram App2 features to_App2_DM : out parameter generictype; end App2;

thread thr_App2 features to_App2_DM : out event data port generictype; end thr_App2;

thread implementation thr_App2.i calls mycall : { call1 : subprogram App2; }; connections parameter call1.to_App2_DM -> to_App2_DM; end thr_App2.i;

process pr_App2 features to_App2_DM : out event data port generictype; end pr_App2;

process implementation pr_App2.i subcomponents thr : thread thr_App2.i;

connections port thr.to_App2_DM -> to_App2_DM; end pr_App2.i;

subprogram App2_DM features from_App2 : in parameter generictype; from_MGR : in parameter generictype; to_VR : out parameter generictype; end App2_DM;

thread thr_App2_DM features from_App2 : in event data port generictype; from_MGR : in event data port generictype; to_VR : out event data port generictype; end thr_App2_DM;

thread implementation thr_App2_DM.i calls mycall : { call1 : subprogram App2_DM; }; connections parameter from_App2 -> call1.from_App2; parameter from_MGR -> call1.from_MGR; parameter call1.to_VR -> to_VR; end thr_App2_DM.i;

process pr_App2_DM features from_App2 : in event data port generictype; from_MGR : in event data port generictype; to_VR : out event data port generictype; end pr_App2_DM;

process implementation pr_App2_DM.i subcomponents thr : thread thr_App2_DM.i;

connections port from_App2 -> thr.from_App2; port from_MGR -> thr.from_MGR; port thr.to_VR -> to_VR; end pr_App2_DM.i;

subprogram App1 features to_App1_DM : out parameter generictype; end App1;

thread thr_App1 features to_App1_DM : out event data port generictype; end thr_App1;

thread implementation thr_App1.i calls mycall : { call1 : subprogram App1; }; connections parameter call1.to_App1_DM -> to_App1_DM; end thr_App1.i;

process pr_App1 features to_App1_DM : out event data port generictype; end pr_App1;

process implementation pr_App1.i subcomponents thr : thread thr_App1.i;

connections port thr.to_App1_DM -> to_App1_DM; end pr_App1.i;

subprogram MGR features from_VR : in parameter generictype; to_VR : out parameter generictype; to_App0_DM : out parameter generictype; to_App1_DM : out parameter generictype; to_App2_DM : out parameter generictype; to_App3_DM : out parameter generictype; end MGR;

thread thr_MGR features from_VR : in event data port generictype; to_VR : out event data port generictype; to_App0_DM : out event data port generictype; to_App1_DM : out event data port generictype; to_App2_DM : out event data port generictype; to_App3_DM : out event data port generictype; end thr_MGR;

thread implementation thr_MGR.i calls mycall : { call1 : subprogram MGR; }; connections parameter from_VR -> call1.from_VR; parameter call1.to_VR -> to_VR; parameter call1.to_App0_DM -> to_App0_DM; parameter call1.to_App1_DM -> to_App1_DM; parameter call1.to_App2_DM -> to_App2_DM; parameter call1.to_App3_DM -> to_App3_DM; end thr_MGR.i;

process pr_MGR features from_VR : in event data port generictype; to_VR : out event data port generictype; to_App0_DM : out event data port generictype; to_App1_DM : out event data port generictype; to_App2_DM : out event data port generictype; to_App3_DM : out event data port generictype; end pr_MGR;

process implementation pr_MGR.i subcomponents thr : thread thr_MGR.i;

connections port from_VR -> thr.from_VR; port thr.to_VR -> to_VR; port thr.to_App0_DM -> to_App0_DM; port thr.to_App1_DM -> to_App1_DM; port thr.to_App2_DM -> to_App2_DM; port thr.to_App3_DM -> to_App3_DM; end pr_MGR.i;

subprogram App1_DM features from_App1 : in parameter generictype; from_MGR : in parameter generictype; to_VR : out parameter generictype; end App1_DM;

thread thr_App1_DM features from_App1 : in event data port generictype; from_MGR : in event data port generictype; to_VR : out event data port generictype; end thr_App1_DM;

thread implementation thr_App1_DM.i calls mycall : { call1 : subprogram App1_DM; }; connections parameter from_App1 -> call1.from_App1; parameter from_MGR -> call1.from_MGR; parameter call1.to_VR -> to_VR; end thr_App1_DM.i;

process pr_App1_DM features from_App1 : in event data port generictype; from_MGR : in event data port generictype; to_VR : out event data port generictype; end pr_App1_DM;

process implementation pr_App1_DM.i subcomponents thr : thread thr_App1_DM.i;

connections port from_App1 -> thr.from_App1; port from_MGR -> thr.from_MGR; port thr.to_VR -> to_VR; end pr_App1_DM.i;

subprogram App0 features to_App0_DM : out parameter generictype; end App0;

thread thr_App0 features to_App0_DM : out event data port generictype; end thr_App0;

thread implementation thr_App0.i calls mycall : { call1 : subprogram App0; }; connections parameter call1.to_App0_DM -> to_App0_DM; end thr_App0.i;

process pr_App0 features to_App0_DM : out event data port generictype; end pr_App0;

process implementation pr_App0.i subcomponents thr : thread thr_App0.i;

connections port thr.to_App0_DM -> to_App0_DM; end pr_App0.i;

subprogram App3_DM features from_App3 : in parameter generictype; from_MGR : in parameter generictype; to_VR : out parameter generictype; end App3_DM;

thread thr_App3_DM features from_App3 : in event data port generictype; from_MGR : in event data port generictype; to_VR : out event data port generictype; end thr_App3_DM;

thread implementation thr_App3_DM.i calls mycall : { call1 : subprogram App3_DM; }; connections parameter from_App3 -> call1.from_App3; parameter from_MGR -> call1.from_MGR; parameter call1.to_VR -> to_VR; end thr_App3_DM.i;

process pr_App3_DM features from_App3 : in event data port generictype; from_MGR : in event data port generictype; to_VR : out event data port generictype; end pr_App3_DM;

process implementation pr_App3_DM.i subcomponents thr : thread thr_App3_DM.i;

connections port from_App3 -> thr.from_App3; port from_MGR -> thr.from_MGR; port thr.to_VR -> to_VR; end pr_App3_DM.i;

subprogram App0_DM features from_App0 : in parameter generictype; from_MGR : in parameter generictype; to_VR : out parameter generictype; end App0_DM;

thread thr_App0_DM features from_App0 : in event data port generictype; from_MGR : in event data port generictype; to_VR : out event data port generictype; end thr_App0_DM;

thread implementation thr_App0_DM.i calls mycall : { call1 : subprogram App0_DM; }; connections parameter from_App0 -> call1.from_App0; parameter from_MGR -> call1.from_MGR; parameter call1.to_VR -> to_VR; end thr_App0_DM.i;

process pr_App0_DM features from_App0 : in event data port generictype; from_MGR : in event data port generictype; to_VR : out event data port generictype; end pr_App0_DM;

process implementation pr_App0_DM.i subcomponents thr : thread thr_App0_DM.i;

connections port from_App0 -> thr.from_App0; port from_MGR -> thr.from_MGR; port thr.to_VR -> to_VR; end pr_App0_DM.i;

processor module extends runtime::common::module end module; processor implementation module.i subcomponents VR : virtual processor runtime::common::partition.i {ARINC653::Criticality => LEVEL_C;}; App3 : virtual processor runtime::common::partition.i {ARINC653::Criticality => LEVEL_C;}; App2 : virtual processor runtime::common::partition.i {ARINC653::Criticality => LEVEL_C;}; App2_DM : virtual processor runtime::common::partition.i {ARINC653::Criticality => LEVEL_C;}; App1 : virtual processor runtime::common::partition.i {ARINC653::Criticality => LEVEL_C;}; MGR : virtual processor runtime::common::partition.i {ARINC653::Criticality => LEVEL_C;}; App1_DM : virtual processor runtime::common::partition.i {ARINC653::Criticality => LEVEL_C;}; App0 : virtual processor runtime::common::partition.i {ARINC653::Criticality => LEVEL_C;}; App3_DM : virtual processor runtime::common::partition.i {ARINC653::Criticality => LEVEL_C;}; App0_DM : virtual processor runtime::common::partition.i {ARINC653::Criticality => LEVEL_C;}; properties ARINC653::Module_Major_Frame => 10100ms; ARINC653::Partition_Slots => (100ms,100ms,100ms,100ms,100ms,100ms,100ms,100ms,100ms,100ms); ARINC653::Slots_Allocation => (reference(VR),reference(App3),reference(App2),reference(App2_DM),reference(App1),reference(MGR),reference(App1_DM),reference(App0),reference(App3_DM),reference(App0_DM)); end module.i; memory ram extends runtime::common::ram end ram; memory implementation ram.i subcomponents VR : memory runtime::common::segment.i; App3 : memory runtime::common::segment.i; App2 : memory runtime::common::segment.i; App2_DM : memory runtime::common::segment.i; App1 : memory runtime::common::segment.i; MGR : memory runtime::common::segment.i; App1_DM : memory runtime::common::segment.i; App0 : memory runtime::common::segment.i; App3_DM : memory runtime::common::segment.i; App0_DM : memory runtime::common::segment.i; end ram.i; system mainsystem end mainsystem; system implementation mainsystem.i subcomponents VR : process pr_VR.i; App3 : process pr_App3.i; App2 : process pr_App2.i; App2_DM : process pr_App2_DM.i; App1 : process pr_App1.i; MGR : process pr_MGR.i; App1_DM : process pr_App1_DM.i; App0 : process pr_App0.i; App3_DM : process pr_App3_DM.i; App0_DM : process pr_App0_DM.i; module : processor module.i; ram : memory ram.i; connections port VR.to_MGR->MGR.from_VR; port App3.to_App3_DM->App3_DM.from_App3; port App2.to_App2_DM->App2_DM.from_App2; port App2_DM.to_VR->VR.from_App2_DM; port App1.to_App1_DM->App1_DM.from_App1; port MGR.to_VR->VR.from_MGR; port MGR.to_App0_DM->App0_DM.from_MGR; port MGR.to_App1_DM->App1_DM.from_MGR; port MGR.to_App2_DM->App2_DM.from_MGR; port MGR.to_App3_DM->App3_DM.from_MGR; port App1_DM.to_VR->VR.from_App1_DM; port App0.to_App0_DM->App0_DM.from_App0; port App3_DM.to_VR->VR.from_App3_DM; port App0_DM.to_VR->VR.from_App0_DM; properties Actual_Processor_Binding => (reference (module.VR)) applies to VR; Actual_Memory_Binding => (reference (ram.VR)) applies to VR; Actual_Processor_Binding => (reference (module.App3)) applies to App3; Actual_Memory_Binding => (reference (ram.App3)) applies to App3; Actual_Processor_Binding => (reference (module.App2)) applies to App2; Actual_Memory_Binding => (reference (ram.App2)) applies to App2; Actual_Processor_Binding => (reference (module.App2_DM)) applies to App2_DM; Actual_Memory_Binding => (reference (ram.App2_DM)) applies to App2_DM; Actual_Processor_Binding => (reference (module.App1)) applies to App1; Actual_Memory_Binding => (reference (ram.App1)) applies to App1; Actual_Processor_Binding => (reference (module.MGR)) applies to MGR; Actual_Memory_Binding => (reference (ram.MGR)) applies to MGR; Actual_Processor_Binding => (reference (module.App1_DM)) applies to App1_DM; Actual_Memory_Binding => (reference (ram.App1_DM)) applies to App1_DM; Actual_Processor_Binding => (reference (module.App0)) applies to App0; Actual_Memory_Binding => (reference (ram.App0)) applies to App0; Actual_Processor_Binding => (reference (module.App3_DM)) applies to App3_DM; Actual_Memory_Binding => (reference (ram.App3_DM)) applies to App3_DM; Actual_Processor_Binding => (reference (module.App0_DM)) applies to App0_DM; Actual_Memory_Binding => (reference (ram.App0_DM)) applies to App0_DM; end mainsystem.i; end imported::runtime;

package runtime::common public with ARINC653; with SEI; virtual processor partition end partition; virtual processor implementation partition.i end partition.i; processor module end module; memory ram end ram; memory segment end segment; memory implementation segment.i end segment.i; end runtime::common;

reteprelief commented 11 years ago

Julien,

I fixed the name resolver (Aadl2LinkingService) to address the problem. In order for it to work Lutz needs to make a change to the Meta model, namely specify that SubprogramType has CallContext as one of its superclasses. I tried out the change by patching the Ecore model and it worked. I talked to him and he will make the change with you.

Peter