stage4/generate_cc/generate_cc.cc
changeset 41 8998c8b24b60
parent 40 873a5b60a7ea
child 46 fc1b78ea6d84
equal deleted inserted replaced
40:873a5b60a7ea 41:8998c8b24b60
  1144       /* (A.1) resource name in comment */
  1144       /* (A.1) resource name in comment */
  1145       s4o.print("// RESOURCE ");
  1145       s4o.print("// RESOURCE ");
  1146       current_resource_name->accept(*this);
  1146       current_resource_name->accept(*this);
  1147       s4o.print("\n");
  1147       s4o.print("\n");
  1148        
  1148        
  1149       /* (A.2) POUs inclusion */
  1149       /* (A.2) Global variables... */
  1150       s4o.print("#include \"POUS.c\"\n\n");
       
  1151       
       
  1152       /* (A.3) Global variables... */
       
  1153       if (current_global_vars != NULL) {
  1150       if (current_global_vars != NULL) {
  1154         vardecl = new generate_cc_vardecl_c(&s4o,
  1151         vardecl = new generate_cc_vardecl_c(&s4o,
  1155                       generate_cc_vardecl_c::local_vf,
  1152                       generate_cc_vardecl_c::localstatic_vf,
  1156                       generate_cc_vardecl_c::global_vt);
  1153                       generate_cc_vardecl_c::global_vt);
  1157         vardecl->print(current_global_vars);
  1154         vardecl->print(current_global_vars);
  1158         delete vardecl;
  1155         delete vardecl;
  1159       }
  1156       }
  1160       s4o.print("\n");
  1157       s4o.print("\n");
       
  1158       
       
  1159       /* (A.3) POUs inclusion */
       
  1160       s4o.print("#include \"POUS.c\"\n\n");
  1161       
  1161       
  1162       /* (A.4) Resource programs declaration... */
  1162       /* (A.4) Resource programs declaration... */
  1163       wanted_declaretype = declare_dt;
  1163       wanted_declaretype = declare_dt;
  1164       symbol->program_configuration_list->accept(*this);
  1164       symbol->program_configuration_list->accept(*this);
  1165       s4o.print("\n");
  1165       s4o.print("\n");
  1380 
  1380 
  1381 class generate_cc_c: public iterator_visitor_c {
  1381 class generate_cc_c: public iterator_visitor_c {
  1382   protected:
  1382   protected:
  1383     stage4out_c &s4o;
  1383     stage4out_c &s4o;
  1384     stage4out_c pous_s4o;
  1384     stage4out_c pous_s4o;
       
  1385     stage4out_c located_variables_s4o;
  1385     generate_cc_pous_c generate_cc_pous;
  1386     generate_cc_pous_c generate_cc_pous;
  1386 
  1387 
  1387     symbol_c *current_configuration;
  1388     symbol_c *current_configuration;
  1388 
  1389 
  1389     const char *current_name;
  1390     const char *current_name;
  1392 
  1393 
  1393   public:
  1394   public:
  1394     generate_cc_c(stage4out_c *s4o_ptr): 
  1395     generate_cc_c(stage4out_c *s4o_ptr): 
  1395             s4o(*s4o_ptr),
  1396             s4o(*s4o_ptr),
  1396             pous_s4o("POUS", "c"),
  1397             pous_s4o("POUS", "c"),
       
  1398             located_variables_s4o("LOCATED_VARIABLES","h"),
  1397             generate_cc_pous(&pous_s4o) {
  1399             generate_cc_pous(&pous_s4o) {
  1398       current_configuration = NULL;
  1400       current_configuration = NULL;
  1399     }
  1401     }
  1400             
  1402             
  1401     ~generate_cc_c(void) {}
  1403     ~generate_cc_c(void) {}
  1402 
  1404 
  1403 /***************************/
  1405 /***************************/
  1404 /* B 0 - Programming Model */
  1406 /* B 0 - Programming Model */
  1405 /***************************/
  1407 /***************************/
  1406     void *visit(library_c *symbol) {
  1408     void *visit(library_c *symbol) {
  1407       generate_location_list_c generate_location_list(&s4o);
  1409       generate_location_list_c generate_location_list(&located_variables_s4o);
  1408       symbol->accept(generate_location_list);
  1410       symbol->accept(generate_location_list);
  1409       
  1411       
  1410       for(int i = 0; i < symbol->n; i++) {
  1412       for(int i = 0; i < symbol->n; i++) {
  1411         symbol->elements[i]->accept(*this);
  1413         symbol->elements[i]->accept(*this);
  1412       }
  1414       }
  1466       current_configuration = symbol;
  1468       current_configuration = symbol;
  1467       
  1469       
  1468       calculate_common_ticktime_c calculate_common_ticktime;
  1470       calculate_common_ticktime_c calculate_common_ticktime;
  1469       symbol->accept(calculate_common_ticktime);
  1471       symbol->accept(calculate_common_ticktime);
  1470       common_ticktime = calculate_common_ticktime.get_ticktime();
  1472       common_ticktime = calculate_common_ticktime.get_ticktime();
  1471       s4o.print("common_ticktime : ");
       
  1472       s4o.print_integer((int)(common_ticktime / 1000000));
       
  1473       s4o.print("ms\n");
       
  1474       
  1473       
  1475       symbol->configuration_name->accept(*this);
  1474       symbol->configuration_name->accept(*this);
  1476     	stage4out_c config_s4o(current_name, "c");
  1475       stage4out_c config_s4o(current_name, "c");
  1477     	generate_cc_config_c generate_cc_config(&config_s4o);
  1476       generate_cc_config_c generate_cc_config(&config_s4o);
  1478     	symbol->accept(generate_cc_config);
  1477       symbol->accept(generate_cc_config);
       
  1478         
       
  1479       config_s4o.print("int common_ticktime__ = ");
       
  1480       config_s4o.print_integer((int)(common_ticktime / 1000000));
       
  1481       config_s4o.print("; /*ms*/\n");
       
  1482       
  1479       symbol->resource_declarations->accept(*this);
  1483       symbol->resource_declarations->accept(*this);
  1480     	
  1484 
  1481       current_configuration = NULL;
  1485       current_configuration = NULL;
  1482       
  1486       
  1483       return NULL;
  1487       return NULL;
  1484     }
  1488     }
  1485 
  1489