From 3f9ec36bf414b08ac2ee0f62927997b8e0c127cb Mon Sep 17 00:00:00 2001 From: NĂ©lio Laranjeiro Date: Mon, 12 Apr 2010 00:10:43 +0200 Subject: {tools/trace, digital/avr/modules/trace}: print trace on host execution, closes #92 --- tools/trace/example/trace.trc | 4 +-- tools/trace/tcreator/tcreator.py | 20 +++++------ tools/trace/tcreator/template.c | 29 +++++++++++++++ tools/trace/tcreator/template.h | 16 +++++---- tools/trace/tcreator/writer.py | 78 +++++++++++++++++++++++++++------------- tools/trace/tinter/tinter.py | 3 +- tools/trace/trace.py | 13 +++---- 7 files changed, 109 insertions(+), 54 deletions(-) create mode 100644 tools/trace/tcreator/template.c (limited to 'tools') diff --git a/tools/trace/example/trace.trc b/tools/trace/example/trace.trc index cb9e9bdb..96644f4a 100644 --- a/tools/trace/example/trace.trc +++ b/tools/trace/example/trace.trc @@ -1,3 +1,3 @@ -EVENT asserv__right_motor speed 4 position 4 acceleration 2 "Right motor speed : %d, position : %d, acceleration : %d" -EVENT asserv__left_motor speed 4 position 4 acceleration 2 "Left motor speed : %d, position : %d, acceleration : %d" +EVENT asserv__right_motor speed 4 position 4 acceleration 2 "Right motor speed : %d, position : %d, acceleration : %d\n" +EVENT asserv__left_motor speed 4 position 4 acceleration 2 "Left motor speed : %d, position : %d, acceleration : %d\n" EVENT ia__ia_cmd arg1 2 arg2 2 arg3 4 [ia] diff --git a/tools/trace/tcreator/tcreator.py b/tools/trace/tcreator/tcreator.py index d0d8807c..45778ace 100644 --- a/tools/trace/tcreator/tcreator.py +++ b/tools/trace/tcreator/tcreator.py @@ -7,20 +7,18 @@ except: print "--> You should run yapps on lib/parser.g" class TCreator: - def __init__(self, infile, outfile, enum_name = "trace_id_t"): + def __init__(self, infile): self.__infile = infile - self.__outfile = outfile - self.__enum_name = enum_name - def create (self): + def create (self, outfile): infile = open (self.__infile, 'r') data = parse ('parser', infile.read()) infile.close() - - w = Writer (self.__outfile, self.__enum_name) - outstring = w.parse_list (data) - - if self.__outfile != None: - w.write_file (outstring) + w = Writer () + id_table = w.parse_event_identifiers (data) + string_table = w.parse_event_string (data) + string_table_nb = str (len (data)) + if outfile: + w.write_file (id_table, string_table, string_table_nb) else: - w.print_file (outstring) + w.print_file (id_table, string_table, string_table_nb) diff --git a/tools/trace/tcreator/template.c b/tools/trace/tcreator/template.c new file mode 100644 index 00000000..d3f4eaec --- /dev/null +++ b/tools/trace/tcreator/template.c @@ -0,0 +1,29 @@ +/* events.c */ +/* avr.trace - AVR TRACE use. {{{ + * + * Copyright (C) 2010 APBTeam + * + * APBTeam: + * Web: http://apbteam.org/ + * Email: team AT apbteam DOT org + * + * 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. + * + * }}} */ +#include "modules/trace/events.h" + +char *trace_table[%%NB%%] = { +%%DATA%% +}; diff --git a/tools/trace/tcreator/template.h b/tools/trace/tcreator/template.h index 3e83692e..aa62d8eb 100644 --- a/tools/trace/tcreator/template.h +++ b/tools/trace/tcreator/template.h @@ -1,6 +1,6 @@ -#ifndef %%template%% -#define %%template%% -/* %%template%% */ +#ifndef events_h +#define events_h +/* trace_events_h */ /* {{{ * * Copyright (C) %%year%% APBTeam @@ -25,9 +25,13 @@ * * }}} */ -enum %%enum_name%% +enum trace_id_t { -%%data%% +%%ids%% }; -#endif /* %%template%% */ +#ifndef HOST +extern char *trace_table[%%NB%%]; +#endif /* !HOST */ + +#endif /* events_h */ diff --git a/tools/trace/tcreator/writer.py b/tools/trace/tcreator/writer.py index 8e6d70b3..db5fc21e 100644 --- a/tools/trace/tcreator/writer.py +++ b/tools/trace/tcreator/writer.py @@ -9,45 +9,73 @@ templatedir = os.path.split (__file__)[0] class Writer: """Template writer""" - def __init__ (self, name, enum_name): - self.__name = name - self.__enum_name = enum_name + def __init__ (self): + self.__header_name = "events.h" + self.__file_name = "events.host.c" - def parse_list (self, event_list = None): + def parse_event_identifiers (self, event_list = None): + """Parse the event list and construct a string to embedded in a + header file.""" if event_list != None: string = "" + prefix = " " for i in range (0, len (event_list)): - string += " TRACE_" + event_list[i].name() + ",\n" - string += " TRACE_NB" + string += prefix + "TRACE_" + event_list[i].name() + ",\n" + string += prefix + "TRACE_NB" return string.upper() - def __read_template__ (self, string): + def __parse_event_string_cb (self, event): + """Create a default string interpretation for callbacks events.""" + assert event.callback + string = "\"" + event.name () + for i in range (event.param_nb ()): + string += " %d" + string += "\\n\"," + return string + + def parse_event_string (self, event_list = None): + """Parse the event list and construct a string containing on each line + the string interpretation for a human.""" + if event_list != None: + string = "" + prefix = " " + for i in event_list: + if i.callback: + string += prefix + self.__parse_event_string_cb (i) + else: + string += prefix + i.string_get () + ",\n" + return string + + def __read_template_header (self, string, string_nb): f = open (templatedir + '/template.h', 'r') template = f.read() f.close() - - if self.__name != None: - define = self.__name.replace('.', '_') - else: - define = "trace.h" - template = template.replace('%%template%%', define) - - if self.__enum_name == None: - template = template.replace('%%enum_name%%', "trace_id_t") - else: - template = template.replace('%%enum_name%%', self.__enum_name) - - template = template.replace('%%data%%', string) + template = template.replace('%%ids%%', string) template = template.replace('%%year%%', time.strftime ('%Y')) + template = template.replace('%%NB%%', string_nb); return template + def __read_template_file (self, string_table, string_nb): + f = open (templatedir + '/template.c', 'r') + template = f.read() + f.close() + template = template.replace('%%NB%%', string_nb); + template = template.replace('%%DATA%%', string_table) + return template - def write_file (self, string): - template = self.__read_template__(string) - f = open (self.__name, 'w') + def __write (self, template, outfile): + f = open (outfile, 'w') f.write (template) f.close() - def print_file (self, string): - template = self.__read_template__(string) + def write_file (self, id_table, string_table, string_table_nb): + template = self.__read_template_header (id_table, string_table_nb) + self.__write (template, self.__header_name) + template = self.__read_template_file (string_table, string_table_nb) + self.__write (template, self.__file_name) + + def print_file (self, id_table, string_table, string_table_nb): + template = self.__read_template_header (id_table, string_table_nb) + print template + template = self.__read_template_file (string_table, string_table_nb) print template diff --git a/tools/trace/tinter/tinter.py b/tools/trace/tinter/tinter.py index 8efd12c1..f2387644 100644 --- a/tools/trace/tinter/tinter.py +++ b/tools/trace/tinter/tinter.py @@ -10,10 +10,9 @@ except: class TInter: - def __init__(self, infile, outfile, prgm, cb = None): + def __init__(self, infile, prgm, cb = None): self.__infile = infile self.__events = None - self.__outfile = outfile self.__file = None self.__host = THost(prgm) diff --git a/tools/trace/trace.py b/tools/trace/trace.py index 4e252ddb..d3d2736c 100644 --- a/tools/trace/trace.py +++ b/tools/trace/trace.py @@ -12,11 +12,8 @@ print "Trace System by APBTeam\n" usage = "usage: %prog [options] [host program]" parser = OptionParser(usage=usage) -parser.add_option("-e", "--enum-name", dest="enum_name", - help="provide the enumerator name" + CREATE_MODE, - metavar="ENUM") -parser.add_option("-o", "--output", dest="outfile", - help="Store the enumerator on the output file" + CREATE_MODE) +parser.add_option("-o", "--output", dest="outfile", action="store_true", + help="generate events.h and events.c files" + CREATE_MODE) parser.add_option("-i", "--infile", dest="infile", help="Read the data from the file") parser.add_option("-t", "--type", dest="type", @@ -33,10 +30,10 @@ if options.type == "inter": assert args if options.type == 'create': - cre = TCreator (options.infile, options.outfile, options.enum_name) - cre.create () + cre = TCreator (options.infile) + cre.create (options.outfile) elif options.type == "inter": - inter = TInter (options.infile, options.outfile, args[0], options.cb) + inter = TInter (options.infile, args[0], options.cb) if options.list_trace: inter.available_traces () elif options.trace != None: -- cgit v1.2.3