# HG changeset patch # User laurent # Date 1260285966 -3600 # Node ID ca7bc13245406047a6f300683f9bb32272efeb91 # Parent 43831b683764c88d18db3af8b33050f57fe7c7c2 Bug on SFC debugging fixed Adding support for forcing transition state diff -r 43831b683764 -r ca7bc1324540 stage4/generate_c/generate_c_sfc.cc --- a/stage4/generate_c/generate_c_sfc.cc Mon Dec 07 15:36:29 2009 +0100 +++ b/stage4/generate_c/generate_c_sfc.cc Tue Dec 08 16:26:06 2009 +0100 @@ -661,7 +661,7 @@ s4o.print(s4o.indent_spaces +"BOOL transition;\n"); s4o.print(s4o.indent_spaces +"TIME elapsed_time, current_time;\n\n"); - /* generate elapsed_time initialisations */ + /* generate elapsed_time initializations */ s4o.print(s4o.indent_spaces + "// Calculate elapsed_time\n"); s4o.print(s4o.indent_spaces +"current_time = __CURRENT_TIME;\n"); s4o.print(s4o.indent_spaces +"elapsed_time = __time_sub(__BOOL_LITERAL(TRUE), NULL, current_time, "); @@ -671,8 +671,26 @@ print_variable_prefix(); s4o.print("__lasttick_time = current_time;\n"); - /* generate step initialisations */ - s4o.print(s4o.indent_spaces + "// Steps initialisation\n"); + /* generate transition initializations */ + s4o.print(s4o.indent_spaces + "// Transitions initialization\n"); + s4o.print(s4o.indent_spaces + "if (__DEBUG) {\n"); + s4o.indent_right(); + s4o.print(s4o.indent_spaces + "for (i = 0; i < "); + print_variable_prefix(); + s4o.print("__nb_transitions; i++) {\n"); + s4o.indent_right(); + s4o.print(s4o.indent_spaces); + print_variable_prefix(); + s4o.print("__transition_list[i] = "); + print_variable_prefix(); + s4o.print("__debug_transition_list[i];\n"); + s4o.indent_left(); + s4o.print(s4o.indent_spaces + "}\n"); + s4o.indent_left(); + s4o.print(s4o.indent_spaces + "}\n"); + + /* generate step initializations */ + s4o.print(s4o.indent_spaces + "// Steps initialization\n"); s4o.print(s4o.indent_spaces + "for (i = 0; i < "); print_variable_prefix(); s4o.print("__nb_steps; i++) {\n"); @@ -700,8 +718,8 @@ s4o.indent_left(); s4o.print(s4o.indent_spaces + "}\n"); - /* generate action initilizations */ - s4o.print(s4o.indent_spaces + "// Actions initialisation\n"); + /* generate action initializations */ + s4o.print(s4o.indent_spaces + "// Actions initialization\n"); s4o.print(s4o.indent_spaces + "for (i = 0; i < "); print_variable_prefix(); s4o.print("__nb_actions; i++) {\n"); diff -r 43831b683764 -r ca7bc1324540 stage4/generate_c/generate_c_sfcdecl.cc --- a/stage4/generate_c/generate_c_sfcdecl.cc Mon Dec 07 15:36:29 2009 +0100 +++ b/stage4/generate_c/generate_c_sfcdecl.cc Tue Dec 08 16:26:06 2009 +0100 @@ -50,7 +50,8 @@ stepundef_sd, actiondef_sd, actionundef_sd, - actioncount_sd + actioncount_sd, + transitioncount_sd } sfcdeclaration_t; private: @@ -107,6 +108,7 @@ s4o.print(s4o.indent_spaces + "__IEC_BOOL_t __debug_transition_list["); s4o.print_integer(transition_number); s4o.print("];\n"); + s4o.print(s4o.indent_spaces + "UINT __nb_transitions;\n"); /* last_ticktime declaration */ s4o.print(s4o.indent_spaces + "TIME __lasttick_time;\n"); @@ -165,6 +167,18 @@ s4o.indent_left(); s4o.print(s4o.indent_spaces + "}\n"); + /* transitions table count */ + wanted_sfcdeclaration = transitioncount_sd; + for(int i = 0; i < symbol->n; i++) + symbol->elements[i]->accept(*this); + s4o.print(s4o.indent_spaces); + print_variable_prefix(); + s4o.print("__nb_transitions = "); + s4o.print_integer(transition_number); + s4o.print(";\n"); + transition_number = 0; + wanted_sfcdeclaration = sfcinit_sd; + /* last_ticktime initialisation */ s4o.print(s4o.indent_spaces); print_variable_prefix(); @@ -268,6 +282,7 @@ void *visit(transition_c *symbol) { switch (wanted_sfcdeclaration) { case sfcdecl_sd: + case transitioncount_sd: transition_number++; break; default: diff -r 43831b683764 -r ca7bc1324540 stage4/generate_c/generate_var_list.cc --- a/stage4/generate_c/generate_var_list.cc Mon Dec 07 15:36:29 2009 +0100 +++ b/stage4/generate_c/generate_var_list.cc Tue Dec 08 16:26:06 2009 +0100 @@ -561,7 +561,7 @@ print_symbol_list(); s4o.print("__step_list["); print_step_number(); - s4o.print("].state;STEP;\n"); + s4o.print("].state;BOOL;\n"); step_number++; return NULL; } @@ -577,7 +577,7 @@ print_symbol_list(); s4o.print("__step_list["); print_step_number(); - s4o.print("].state;STEP;\n"); + s4o.print("].state;BOOL;\n"); step_number++; return NULL; } @@ -601,7 +601,7 @@ print_symbol_list(); s4o.print("__debug_transition_list["); print_transition_number(); - s4o.print("];TRANSITION;\n"); + s4o.print("];BOOL;\n"); transition_number++; return NULL; } @@ -640,7 +640,7 @@ print_symbol_list(); s4o.print("__action_list["); print_action_number(); - s4o.print("].state;ACTION;\n"); + s4o.print("].state;BOOL;\n"); action_number++; return NULL; }