aboutsummaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2017-05-26 13:20:20 -0400
committerKevin O'Connor <kevin@koconnor.net>2017-05-26 13:25:51 -0400
commitd4bed025ed6de39e517422b076b5af9d7b31abb7 (patch)
treef526383fe6ebe2702f46cf34233327fc75b38a0e /scripts
parenta82e949c00aceaedd9d9a76ddcc3c88c9cad3d80 (diff)
downloadkutter-d4bed025ed6de39e517422b076b5af9d7b31abb7.tar.gz
kutter-d4bed025ed6de39e517422b076b5af9d7b31abb7.tar.xz
kutter-d4bed025ed6de39e517422b076b5af9d7b31abb7.zip
command: Store the command parsing information directly in array
Instead of defining an array of pointers, just define the array directly. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'scripts')
-rw-r--r--scripts/buildcommands.py18
-rwxr-xr-xscripts/checkstack.py25
2 files changed, 23 insertions, 20 deletions
diff --git a/scripts/buildcommands.py b/scripts/buildcommands.py
index 3935fa63..cb19c475 100644
--- a/scripts/buildcommands.py
+++ b/scripts/buildcommands.py
@@ -151,37 +151,31 @@ def build_param_types(all_param_types):
def build_commands(cmd_by_id, messages_by_name, all_param_types):
max_cmd_msgid = max(cmd_by_id.keys())
index = []
- parsers = []
externs = {}
for msgid in range(max_cmd_msgid+1):
if msgid not in cmd_by_id:
- index.append(" 0,")
+ index.append(" {\n},")
continue
funcname, flags, msgname = cmd_by_id[msgid]
msg = messages_by_name[msgname]
externs[funcname] = 1
- parsername = 'parser_%s' % (funcname,)
- index.append(" &%s," % (parsername,))
parser = msgproto.MessageFormat(msgid, msg)
parsercode = build_parser(parser, 1, all_param_types)
- parsers.append("const struct command_parser %s PROGMEM = {"
- " %s\n .flags=%s,\n .func=%s\n};" % (
- parsername, parsercode, flags, funcname))
- index = "\n".join(index)
+ index.append(" {%s\n .flags=%s,\n .func=%s\n}," % (
+ parsercode, flags, funcname))
+ index = "".join(index).strip()
externs = "\n".join(["extern void "+funcname+"(uint32_t*);"
for funcname in sorted(externs)])
fmt = """
%s
-%s
-
-const struct command_parser * const command_index[] PROGMEM = {
+const struct command_parser command_index[] PROGMEM = {
%s
};
const uint8_t command_index_size PROGMEM = ARRAY_SIZE(command_index);
"""
- return fmt % (externs, '\n'.join(parsers), index)
+ return fmt % (externs, index)
######################################################################
diff --git a/scripts/checkstack.py b/scripts/checkstack.py
index 34314218..e4cf45cc 100755
--- a/scripts/checkstack.py
+++ b/scripts/checkstack.py
@@ -135,8 +135,7 @@ def main():
continue
m = re_asm.match(line)
if m is None:
- if funcaddr not in datalines:
- datalines[funcaddr] = line.split()
+ datalines.setdefault(funcaddr, []).append(line)
#print("other", repr(line))
continue
insn = m.group('insn')
@@ -192,14 +191,24 @@ def main():
funcnameroot = info.funcname.split('.')[0]
funcsbyname[funcnameroot] = info
cmdfunc = funcsbyname.get('sched_main')
+ command_index = funcsbyname.get('command_index')
+ if command_index is not None and cmdfunc is not None:
+ for line in datalines[command_index.funcaddr]:
+ parts = line.split()
+ if len(parts) < 9:
+ continue
+ calladdr = int(parts[8]+parts[7], 16) * 2
+ numparams = int(parts[2], 16)
+ stackusage = cmdfunc.basic_stack_usage + 2 + numparams * 4
+ cmdfunc.noteCall(0, calladdr, stackusage)
+ if len(parts) < 17:
+ continue
+ calladdr = int(parts[16]+parts[15], 16) * 2
+ numparams = int(parts[10], 16)
+ stackusage = cmdfunc.basic_stack_usage + 2 + numparams * 4
+ cmdfunc.noteCall(0, calladdr, stackusage)
eventfunc = funcsbyname.get('__vector_13', funcsbyname.get('__vector_17'))
for funcnameroot, info in funcsbyname.items():
- if funcnameroot.startswith('parser_'):
- f = funcsbyname.get(funcnameroot[7:])
- if f is not None:
- numparams = int(datalines[info.funcaddr][2], 16)
- stackusage = cmdfunc.basic_stack_usage + 2 + numparams * 4
- cmdfunc.noteCall(0, f.funcaddr, stackusage)
if funcnameroot.endswith('_event') and eventfunc is not None:
eventfunc.noteCall(0, info.funcaddr, eventfunc.basic_stack_usage + 2)