------------------------------------------------------------------------------ ------------------------------------------------------------------------------ -- Cheddar is a GNU GPL real-time scheduling analysis tool. -- This program provides services to automatically check schedulability and -- other performance criteria of real-time architecture models. -- -- Copyright (C) 2002-2020, Frank Singhoff, Alain Plantec, Jerome Legrand, -- Hai Nam Tran, Stephane Rubini -- -- The Cheddar project was started in 2002 by -- Frank Singhoff, Lab-STICC UMR CNRS 6285, Universite de Bretagne Occidentale -- -- Cheddar has been published in the "Agence de Protection des Programmes/France" in 2008. -- Since 2008, Ellidiss technologies also contributes to the development of -- Cheddar and provides industrial support. -- -- The full list of contributors and sponsors can be found in AUTHORS.txt and SPONSORS.txt -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by -- the Free Software Foundation; either version 2 of the License, or -- (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program; if not, write to the Free Software -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -- -- -- Contact : cheddar@listes.univ-brest.fr -- ------------------------------------------------------------------------------ -- Last update : -- $Rev: $ -- $Date: $ -- $Author: $ ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ with Ada.Text_IO; use Ada.Text_IO; with Ada.Strings.Unbounded; use Ada.Strings.Unbounded; with Systems; use Systems; with Initialize_Framework; use Initialize_Framework; with Call_Cache_Framework; use Call_Cache_Framework; with Cache_Access_Profile_Set; use Cache_Access_Profile_Set; with Unbounded_Strings; use Unbounded_strings; with Unbounded_Strings; use Unbounded_Strings.Strings_Table_Package; with Unbounded_Strings; use Unbounded_Strings.Unbounded_String_List_Package; with Call_Framework; use Call_Framework; with Call_Framework_Interface; use Call_Framework_Interface; with Call_Scheduling_Framework; use Call_Scheduling_Framework; with Data_Accesses; use Data_Accesses; with Data_Access_Set; use Data_Access_Set; with Data_Accesses; use Data_Accesses.Data_Accesses_Table_Package; with CFG_Nodes; use CFG_Nodes; with Sets; procedure test_add_Data_Access_driver is Sys : System; Project_File_List : Unbounded_string_list; Project_File_Dir_List : Unbounded_string_list; result : Unbounded_String; da1_r : Data_Access_Record; da2_r : Data_Access_Record; da3_r : Data_Access_Record; k : Data_Access_Ptr; set1 : Data_Accesses_Set; My_Iterator : Data_Accesses_Iterator; --Data_Access_iterator A_Data_Access : Data_Access_Ptr; begin -- Initialize the Cheddar framework -- Call_Framework.initialize (False); -- 1. Read the system model from an XML project file -- initialize (Project_File_List); Systems.Read_From_Xml_File (Sys, -- Object system, contains all entities found in input.xml Project_File_Dir_List, -- "input.xml"); -- Input system model -- 2. Code here -- - Create/Declare an data accesses set -- - Create/Declare an data accesses record (see example in framework_examples/scheduling_error) da1_r.Access_Type := Read_Data; da1_r.Memory_Address := 0175; da1_r.Size := 1; da1_r.Time_Constraint_Name := Unbounded_Strings.empty_string; -- - Add the data accesses to the set Add_Data_Access(My_Data_Accesses => set1, Name => To_Unbounded_String("da1"), A_Data_Access_Record => da1_r); -- - Repeat and add 2-3 more data accesses ------------ 2 eme E.U------------------------------------------------ da2_r.Access_Type := Write_Data; da2_r.Memory_Address := 0178; da2_r.Size := 1; da2_r.Time_Constraint_Name := Unbounded_Strings.empty_string; Add_Data_Access(My_Data_Accesses => set1, Name => To_Unbounded_String("da2"), A_Data_Access_Record => da2_r); ----------- 3 eme E.U-------------------------------------------------- da3_r.Access_Type := Write_Data; da3_r.Memory_Address := 0140; da3_r.Size := 3; da3_r.Time_Constraint_Name := Unbounded_Strings.empty_string; Add_Data_Access(My_Data_Accesses => set1, Name => To_Unbounded_String("da3"), A_Data_Access_Record => da3_r); -- - Use loop and put_line to display all data accesses added to the set --loop if not is_empty(set1) then reset_iterator (set1, My_Iterator); loop current_element (set1, A_Data_Access, My_Iterator); Put_line("le type de l'acces de donnée est " & A_Data_Access.Access_Type'Img); exit when is_last_element (set1, My_Iterator); next_element (set1, My_Iterator); end loop; -- - Test the search function k := Search_Data_Access (set1,To_Unbounded_String("da3")); Put_line("le size de la donnée dans le data access 3 est : " & k.Size'Img); -- 3. Export the new system model to an xml file -- Systems.Write_To_Xml_File(A_System => Sys, File_Name => "output.xml"); Put_line("============================================="); Put_line(""); end if; end test_add_Data_Access_driver;