stage4/generate_c/generate_c_sfcdecl.cc
changeset 229 ca7bc1324540
parent 221 c6aed7e5f070
child 244 3a478229db8b
equal deleted inserted replaced
228:43831b683764 229:ca7bc1324540
    48         stepcount_sd,
    48         stepcount_sd,
    49         stepdef_sd,
    49         stepdef_sd,
    50         stepundef_sd,
    50         stepundef_sd,
    51         actiondef_sd,
    51         actiondef_sd,
    52         actionundef_sd,
    52         actionundef_sd,
    53         actioncount_sd
    53         actioncount_sd,
       
    54         transitioncount_sd
    54        } sfcdeclaration_t;
    55        } sfcdeclaration_t;
    55   
    56   
    56   private:
    57   private:
    57     char step_number;
    58     char step_number;
    58     char action_number;
    59     char action_number;
   105           
   106           
   106           /* transitions debug table declaration */
   107           /* transitions debug table declaration */
   107           s4o.print(s4o.indent_spaces + "__IEC_BOOL_t __debug_transition_list[");
   108           s4o.print(s4o.indent_spaces + "__IEC_BOOL_t __debug_transition_list[");
   108           s4o.print_integer(transition_number);
   109           s4o.print_integer(transition_number);
   109           s4o.print("];\n");
   110           s4o.print("];\n");
       
   111           s4o.print(s4o.indent_spaces + "UINT __nb_transitions;\n");
   110           
   112           
   111           /* last_ticktime declaration */
   113           /* last_ticktime declaration */
   112           s4o.print(s4o.indent_spaces + "TIME __lasttick_time;\n");
   114           s4o.print(s4o.indent_spaces + "TIME __lasttick_time;\n");
   113           break;
   115           break;
   114         case sfcinit_sd:
   116         case sfcinit_sd:
   163           print_variable_prefix();
   165           print_variable_prefix();
   164           s4o.print("__action_list[i] = temp_action;\n");
   166           s4o.print("__action_list[i] = temp_action;\n");
   165           s4o.indent_left();
   167           s4o.indent_left();
   166           s4o.print(s4o.indent_spaces + "}\n");
   168           s4o.print(s4o.indent_spaces + "}\n");
   167           
   169           
       
   170           /* transitions table count */
       
   171           wanted_sfcdeclaration = transitioncount_sd;
       
   172           for(int i = 0; i < symbol->n; i++)
       
   173             symbol->elements[i]->accept(*this);
       
   174           s4o.print(s4o.indent_spaces);
       
   175           print_variable_prefix();
       
   176           s4o.print("__nb_transitions = ");
       
   177           s4o.print_integer(transition_number);
       
   178           s4o.print(";\n");
       
   179           transition_number = 0;
       
   180           wanted_sfcdeclaration = sfcinit_sd;
       
   181 
   168           /* last_ticktime initialisation */
   182           /* last_ticktime initialisation */
   169           s4o.print(s4o.indent_spaces);
   183           s4o.print(s4o.indent_spaces);
   170           print_variable_prefix();
   184           print_variable_prefix();
   171           s4o.print("__lasttick_time = __CURRENT_TIME;\n");
   185           s4o.print("__lasttick_time = __CURRENT_TIME;\n");
   172           break;
   186           break;
   266     }
   280     }
   267 
   281 
   268     void *visit(transition_c *symbol) {
   282     void *visit(transition_c *symbol) {
   269       switch (wanted_sfcdeclaration) {
   283       switch (wanted_sfcdeclaration) {
   270         case sfcdecl_sd:
   284         case sfcdecl_sd:
       
   285         case transitioncount_sd:
   271           transition_number++;
   286           transition_number++;
   272           break;
   287           break;
   273         default:
   288         default:
   274           break;
   289           break;
   275       }
   290       }