package reg public with Deployment; with Data_Model; ------------------------------------------------ -- Donnee partagee : c'est un compteur entier -- ------------------------------------------------ data Counter_Internal_Type properties Data_Model::Data_Representation => Integer; end Counter_Internal_Type; data Counter features Write_Counter : provides subprogram access Write_spg; Read_Counter : provides subprogram access Read_spg; properties Priority => 250; Concurrency_Control_Protocol => Priority_Ceiling; end Counter; data implementation Counter.Impl subcomponents Field : data Counter_Internal_Type; spgWrite : subprogram Write_spg; spgRead : subprogram Read_spg; connections C1 : subprogram access SpgWrite -> Write_Counter; C2 : subprogram access SpgRead -> Read_Counter; properties Data_Model::Data_Representation => Struct; end Counter.Impl; subprogram Write_spg features this : requires data access Counter.Impl; properties source_language => C; source_name => "counter_write"; source_text => ("reg.c"); end Write_spg; subprogram Read_spg features this : requires data access Counter.Impl; properties source_language => C; source_name => "counter_read"; source_text => ("reg.c"); end Read_spg; ----------------- -- Subprograms -- ----------------- subprogram sonde_spg properties source_language => C; source_name => "sonde_spg"; source_text => ("reg.c"); end sonde_spg; subprogram alarme_spg properties source_language => C; source_name => "alarme_spg"; source_text => ("reg.c"); end alarme_spg; subprogram lampe_spg properties source_language => C; source_name => "lampe_spg"; source_text => ("reg.c"); end lampe_spg; subprogram porte_spg properties source_language => C; source_name => "porte_spg"; source_text => ("reg.c"); end porte_spg; subprogram thermostat_spg properties source_language => C; source_name => "thermostat_spg"; source_text => ("reg.c"); end thermostat_spg; ------------------------------------------- -- Code de chaque thread -- Sequence d'appel des sous programmes ------------------------------------------- subprogram alarme_sequence features seq_cnt : requires data access Counter.Impl; end alarme_sequence; subprogram implementation alarme_sequence.Impl calls Mycalls: { Call_Read : subprogram Counter.Read_Counter; Call_alarme : subprogram alarme_Spg; }; connections C1 : data access seq_cnt -> Call_Read.this; end alarme_sequence.Impl; subprogram thermostat_sequence features seq_cnt : requires data access Counter.Impl; end thermostat_sequence; subprogram implementation thermostat_sequence.Impl calls Mycalls: { Call_thermostat : subprogram thermostat_Spg; Call_Write : subprogram Counter.Write_Counter; }; connections C1 : data access seq_cnt -> Call_Write.this; end thermostat_sequence.Impl; ------------- -- Threads -- ------------- thread Task properties Dispatch_Protocol => periodic; end Task; thread implementation Task.porte calls c : { s : subprogram porte_spg; }; end Task.porte; thread implementation Task.lampe calls c : { s : subprogram lampe_spg; }; end Task.lampe; thread implementation Task.sonde calls c : { s : subprogram sonde_spg; }; end Task.sonde; thread thermostat features thread_cnt : requires data access Counter.Impl; end thermostat; thread implementation thermostat.Impl calls Mycalls: { call : subprogram thermostat_sequence.Impl; }; connections C1 : data access thread_cnt -> call.seq_cnt; properties Dispatch_Protocol => periodic; end thermostat.Impl; thread alarme features thread_cnt : requires data access Counter.Impl; end alarme; thread implementation alarme.Impl calls Mycalls: { call : subprogram alarme_sequence.Impl; }; connections C1 : data access thread_cnt -> call.seq_cnt; properties Dispatch_Protocol => periodic; end alarme.Impl; --------------- -- Processor -- --------------- processor cpu properties Deployment::Execution_Platform => native; end cpu; processor implementation cpu.impl properties Scheduling_Protocol => (Posix_1003_Highest_Priority_First_Protocol); end cpu.impl; --------------- -- Processes -- --------------- process node_a end node_a; process implementation node_a.impl subcomponents lampe : thread Task.lampe; porte: thread Task.porte; sonde : thread Task.sonde; thermostat: thread thermostat.impl; alarme: thread alarme.impl; Counter_Data : data counter.impl; connections C1 : data access Counter_Data -> alarme.thread_cnt; C2 : data access Counter_Data -> thermostat.thread_cnt; properties Deadline => 15 ms applies to thermostat; Period => 15 ms applies to thermostat; Priority => 70 applies to thermostat; Deadline => 30 ms applies to porte; Period => 30 ms applies to porte; Priority => 60 applies to porte; Deadline => 10 ms applies to alarme; Period => 10 ms applies to alarme; Priority => 90 applies to alarme; Deadline => 7 ms applies to lampe; Period => 7 ms applies to lampe; Priority => 100 applies to lampe; Deadline => 14 ms applies to sonde; Period => 14 ms applies to sonde; Priority => 80 applies to sonde; end node_a.impl; ------------ -- System -- ------------ system root end root; system implementation root.impl subcomponents node_a : process node_a.impl; cpu : processor cpu.impl; properties Actual_Processor_Binding => (reference (cpu)) applies to node_a; end root.impl; end reg;