mirror of https://github.com/ARMmbed/mbed-os.git
Flake8 of uvision exporter python code
parent
11702d16b5
commit
c51467ee91
|
|
@ -2,7 +2,7 @@ from __future__ import print_function, absolute_import
|
|||
from builtins import str
|
||||
|
||||
import os
|
||||
from os.path import sep, normpath, join, exists, dirname
|
||||
from os.path import normpath, exists, dirname
|
||||
import ntpath
|
||||
import copy
|
||||
from collections import namedtuple
|
||||
|
|
@ -11,11 +11,11 @@ from subprocess import Popen, PIPE
|
|||
import re
|
||||
|
||||
from tools.resources import FileType
|
||||
from tools.arm_pack_manager import Cache
|
||||
from tools.targets import TARGET_MAP
|
||||
from tools.export.exporters import Exporter, apply_supported_whitelist
|
||||
from tools.export.exporters import Exporter
|
||||
from tools.export.cmsis import DeviceCMSIS
|
||||
|
||||
|
||||
class DeviceUvision(DeviceCMSIS):
|
||||
"""Uvision Device class, inherits CMSIS Device class
|
||||
|
||||
|
|
@ -32,7 +32,7 @@ class DeviceUvision(DeviceCMSIS):
|
|||
|
||||
def uv_debug(self):
|
||||
"""Return a namedtuple of information about uvision debug settings"""
|
||||
UVDebug = namedtuple('UVDebug',['bin_loc','core_flag', 'key'])
|
||||
UVDebug = namedtuple('UVDebug', ['bin_loc', 'core_flag', 'key'])
|
||||
|
||||
# CortexMXn => pCMX
|
||||
cpu = self.core.replace("Cortex-", "C")
|
||||
|
|
@ -42,10 +42,13 @@ class DeviceUvision(DeviceCMSIS):
|
|||
cpu_flag = "p"+cpu
|
||||
|
||||
# Locations found in Keil_v5/TOOLS.INI
|
||||
debuggers = {"st-link": ('STLink\\ST-LINKIII-KEIL_SWO.dll', 'ST-LINKIII-KEIL_SWO'),
|
||||
"j-link":('Segger\\JL2CM3.dll', 'JL2CM3'),
|
||||
"cmsis-dap":('BIN\\CMSIS_AGDI.dll', 'CMSIS_AGDI'),
|
||||
"nulink":('NULink\\Nu_Link.dll','Nu_Link')}
|
||||
debuggers = {
|
||||
"st-link": ('STLink\\ST-LINKIII-KEIL_SWO.dll',
|
||||
'ST-LINKIII-KEIL_SWO'),
|
||||
"j-link": ('Segger\\JL2CM3.dll', 'JL2CM3'),
|
||||
"cmsis-dap": ('BIN\\CMSIS_AGDI.dll', 'CMSIS_AGDI'),
|
||||
"nulink": ('NULink\\Nu_Link.dll', 'Nu_Link')
|
||||
}
|
||||
res = debuggers[self.debug.lower()]
|
||||
binary = res[0]
|
||||
key = res[1]
|
||||
|
|
@ -57,7 +60,7 @@ class DeviceUvision(DeviceCMSIS):
|
|||
S = SW/JTAG Clock ID
|
||||
C = CPU index in JTAG chain
|
||||
P = Access Port
|
||||
For the Options for Target -> Debug tab -> settings -> "Flash" tab in the dialog:
|
||||
For the Options for Target -> Debug -> settings -> "Flash" dialog:
|
||||
FD = RAM Start for Flash Functions
|
||||
FC = RAM Size for Flash Functions
|
||||
FN = Number of Flash types
|
||||
|
|
@ -66,44 +69,55 @@ class DeviceUvision(DeviceCMSIS):
|
|||
FL = Size of the Flash Device
|
||||
FP = Full path to the Device algorithm (RTE)
|
||||
|
||||
Necessary to flash some targets. Info gathered from algorithms field of pdsc file.
|
||||
Necessary to flash some targets.
|
||||
'''
|
||||
fl_count = 0
|
||||
|
||||
def get_mem_no_x(mem_str):
|
||||
mem_reg = "\dx(\w+)"
|
||||
m = re.search(mem_reg, mem_str)
|
||||
return m.group(1) if m else None
|
||||
|
||||
RAMS = [(get_mem_no_x(info["start"]), get_mem_no_x(info["size"]))
|
||||
for mem, info in self.target_info["memory"].items() if "RAM" in mem]
|
||||
format_str = "UL2CM3(-S0 -C0 -P0 -FD{ramstart}"+" -FC{ramsize} "+"-FN{num_algos} {extra_flags})"
|
||||
RAMS = [
|
||||
(get_mem_no_x(info["start"]), get_mem_no_x(info["size"]))
|
||||
for mem, info in self.target_info["memory"].items() if "RAM" in mem
|
||||
]
|
||||
format_str = (
|
||||
"UL2CM3(-S0 -C0 -P0 -FD{ramstart}"
|
||||
" -FC{ramsize} -FN{num_algos} {extra_flags})"
|
||||
)
|
||||
ramstart = ''
|
||||
#Default according to Keil developer
|
||||
# Default according to Keil developer
|
||||
ramsize = '1000'
|
||||
if len(RAMS)>=1:
|
||||
if len(RAMS) >= 1:
|
||||
ramstart = RAMS[0][0]
|
||||
extra_flags = []
|
||||
for name, info in self.target_info["algorithm"].items():
|
||||
if not name or not info:
|
||||
continue
|
||||
if int(info["default"])==0:
|
||||
if int(info["default"]) == 0:
|
||||
continue
|
||||
name_reg = "\w*/([\w_]+)\.flm"
|
||||
m = re.search(name_reg, name.lower())
|
||||
fl_name = m.group(1) if m else None
|
||||
name_flag = "-FF" + str(fl_count) + fl_name
|
||||
|
||||
start, size = get_mem_no_x(info["start"]), get_mem_no_x(info["size"])
|
||||
rom_start_flag = "-FS"+str(fl_count)+str(start)
|
||||
start = get_mem_no_x(info["start"])
|
||||
size = get_mem_no_x(info["size"])
|
||||
rom_start_flag = "-FS" + str(fl_count) + str(start)
|
||||
rom_size_flag = "-FL" + str(fl_count) + str(size)
|
||||
|
||||
if info["ramstart"] is not None and info["ramsize"] is not None:
|
||||
ramstart = get_mem_no_x(info["ramstart"])
|
||||
ramsize = get_mem_no_x(info["ramsize"])
|
||||
|
||||
path_flag = "-FP" + str(fl_count) + "($$Device:"+self.dname+"$"+name+")"
|
||||
path_flag = "-FP{}($$Device:{}${})".format(
|
||||
str(fl_count), self.dname, name
|
||||
)
|
||||
|
||||
extra_flags.extend([name_flag, rom_start_flag, rom_size_flag, path_flag])
|
||||
extra_flags.extend([
|
||||
name_flag, rom_start_flag, rom_size_flag, path_flag
|
||||
])
|
||||
fl_count += 1
|
||||
|
||||
extra = " ".join(extra_flags)
|
||||
|
|
@ -130,8 +144,7 @@ class Uvision(Exporter):
|
|||
"NCS36510TargetCode.ncs36510_addfib"
|
||||
])
|
||||
|
||||
|
||||
#File associations within .uvprojx file
|
||||
# File associations within .uvprojx file
|
||||
file_types = {'.cpp': 8, '.c': 1, '.s': 2,
|
||||
'.obj': 3, '.o': 3, '.lib': 4,
|
||||
'.ar': 4, '.h': 5, '.hpp': 5, '.sct': 4}
|
||||
|
|
@ -149,8 +162,8 @@ class Uvision(Exporter):
|
|||
</File>
|
||||
"""
|
||||
for loc in files:
|
||||
#Encapsulates the information necessary for template entry above
|
||||
UVFile = namedtuple('UVFile', ['type','loc','name'])
|
||||
# Encapsulates the information necessary for template entry above
|
||||
UVFile = namedtuple('UVFile', ['type', 'loc', 'name'])
|
||||
_, ext = os.path.splitext(loc)
|
||||
if ext.lower() in self.file_types:
|
||||
type = self.file_types[ext.lower()]
|
||||
|
|
@ -212,11 +225,11 @@ class Uvision(Exporter):
|
|||
|
||||
def generate(self):
|
||||
"""Generate the .uvproj file"""
|
||||
cache = Cache(True, False)
|
||||
|
||||
srcs = self.resources.headers + self.resources.s_sources + \
|
||||
self.resources.c_sources + self.resources.cpp_sources + \
|
||||
srcs = (
|
||||
self.resources.headers + self.resources.s_sources +
|
||||
self.resources.c_sources + self.resources.cpp_sources +
|
||||
self.resources.objects + self.libraries
|
||||
)
|
||||
ctx = {
|
||||
'name': self.project_name,
|
||||
# project_files => dict of generators - file group to generator of
|
||||
|
|
@ -227,7 +240,8 @@ class Uvision(Exporter):
|
|||
self.resources.inc_dirs).encode('utf-8'),
|
||||
'device': DeviceUvision(self.target),
|
||||
}
|
||||
sct_name, sct_path = self.resources.get_file_refs(FileType.LD_SCRIPT)[0]
|
||||
sct_name, sct_path = self.resources.get_file_refs(
|
||||
FileType.LD_SCRIPT)[0]
|
||||
ctx['linker_script'] = self.toolchain.correct_scatter_shebang(
|
||||
sct_path, dirname(sct_name))
|
||||
if ctx['linker_script'] != sct_path:
|
||||
|
|
@ -243,8 +257,12 @@ class Uvision(Exporter):
|
|||
ctx['armc6'] = int(self.TOOLCHAIN is 'ARMC6')
|
||||
ctx['toolchain_name'] = self.TOOLCHAIN_NAME
|
||||
ctx.update(self.format_flags())
|
||||
self.gen_file('uvision/uvision.tmpl', ctx, self.project_name+".uvprojx")
|
||||
self.gen_file('uvision/uvision_debug.tmpl', ctx, self.project_name + ".uvoptx")
|
||||
self.gen_file(
|
||||
'uvision/uvision.tmpl', ctx, self.project_name + ".uvprojx"
|
||||
)
|
||||
self.gen_file(
|
||||
'uvision/uvision_debug.tmpl', ctx, self.project_name + ".uvoptx"
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def clean(project_name):
|
||||
|
|
@ -284,6 +302,7 @@ class Uvision(Exporter):
|
|||
else:
|
||||
return 0
|
||||
|
||||
|
||||
class UvisionArmc5(Uvision):
|
||||
NAME = 'uvision5-armc5'
|
||||
TOOLCHAIN = 'ARM'
|
||||
|
|
@ -306,12 +325,6 @@ class UvisionArmc5(Uvision):
|
|||
else:
|
||||
return False
|
||||
|
||||
@classmethod
|
||||
def is_target_supported(cls, target_name):
|
||||
target = TARGET_MAP[target_name]
|
||||
return apply_supported_whitelist(
|
||||
cls.TOOLCHAIN, cls.POST_BINARY_WHITELIST, target) and\
|
||||
DeviceCMSIS.check_supported(target_name)
|
||||
|
||||
class UvisionArmc6(Uvision):
|
||||
NAME = 'uvision5-armc6'
|
||||
|
|
|
|||
Loading…
Reference in New Issue