970 try: |
970 try: |
971 csvfile = os.path.join(self._getBuildPath(), "VARIABLES.csv") |
971 csvfile = os.path.join(self._getBuildPath(), "VARIABLES.csv") |
972 # describes CSV columns |
972 # describes CSV columns |
973 ProgramsListAttributeName = ["num", "C_path", "type"] |
973 ProgramsListAttributeName = ["num", "C_path", "type"] |
974 VariablesListAttributeName = [ |
974 VariablesListAttributeName = [ |
975 "num", "vartype", "IEC_path", "C_path", "type", "derived"] |
975 "num", "vartype", "IEC_path", "C_path", "type", "derived", "retain"] |
976 self._ProgramList = [] |
976 self._ProgramList = [] |
977 self._VariablesList = [] |
977 self._VariablesList = [] |
978 self._DbgVariablesList = [] |
978 self._DbgVariablesList = [] |
979 self._IECPathToIdx = {} |
979 self._IECPathToIdx = {} |
980 |
980 |
1051 """ |
1051 """ |
1052 self.GetIECProgramsAndVariables() |
1052 self.GetIECProgramsAndVariables() |
1053 |
1053 |
1054 # prepare debug code |
1054 # prepare debug code |
1055 variable_decl_array = [] |
1055 variable_decl_array = [] |
1056 for v in self._DbgVariablesList: |
1056 retain_indexes = [] |
1057 variable_decl_array += [ |
1057 for i, v in enumerate(self._DbgVariablesList): |
|
1058 variable_decl_array.append( |
1058 "{&(%(C_path)s), " % v + |
1059 "{&(%(C_path)s), " % v + |
1059 { |
1060 { |
1060 "EXT": "%(type)s_P_ENUM", |
1061 "EXT": "%(type)s_P_ENUM", |
1061 "IN": "%(type)s_P_ENUM", |
1062 "IN": "%(type)s_P_ENUM", |
1062 "MEM": "%(type)s_O_ENUM", |
1063 "MEM": "%(type)s_O_ENUM", |
1063 "OUT": "%(type)s_O_ENUM", |
1064 "OUT": "%(type)s_O_ENUM", |
1064 "VAR": "%(type)s_ENUM" |
1065 "VAR": "%(type)s_ENUM" |
1065 }[v["vartype"]] % v + |
1066 }[v["vartype"]] % v + |
1066 "}"] |
1067 "}") |
|
1068 |
|
1069 if v["retain"] == "1": |
|
1070 retain_indexes.append("/* "+v["C_path"]+" */ "+str(i)) |
|
1071 |
1067 debug_code = targets.GetCode("plc_debug.c") % { |
1072 debug_code = targets.GetCode("plc_debug.c") % { |
1068 "programs_declarations": "\n".join(["extern %(type)s %(C_path)s;" % |
1073 "programs_declarations": "\n".join(["extern %(type)s %(C_path)s;" % |
1069 p for p in self._ProgramList]), |
1074 p for p in self._ProgramList]), |
1070 "extern_variables_declarations": "\n".join([ |
1075 "extern_variables_declarations": "\n".join([ |
1071 { |
1076 { |
1076 "VAR": "extern __IEC_%(type)s_t %(C_path)s;", |
1081 "VAR": "extern __IEC_%(type)s_t %(C_path)s;", |
1077 "FB": "extern %(type)s %(C_path)s;" |
1082 "FB": "extern %(type)s %(C_path)s;" |
1078 }[v["vartype"]] % v |
1083 }[v["vartype"]] % v |
1079 for v in self._VariablesList if v["C_path"].find('.') < 0]), |
1084 for v in self._VariablesList if v["C_path"].find('.') < 0]), |
1080 "variable_decl_array": ",\n".join(variable_decl_array), |
1085 "variable_decl_array": ",\n".join(variable_decl_array), |
|
1086 "retain_vardsc_index_array": ",\n".join(retain_indexes), |
1081 "var_access_code": targets.GetCode("var_access.c") |
1087 "var_access_code": targets.GetCode("var_access.c") |
1082 } |
1088 } |
1083 |
1089 |
1084 return debug_code |
1090 return debug_code |
1085 |
1091 |