From 1a3e8d4bf9fc336d076bb7c1e5a6bc7103069e9e Mon Sep 17 00:00:00 2001 From: Jake Carter Date: Thu, 26 May 2022 16:37:08 -0500 Subject: [PATCH 01/55] Re-work test script --- maintain.py | 71 ++++++++++++++++++++++------------------------------- 1 file changed, 30 insertions(+), 41 deletions(-) diff --git a/maintain.py b/maintain.py index 006f1f7..29cc3df 100644 --- a/maintain.py +++ b/maintain.py @@ -47,9 +47,10 @@ curplatform = platform.system() # Get OS def log(string, file): - print(string) - file.write(f"{string}\n") - file.flush() + with open(file, "a") as f: + print(string) + f.write(f"{string}\n") + f.flush() def timestamp(): now = time.localtime() @@ -70,18 +71,6 @@ def wrapper(*args, **kwargs): return wrapper -# Run powershell command. On linux, run a shell command -@time_me -def ps(cmd, env=None): - if curplatform == 'Linux': - if env is None: result = run(cmd, capture_output=True, shell=True) - else: result = run(cmd, env=env, capture_output=True, shell=True) - elif curplatform == 'Windows': - if env is None: result = run(["powershell", cmd], capture_output=True) - else: result = run(["powershell", cmd], env=env, capture_output=True) - - return result - def sync(): # Inject .vscode folder into example projects print("Copying from Inject folder into example project and template...") @@ -159,21 +148,21 @@ def release(version): # Tests cleaning and compiling example projects for target platforms. If no targets, boards, projects, etc. are specified then it will auto-detect def test(maxim_path, targets=None, boards=None, projects=None): - maxim_path = Path(maxim_path).resolve().as_posix() + maxim_path = Path(maxim_path).resolve() env = os.environ.copy() # Simulate the VS Code terminal by appending to the Path if curplatform == 'Linux': - env["PATH"] = f"{maxim_path}/Tools/GNUTools/10.3/bin:{maxim_path}/Tools/xPack/riscv-none-embed-gcc/10.2.0-1.2/bin:" + env["PATH"] + env["PATH"] = f"{maxim_path.as_posix()}/Tools/GNUTools/10.3/bin:{maxim_path.as_posix()}/Tools/xPack/riscv-none-embed-gcc/10.2.0-1.2/bin:" + env["PATH"] elif curplatform == 'Windows': - env["PATH"] = f"{maxim_path}/Tools/GNUTools/10.3/bin;{maxim_path}/Tools/xPack/riscv-none-embed-gcc/10.2.0-1.2/bin;" + env["PATH"] + env["PATH"] = f"{maxim_path.as_posix()}/Tools/GNUTools/10.3/bin;{maxim_path.as_posix()}/Tools/xPack/riscv-none-embed-gcc/10.2.0-1.2/bin;{maxim_path.as_posix()}/Tools/MSYS2/usr/bin;" + env["PATH"] - LOG_DIR = os.getcwd() + log_dir = Path(os.getcwd()).joinpath("buildlogs") # Create log file - try: os.mkdir(f"{LOG_DIR}/buildlogs") - except FileExistsError: pass - logfile = open(f"{LOG_DIR}/test.log", 'w') + if not log_dir.exists(): + os.mkdir(log_dir) + logfile = log_dir.joinpath("test.log") # Log system info log(timestamp(), logfile) @@ -197,9 +186,10 @@ def test(maxim_path, targets=None, boards=None, projects=None): targets = sorted(targets) # Create subfolders for target-specific logfiles - for t in targets: - try: os.mkdir(f"{LOG_DIR}/buildlogs/{t}") - except FileExistsError: pass + for t in targets: + sub_dir = log_dir.joinpath(t) + if not sub_dir.exists(): + os.mkdir(sub_dir) # Track failed projects for end summary failed = [] @@ -212,9 +202,9 @@ def test(maxim_path, targets=None, boards=None, projects=None): # Get list of supported boards for this target. if boards is None: boards = [] - for dirpath, subdirs, items in os.walk(f"{maxim_path}/Libraries/Boards/{target}"): - if "board.mk" in items and curplatform == 'Linux': boards.append(dirpath.split('/')[-1]) # Linux - elif "board.mk" in items and curplatform == 'Windows': boards.append(dirpath.split('\\')[-1]) # Board string will be the last folder in the directory path # Windows + for dirpath, subdirs, items in os.walk(maxim_path.joinpath("Libraries", "Boards", target)): + if "board.mk" in items: + boards.append(Path(dirpath).name) log(f"[BOARDS] Detected {boards}", logfile) @@ -227,9 +217,9 @@ def test(maxim_path, targets=None, boards=None, projects=None): # Get list of examples for this target. If a Makefile is in the root directory it's an example. if projects is None: projects = [] - for dirpath, subdirs, items in os.walk(f"{maxim_path}/Examples/{target}"): - if 'Makefile' in items: - projects.append(dirpath) + for dirpath, subdirs, items in os.walk(maxim_path.joinpath("Examples", target)): + if 'Makefile' in items and "main.c" in items: + projects.append(Path(dirpath)) log(f"[PROJECTS] Detected {projects}", logfile) @@ -241,20 +231,19 @@ def test(maxim_path, targets=None, boards=None, projects=None): # Test each project for project in projects: - if curplatform == 'Linux': project_stripped = project.split('/')[-1] # Linux - elif curplatform == 'Windows': project_stripped = project.split('\\')[-1] # Windows + project_name = project.name + print(project_name) log("---------------------", logfile) - log(f"[{target}]\t[{project_stripped}]", logfile) - os.chdir(project) # Need to us os.chdir to set working directory of subprocesses + log(f"[{target}]\t[{project_name}]", logfile) for board in boards: - buildlog = f"{target}_{board}_{project_stripped}.log" + buildlog = f"{target}_{board}_{project_name}.log" success = True # Test build (make all) - build_cmd = f"make all TARGET={target} MAXIM_PATH={maxim_path} BOARD={board} MAKE=make" - res = ps(build_cmd, env=env) # Run build command + build_cmd = f"make all TARGET={target} MAXIM_PATH={maxim_path.as_posix()} BOARD={board} MAKE=make" + res = run(build_cmd, env=env, cwd=project, shell=True, capture_output=True) # Run build command # Error check build command if res.returncode != 0: @@ -263,7 +252,7 @@ def test(maxim_path, targets=None, boards=None, projects=None): log(f"{timestamp()}[{board}] --- [BUILD]\t[FAILED] Return code {res.returncode}. See buildlogs/{buildlog}", logfile) # Log detailed output to separate output file - with open(f"{LOG_DIR}/buildlogs/{target}/{buildlog}", 'w') as f: + with open(log_dir.joinpath(target, buildlog), 'w') as f: f.write("===============\n") f.write(timestamp() + '\n') f.write(f"[PROJECT] {project}\n") @@ -277,7 +266,7 @@ def test(maxim_path, targets=None, boards=None, projects=None): # Test clean (make clean) clean_cmd = f"make distclean TARGET={target} MAXIM_PATH={maxim_path} BOARD={board} MAKE=make" - res = ps(clean_cmd, env=env) # Run clean command + res = run(clean_cmd, env=env, cwd=project, shell=True, capture_output=True) # Run clean command # Error check clean command if res.returncode != 0: @@ -288,7 +277,7 @@ def test(maxim_path, targets=None, boards=None, projects=None): # Add any failed projects to running list project_info = { "target":target, - "project":project_stripped, + "project":project_name, "board":board, "path":project, "logfile":f"buildlogs/{buildlog}" From 0b316d3b9bfb80120acdb2c05ff836c3f943af14 Mon Sep 17 00:00:00 2001 From: Jake Carter Date: Tue, 31 May 2022 16:44:23 -0500 Subject: [PATCH 02/55] Update generator with support for compiler definitions --- generate.py | 8 +++++++- sdk.py | 5 ++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/generate.py b/generate.py index 5a1db70..91470fb 100644 --- a/generate.py +++ b/generate.py @@ -47,6 +47,7 @@ "MAX32650", "MAX32655", "MAX32660", + "MAX32662", "MAX32665", "MAX32670", "MAX32672", @@ -198,6 +199,7 @@ def populate_maximsdk(target_os, maxim_path, overwrite=True): _symbol_file="${config:project_name}.elf" if example.riscv else defaults["SYMBOL_FILE"] _ipaths = [] + defaults["C_CPP.DEFAULT.INCLUDEPATH"] _vpaths = [] + defaults["C_CPP.DEFAULT.BROWSE.PATH"] + _defines = [] + defaults["C_CPP.DEFAULT.DEFINES"] # Add include and browse paths for the libraries that this example uses for l in example.libs: @@ -215,6 +217,9 @@ def populate_maximsdk(target_os, maxim_path, overwrite=True): replace(example.target.name, "${config:target}") ) + if l.defines is not None: + _defines += l.defines + # Linux OpenOCD .cfg files are case senstive. Need to hard-code a lowercase value. _m4_ocd_target_file = f"{str.lower(example.target.name)}.cfg" if target_os == "Linux" else defaults["M4_OCD_TARGET_FILE"] @@ -242,7 +247,8 @@ def populate_maximsdk(target_os, maxim_path, overwrite=True): arm_gcc_path=_arm_gcc_path, xpack_gcc_path=_xpack_gcc_path, v_arm_gcc=_v_arm_gcc, - v_xpack_gcc=_v_xpack_gcc + v_xpack_gcc=_v_xpack_gcc, + defines = _defines ) count += 1 diff --git a/sdk.py b/sdk.py index 9aa1c10..3551e25 100644 --- a/sdk.py +++ b/sdk.py @@ -73,6 +73,7 @@ class Library(): vpaths: tuple whitelist: bool targets: tuple + defines: tuple def from_libinfo(filepath): """ @@ -90,6 +91,7 @@ def from_libinfo(filepath): _vpaths = tuple(i for i in libinfo["vpaths"]) _whitelist = libinfo["whitelist"] _targets = tuple(i for i in libinfo["targets"]) if "targets" in keys else None + _defines = libinfo["defines"] if "defines" in keys else None return Library( _name, @@ -97,7 +99,8 @@ def from_libinfo(filepath): _ipaths, _vpaths, _whitelist, - _targets + _targets, + _defines ) def get_ipaths(self, target=None): From 404d831887b8d5cd0e665b97fd080d81457182f8 Mon Sep 17 00:00:00 2001 From: Jake Carter Date: Wed, 1 Jun 2022 16:00:45 -0500 Subject: [PATCH 03/55] Add 'flash & run' utility task --- MaximSDK/Inject/.vscode/flash.gdb | 8 ++++++++ MaximSDK/Inject/.vscode/tasks.json | 18 +++++++++++++++++- MaximSDK/New_Project/.vscode/flash.gdb | 8 ++++++++ MaximSDK/New_Project/.vscode/tasks.json | 18 +++++++++++++++++- MaximSDK/Template/.vscode/flash.gdb | 8 ++++++++ MaximSDK/Template/.vscode/tasks.json | 18 +++++++++++++++++- 6 files changed, 75 insertions(+), 3 deletions(-) diff --git a/MaximSDK/Inject/.vscode/flash.gdb b/MaximSDK/Inject/.vscode/flash.gdb index 2d86f86..fc627ae 100644 --- a/MaximSDK/Inject/.vscode/flash.gdb +++ b/MaximSDK/Inject/.vscode/flash.gdb @@ -5,3 +5,11 @@ define flash_m4 compare-sections monitor reset halt end + +define flash_m4_run + set architecture armv7e-m + target remote | openocd -c "gdb_port pipe;log_output flash.log" -s $arg0/scripts -f interface/$arg1 -f target/$arg2 -c "init; reset halt" + load + compare-sections + monitor resume +end \ No newline at end of file diff --git a/MaximSDK/Inject/.vscode/tasks.json b/MaximSDK/Inject/.vscode/tasks.json index 5eef671..d44ace3 100644 --- a/MaximSDK/Inject/.vscode/tasks.json +++ b/MaximSDK/Inject/.vscode/tasks.json @@ -26,12 +26,28 @@ "label": "flash", "type": "shell", "command": "arm-none-eabi-gdb", + "args": [ + "--cd=\"${workspaceFolder}\"", + "--se=\"build/${config:program_file}\"", + "--symbols=build/${config:symbol_file}", + "-x=\"${workspaceFolder}/.vscode/flash.gdb\"", + "--ex=\"flash_m4 ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", + "--batch" + ], + "group": "build", + "problemMatcher": [], + "dependsOn":["build"] + }, + { + "label": "flash & run", + "type": "shell", + "command": "arm-none-eabi-gdb", "args": [ "--cd=\"${workspaceFolder}\"", "--se=\"build/${config:program_file}\"", "--symbols=build/${config:symbol_file}", "-x=\"${workspaceFolder}/.vscode/flash.gdb\"", - "--ex=\"flash_m4 ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", + "--ex=\"flash_m4_run ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", "--batch" ], "group": "build", diff --git a/MaximSDK/New_Project/.vscode/flash.gdb b/MaximSDK/New_Project/.vscode/flash.gdb index 2d86f86..fc627ae 100644 --- a/MaximSDK/New_Project/.vscode/flash.gdb +++ b/MaximSDK/New_Project/.vscode/flash.gdb @@ -5,3 +5,11 @@ define flash_m4 compare-sections monitor reset halt end + +define flash_m4_run + set architecture armv7e-m + target remote | openocd -c "gdb_port pipe;log_output flash.log" -s $arg0/scripts -f interface/$arg1 -f target/$arg2 -c "init; reset halt" + load + compare-sections + monitor resume +end \ No newline at end of file diff --git a/MaximSDK/New_Project/.vscode/tasks.json b/MaximSDK/New_Project/.vscode/tasks.json index 5eef671..d44ace3 100644 --- a/MaximSDK/New_Project/.vscode/tasks.json +++ b/MaximSDK/New_Project/.vscode/tasks.json @@ -26,12 +26,28 @@ "label": "flash", "type": "shell", "command": "arm-none-eabi-gdb", + "args": [ + "--cd=\"${workspaceFolder}\"", + "--se=\"build/${config:program_file}\"", + "--symbols=build/${config:symbol_file}", + "-x=\"${workspaceFolder}/.vscode/flash.gdb\"", + "--ex=\"flash_m4 ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", + "--batch" + ], + "group": "build", + "problemMatcher": [], + "dependsOn":["build"] + }, + { + "label": "flash & run", + "type": "shell", + "command": "arm-none-eabi-gdb", "args": [ "--cd=\"${workspaceFolder}\"", "--se=\"build/${config:program_file}\"", "--symbols=build/${config:symbol_file}", "-x=\"${workspaceFolder}/.vscode/flash.gdb\"", - "--ex=\"flash_m4 ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", + "--ex=\"flash_m4_run ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", "--batch" ], "group": "build", diff --git a/MaximSDK/Template/.vscode/flash.gdb b/MaximSDK/Template/.vscode/flash.gdb index 2d86f86..fc627ae 100644 --- a/MaximSDK/Template/.vscode/flash.gdb +++ b/MaximSDK/Template/.vscode/flash.gdb @@ -5,3 +5,11 @@ define flash_m4 compare-sections monitor reset halt end + +define flash_m4_run + set architecture armv7e-m + target remote | openocd -c "gdb_port pipe;log_output flash.log" -s $arg0/scripts -f interface/$arg1 -f target/$arg2 -c "init; reset halt" + load + compare-sections + monitor resume +end \ No newline at end of file diff --git a/MaximSDK/Template/.vscode/tasks.json b/MaximSDK/Template/.vscode/tasks.json index 5eef671..d44ace3 100644 --- a/MaximSDK/Template/.vscode/tasks.json +++ b/MaximSDK/Template/.vscode/tasks.json @@ -26,12 +26,28 @@ "label": "flash", "type": "shell", "command": "arm-none-eabi-gdb", + "args": [ + "--cd=\"${workspaceFolder}\"", + "--se=\"build/${config:program_file}\"", + "--symbols=build/${config:symbol_file}", + "-x=\"${workspaceFolder}/.vscode/flash.gdb\"", + "--ex=\"flash_m4 ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", + "--batch" + ], + "group": "build", + "problemMatcher": [], + "dependsOn":["build"] + }, + { + "label": "flash & run", + "type": "shell", + "command": "arm-none-eabi-gdb", "args": [ "--cd=\"${workspaceFolder}\"", "--se=\"build/${config:program_file}\"", "--symbols=build/${config:symbol_file}", "-x=\"${workspaceFolder}/.vscode/flash.gdb\"", - "--ex=\"flash_m4 ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", + "--ex=\"flash_m4_run ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", "--batch" ], "group": "build", From 22f2f03551a80507ba619f4616e41e51575734e0 Mon Sep 17 00:00:00 2001 From: Jake Carter Date: Mon, 13 Jun 2022 14:39:56 -0500 Subject: [PATCH 04/55] Make template search independent of cwd --- generate.py | 101 +++++----------------------------------------------- 1 file changed, 9 insertions(+), 92 deletions(-) diff --git a/generate.py b/generate.py index 91470fb..6a539f1 100644 --- a/generate.py +++ b/generate.py @@ -40,8 +40,12 @@ from utils import parse_json from sdk import * +# Get location of this file. +# Need to use this so that template look-ups are decoupled from the caller's working directory +here = Path(__file__).parent + # Load default values for template from master "inject" folder so that we don't have to maintain multiple copies of the settings -defaults = parse_json("MaximSDK/Inject/.vscode/settings.json") +defaults = parse_json(here.joinpath("MaximSDK/Inject/.vscode/settings.json")) whitelist = [ "MAX32650", @@ -79,12 +83,15 @@ def create_project( make_path: str = defaults["MAKE_PATH"] ): - template_dir = os.path.abspath(os.path.join("MaximSDK", "Template")) # Where to find the VS Code template directory relative to this script + template_dir = here.joinpath("MaximSDK/Template").absolute() # Where to find the VS Code template directory relative to this script template_prefix = "template" # Filenames beginning with this will have substitution if not os.path.exists(template_dir): raise(Exception(f"Failed to find project template folder '{template_dir}'. Check the location and existence of these files.")) + # Copy readme into template directory so the latest version gets pushed to project folders + shutil.copy(here.joinpath("readme.md"), str(Path(template_dir).joinpath(".vscode/"))) + tmp = [] # Work-horse list, linter be nice if defines != []: # Parse defines... @@ -164,93 +171,3 @@ def create_project( shutil.copy(os.path.join(directory, file), out_path) os.chmod(out_path, 0o764) #print(f"Wrote {os.path.basename(file)}") # Uncomment to debug - -@time_me -def populate_maximsdk(target_os, maxim_path, overwrite=True): - # Copy readme into template directory - shutil.copy("readme.md", str(Path("MaximSDK/Template/.vscode/"))) - - print(f"Scanning {maxim_path}...") - - # Check for cache file - cachefile = Path(maxim_path).joinpath(".cache").joinpath("msdk") - - if (cachefile.exists()): - print("Loading from cache file...") - sdk = SDK.thaw(cachefile) - else: - sdk = SDK.from_search(maxim_path) - sdk.freeze(cachefile) - - count = 0 - for example in sdk.examples: - #print(f"Generating VSCode-Maxim project for {example.path} ...") - - # Common options - _path = example.path - _target = example.target.name - _board = example.target.boards[0].name # Default to first board in list - for b in example.target.boards: - # Use EvKit_V1 if possible. - # Some boards modify EvKit_V1 (ex: QN_EvKit_V1) - if "EvKit_V1" in b.name: _board = b.name - - _program_file="${config:project_name}-combined.elf" if example.riscv else defaults["PROGRAM_FILE"] - _symbol_file="${config:project_name}.elf" if example.riscv else defaults["SYMBOL_FILE"] - _ipaths = [] + defaults["C_CPP.DEFAULT.INCLUDEPATH"] - _vpaths = [] + defaults["C_CPP.DEFAULT.BROWSE.PATH"] - _defines = [] + defaults["C_CPP.DEFAULT.DEFINES"] - - # Add include and browse paths for the libraries that this example uses - for l in example.libs: - for ipath in l.get_ipaths(example.target.name): - _ipaths.append( - str(ipath.as_posix()). - replace(sdk.maxim_path.as_posix(), "${config:MAXIM_PATH}"). - replace(example.target.name, "${config:target}") - ) - - for vpath in l.get_vpaths(example.target.name): - _vpaths.append( - str(vpath.as_posix()). - replace(sdk.maxim_path.as_posix(), "${config:MAXIM_PATH}"). - replace(example.target.name, "${config:target}") - ) - - if l.defines is not None: - _defines += l.defines - - # Linux OpenOCD .cfg files are case senstive. Need to hard-code a lowercase value. - _m4_ocd_target_file = f"{str.lower(example.target.name)}.cfg" if target_os == "Linux" else defaults["M4_OCD_TARGET_FILE"] - - # RPi Tools - if target_os == "RPi": - _arm_gcc_path = "${config:MAXIM_PATH}/Tools/GNUTools/gcc-arm-none-eabi/${config:v_Arm_GCC}" - _xpack_gcc_path = "${config:MAXIM_PATH}/Tools/xPack/riscv-none-embed-gcc/${config:v_xPack_GCC}" - _v_arm_gcc = "10.3.1" - _v_xpack_gcc = "10.2.0-1.2" - else: - _arm_gcc_path = defaults["ARM_GCC_PATH"] - _xpack_gcc_path = defaults["XPACK_GCC_PATH"] - _v_arm_gcc = defaults["V_ARM_GCC"] - _v_xpack_gcc = defaults["V_XPACK_GCC"] - - create_project( - _path, - _target, - _board, - program_file=_program_file, - symbol_file=_symbol_file, - i_paths=_ipaths, - v_paths=_vpaths, - m4_ocd_target_file=_m4_ocd_target_file, - arm_gcc_path=_arm_gcc_path, - xpack_gcc_path=_xpack_gcc_path, - v_arm_gcc=_v_arm_gcc, - v_xpack_gcc=_v_xpack_gcc, - defines = _defines - ) - - count += 1 - - print(f"Done! Created {count} projects.") From 7e99c79774953335af4cd7a693c6241259091649 Mon Sep 17 00:00:00 2001 From: Jake Carter Date: Mon, 13 Jun 2022 22:37:15 -0500 Subject: [PATCH 05/55] Improve generator performance, move SDK modules out - Match generator with AI8x implementation - Template replace on one single string instead of iterating line by line - Move SDK modules out of repo. These live in msdk-internal now --- generate.py | 99 ++++++++-------- sdk.py | 325 ---------------------------------------------------- utils.py | 39 +++++-- vscmxm.py | 94 --------------- 4 files changed, 79 insertions(+), 478 deletions(-) delete mode 100644 sdk.py delete mode 100644 vscmxm.py diff --git a/generate.py b/generate.py index 6a539f1..9a20fc6 100644 --- a/generate.py +++ b/generate.py @@ -34,10 +34,8 @@ import os import shutil -import argparse -import platform -from subprocess import run -from utils import parse_json +import stat +from .utils import parse_json from sdk import * # Get location of this file. @@ -82,38 +80,40 @@ def create_project( xpack_gcc_path: str = defaults["XPACK_GCC_PATH"], make_path: str = defaults["MAKE_PATH"] ): + """ + Generates Visual Studio Code project files from the VSCode-Maxim project. + """ - template_dir = here.joinpath("MaximSDK/Template").absolute() # Where to find the VS Code template directory relative to this script - template_prefix = "template" # Filenames beginning with this will have substitution + out_path = Path(out_path) - if not os.path.exists(template_dir): - raise(Exception(f"Failed to find project template folder '{template_dir}'. Check the location and existence of these files.")) + template_dir = here.joinpath("MaximSDK/Template").resolve() + # Where to find the VS Code template directory relative to this script - # Copy readme into template directory so the latest version gets pushed to project folders - shutil.copy(here.joinpath("readme.md"), str(Path(template_dir).joinpath(".vscode/"))) + template_prefix = "template" + # Filenames beginning with this will have substitution + + if not template_dir.exists(): + raise Exception(f"Failed to find project template folder '{template_dir}'.") tmp = [] # Work-horse list, linter be nice + # Parse compiler definitions... if defines != []: - # Parse defines... - # --- tmp = defines tmp = list(map(lambda s: s.strip("-D"), tmp)) # VS Code doesn't want -D - tmp = list(map("\"{0}\"".format, tmp)) # Surround with quotes + tmp = list(map(lambda s: f"\"{s}\"", tmp)) # Surround with quotes defines_parsed = ",\n ".join(tmp) # csv, newline, and tab (w/ spaces) alignment - # --- else: - defines_parsed = ",\n ".join(defines) + defines_parsed = "" # Parse include paths... tmp = i_paths - tmp = list(map("\"{0}\"".format, tmp)) # Surround with quotes + tmp = list(map(lambda s: f"\"{s}\"", tmp)) # Surround with quotes i_paths_parsed = ",\n ".join(tmp).replace(target, "${config:target}").replace("\\", "/") - # Parse browse paths... tmp = v_paths - tmp = list(map("\"{0}\"".format, tmp)) # Surround with quotes - v_paths_parsed = ",\n ".join(tmp).replace(target, "${config:target}").replace("\\", "/") # csv, newline, and tab alignment + tmp = list(map(lambda s: f"\"{s}\"", tmp)) # Surround with quotes + v_paths_parsed = ",\n ".join(tmp).replace(target, "${config:target}").replace("\\", "/") # Create template... for directory, _, files in sorted(os.walk(template_dir)): @@ -121,13 +121,13 @@ def create_project( # but excluding '.' and '..'), yields a 3-tuple (dirpath, dirnames, filenames) # Get current directory relative to root - rel_dir = os.path.relpath(directory, template_dir) + rel_dir = Path(directory).relative_to(Path(template_dir)) # Figure out whether we're in a subfolder of the template directory, # and form output path accordingly. - if rel_dir != '.': + if rel_dir != Path('.'): # We're in a sub-folder. Replicate this folder in the output directory - out_path = os.path.join(out_path, rel_dir) + out_path = Path(out_path).joinpath(rel_dir) os.makedirs(out_path, exist_ok=True) else: # We're in the root template folder, no need to create a directory. @@ -139,35 +139,36 @@ def create_project( if file.startswith(template_prefix): # There is a template file to copy. Perform string substitution in output file. - out_loc = os.path.join(out_path, file[len(template_prefix):]) - with open(os.path.join(directory, file)) as in_file, \ - open(out_loc, "w+") as out_file: - for line in in_file.readlines(): - out_file.write( - line.replace("##__TARGET__##", target.upper()). - replace("##__BOARD__##", board). - replace("##__PROGRAM_FILE__##", program_file). - replace("##__SYMBOL_FILE__##", symbol_file). - replace("##__M4_OCD_INTERFACE_FILE__##", m4_ocd_interface_file). - replace("##__M4_OCD_TARGET_FILE__##", m4_ocd_target_file). - replace("##__RV_OCD_INTERFACE_FILE__##", rv_ocd_interface_file). - replace("##__RV_OCD_TARGET_FILE__##", rv_ocd_target_file). - replace("\"##__I_PATHS__##\"", i_paths_parsed). # Next 3 are surrounded in quotes in the template because of the linter - replace("\"##__DEFINES__##\"", defines_parsed). - replace("\"##__V_PATHS__##\"", v_paths_parsed). - replace("##__V_ARM_GCC__##", v_arm_gcc). - replace("##__V_XPACK_GCC__##", v_xpack_gcc). - replace("##__OCD_PATH__##", ocd_path). - replace("##__ARM_GCC_PATH__##", arm_gcc_path). - replace("##__XPACK_GCC_PATH__##", xpack_gcc_path). - replace("##__MAKE_PATH__##", make_path) - ) - - os.chmod(out_loc, 0o764) + out_loc = Path(out_path).joinpath(file[len(template_prefix):]) # Remove prefix + template = Path(directory).joinpath(file) + with open(template, 'r', encoding="UTF-8") as in_file, \ + open(out_loc, "w+", encoding="UTF-8") as out_file: + content = in_file.read() + out_file.write( + content.replace("##__TARGET__##", target.upper()). + replace("##__BOARD__##", board). + replace("##__PROGRAM_FILE__##", program_file). + replace("##__SYMBOL_FILE__##", symbol_file). + replace("##__M4_OCD_INTERFACE_FILE__##", m4_ocd_interface_file). + replace("##__M4_OCD_TARGET_FILE__##", m4_ocd_target_file). + replace("##__RV_OCD_INTERFACE_FILE__##", rv_ocd_interface_file). + replace("##__RV_OCD_TARGET_FILE__##", rv_ocd_target_file). + replace("\"##__I_PATHS__##\"", i_paths_parsed). + replace("\"##__DEFINES__##\"", defines_parsed). + replace("\"##__V_PATHS__##\"", v_paths_parsed). + replace("##__V_ARM_GCC__##", v_arm_gcc). + replace("##__V_XPACK_GCC__##", v_xpack_gcc). + replace("##__OCD_PATH__##", ocd_path). + replace("##__ARM_GCC_PATH__##", arm_gcc_path). + replace("##__XPACK_GCC_PATH__##", xpack_gcc_path). + replace("##__MAKE_PATH__##", make_path) + ) + + os.chmod(out_loc, stat.S_IRWXU | stat.S_IRGRP | stat.S_IWGRP | stat.S_IROTH) # print(f"Wrote {os.path.basename(out_loc)}") # Uncomment to debug else: # There is a non-template file to copy shutil.copy(os.path.join(directory, file), out_path) - os.chmod(out_path, 0o764) - #print(f"Wrote {os.path.basename(file)}") # Uncomment to debug + os.chmod(out_path, stat.S_IRWXU | stat.S_IRGRP | stat.S_IWGRP | stat.S_IROTH) + # print(f"Wrote {os.path.basename(file)}") # Uncomment to debug \ No newline at end of file diff --git a/sdk.py b/sdk.py deleted file mode 100644 index 3551e25..0000000 --- a/sdk.py +++ /dev/null @@ -1,325 +0,0 @@ -""" -/******************************************************************************* -* Copyright (C) 2022 Maxim Integrated Products, Inc., All Rights Reserved. -* -* Permission is hereby granted, free of charge, to any person obtaining a -* copy of this software and associated documentation files (the "Software"), -* to deal in the Software without restriction, including without limitation -* the rights to use, copy, modify, merge, publish, distribute, sublicense, -* and/or sell copies of the Software, and to permit persons to whom the -* Software is furnished to do so, subject to the following conditions: -* -* The above copyright notice and this permission notice shall be included -* in all copies or substantial portions of the Software. -* -* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -* IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES -* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -* OTHER DEALINGS IN THE SOFTWARE. -* -* Except as contained in this notice, the name of Maxim Integrated -* Products, Inc. shall not be used except as stated in the Maxim Integrated -* Products, Inc. Branding Policy. -* -* The mere transfer of this software does not imply any licenses -* of trade secrets, proprietary technology, copyrights, patents, -* trademarks, maskwork rights, or any other form of intellectual -* property whatsoever. Maxim Integrated Products, Inc. retains all -* ownership rights. -*******************************************************************************/ -""" - -from dataclasses import dataclass -from typing import Generator -from utils import * -import json -import pickle -import re -import os -from copy import * - -def get_baseitems(g: Generator): - """ - Get a list of items inside of a generator. Returns base string names only, ie. "myfile.txt" or "Examples" for a directory. - - Used to simplify searching for sub-items so that statements like "if i in get_baseitems(some generator/list of paths): ..." can be written more easily - """ - return list(map(lambda i: i.name, g)) - -@dataclass -class Target(): - name: str - boards: list - -@dataclass -class Adapter(): - name: str - cfg_file: Path - -@dataclass -class Board(): - name: str - target: Target - adapters: list - -@dataclass -class Library(): - name: str - path: Path - ipaths: tuple - vpaths: tuple - whitelist: bool - targets: tuple - defines: tuple - - def from_libinfo(filepath): - """ - Returns a Library instance instantiated from a json info file - """ - filepath = Path(filepath) - with open(filepath, "r") as f: - libinfo = json.load(f) - keys = libinfo.keys() - assert "name" in keys and "ipaths" in keys and "vpaths" in keys and "whitelist" in keys, f"{filepath} Bad libinfo.json file!" - - _name = libinfo["name"] - _path = filepath.parent - _ipaths = tuple(i for i in libinfo["ipaths"]) - _vpaths = tuple(i for i in libinfo["vpaths"]) - _whitelist = libinfo["whitelist"] - _targets = tuple(i for i in libinfo["targets"]) if "targets" in keys else None - _defines = libinfo["defines"] if "defines" in keys else None - - return Library( - _name, - _path, - _ipaths, - _vpaths, - _whitelist, - _targets, - _defines - ) - - def get_ipaths(self, target=None): - """ - Returns a tuple of include paths for the library. - If "target" is specified, the return generator will include paths specific to that target in addition to the common paths. - If the library is whitelisted (Library.whitelist is True), "target" is specified, and there is no matching - entry in the library, this function will return an empty tuple. - """ - target_info = None - - if self.whitelist is True and target is None: - return () # Return empty tuple - else: - _ipaths = list(map(lambda p: self.path.joinpath(p), self.ipaths)) # Common paths - - if target is not None and self.targets is not None: # Search for match - for i in self.targets: - if ("name" in i.keys() and i["name"] == target): - target_info = i - - if target_info is not None and "ipaths" in target_info.keys(): - _ipaths += list(map(lambda p: self.path.joinpath(p), target_info["ipaths"])) # Target-specific paths - - return tuple(_ipaths) - - def get_hfiles(self, target=None): - hfiles = [] - for ipath in self.get_ipaths(target): - hfiles += ipath.rglob("*.h") - return tuple(get_baseitems(hfiles)) - - def get_vpaths(self, target: str): - """ - Returns a tuple of browse paths for the library. - If "target" is specified, the return generator will include paths specific to that target in addition to the common paths. - If the library is whitelisted (Library.whitelist is True), "target" is specified, and there is no matching - entry in the library, this function will return an empty tuple. - """ - target_info = None - - if self.whitelist is True and target is None: - return () # Return empty tuple - else: - _vpaths = list(map(lambda p: self.path.joinpath(p), self.vpaths)) # Common paths - - if target is not None and self.targets is not None: # Search for match - for i in self.targets: - if ("name" in i.keys() and i["name"] == target): - target_info = i - - if target_info is not None and "vpaths" in target_info.keys(): - _vpaths += list(map(lambda p: self.path.joinpath(p), target_info["vpaths"])) # Target-specific paths - - return tuple(_vpaths) - - def get_vfiles(self, target): - vfiles = [] - for vpath in self.get_vpaths(target): - vfiles += vpath.rglob("*.c") - return tuple(get_baseitems(vfiles)) - -@dataclass -class Example(): - name: str - path: Path - target: Target - riscv: False - boards: list - hfiles: list - libs: list - -class SDK(): - @time_me - def __init__(self, maxim_path, targets, boards, libs, examples): - self.maxim_path = Path(maxim_path).absolute() - self.targets = targets - self.boards = boards - self.libs = libs - self.examples = examples - - @time_me - def from_search(maxim_path): - # Populate initial info - maxim_path = Path(maxim_path).absolute() - (targets, boards) = get_targets_and_boards(maxim_path) - targets = targets - boards = boards - libs = get_libraries(maxim_path) - examples = get_examples(maxim_path, targets) - - # Match examples to libraries - for e in examples: - for l in libs: - lib_hfiles = l.get_hfiles(e.target.name) - for hfile in e.hfiles: - if hfile in lib_hfiles and l not in e.libs: - e.libs.append(l) - - return SDK(maxim_path, targets, boards, libs, examples) - - @time_me - def freeze(self, filename): - if not Path(filename).exists(): - os.mkdir(Path(filename).parent) - - with open(filename, "wb") as f: - pickle.dump(self, f) - - @time_me - def thaw(filename): - with open(str(filename), "rb") as f: - tmp = pickle.load(f) - maxim_path = tmp.maxim_path - targets = tmp.targets - boards = tmp.boards - libs = tmp.libs - examples = tmp.examples - - return SDK(maxim_path, targets, boards, libs, examples) - -@time_me -def get_targets_and_boards(maxim_path): - maxim_path = Path(maxim_path).absolute() - boards_dir = maxim_path.joinpath("Libraries", "Boards") - - # Detect targets and their supported boards - targets = [] - boards = [] - for target_dir in boards_dir.iterdir(): - t = Target(target_dir.name, []) - - board_dirs = list(target_dir.iterdir()) - if target_dir.joinpath("Include").exists(): board_dirs.remove(target_dir.joinpath("Include")) - if target_dir.joinpath("Source").exists(): board_dirs.remove(target_dir.joinpath("Source")) - - for board_dir in board_dirs: - b = Board(board_dir.name, t, []) - adapterinfo_file = board_dir.joinpath("adapterinfo.json") - if adapterinfo_file.exists(): - with open(adapterinfo_file) as f: - adapterinfo = json.load(f) - for a in adapterinfo: b.adapters.append(Adapter(a["name"], a["cfg_file"])) - - t.boards.append(b) - boards.append(b) - - targets.append(t) - - return (targets, boards) - -@time_me -def get_examples(maxim_path, targets: list): - maxim_path = Path(maxim_path).absolute() - examples_dir = maxim_path.joinpath("Examples") - - # Locate examples for each target - examples = [] - for t in targets: - assert type(t) is Target - for Makefile in examples_dir.joinpath(t.name).rglob("Makefile"): - e = Example( - Makefile.parent.name, - Makefile.parent, - t, - "Makefile.RISCV" in get_baseitems(Makefile.parent.iterdir()), - [], # Filling these in later... - [], - [] - ) - - exampleinfo_file = Makefile.parent.joinpath("exampleinfo.json") - - if exampleinfo_file.exists(): - with open(exampleinfo_file): - exampleinfo = json.load(exampleinfo_file) - e.boards = t.boards if exampleinfo["boards"] == "all" else exampleinfo["boards"] - - # Get all non-standard header files used in the example source code - for cfile in e.path.rglob("*.c"): - hfiles = get_hfiles(cfile) - for hfile in hfiles: - if hfile not in e.hfiles: - e.hfiles.append(hfile) - - examples.append(e) - - return tuple(examples) - -def get_hfiles(filepath): - hfiles = [] - try: - with open(filepath, "r") as c: - lines = c.readlines() - for l in lines: - if "#include" in l: - # Search for non-standard #includes - ie. #include "myheader.h" - # [\"] means character matching " - # \S+ is equivalent to %s in scanf - # Use raw string as recommended by Python docs (r"...") - m = re.search(r"[\"]\S+.h[\"]", l) - if m is not None: - mstring = l[m.start() + 1:m.end() - 1] # strip quotes - if mstring not in hfiles: hfiles.append(mstring) - except: - print(f"Failed to get header files from {filepath}") - - return tuple(hfiles) - -@time_me -def get_libraries(maxim_path): - maxim_path = Path(maxim_path).absolute() - libs_path = maxim_path.joinpath("Libraries") - - libs = [] - - for lib_path in libs_path.iterdir(): - info_file = lib_path.joinpath("libinfo.json") - if info_file.exists(): - libs.append(Library.from_libinfo(info_file)) - - return tuple(libs) \ No newline at end of file diff --git a/utils.py b/utils.py index c595b54..dc14120 100644 --- a/utils.py +++ b/utils.py @@ -32,10 +32,35 @@ *******************************************************************************/ """ -from dataclasses import dataclass +from collections.abc import MutableMapping +from string import Template import json -from dataclasses import dataclass -from pathlib import Path + +class UpperDict(MutableMapping): + def __init__(self, *args, **kwargs): + self.d = dict() + self.update(dict(*args, **kwargs)) + + def _parse_key(self, key): + return str(key).upper().replace(".", "_") + + def __setitem__(self, key, value) -> None: + self.d[self._parse_key(key)] = value + + def __getitem__(self, key): + return self.d[self._parse_key(key)] + + def __delitem__(self, key) -> None: + del self.d[self._parse_key(key)] + + def __iter__(self): + return iter(self.d) + + def __len__(self): + return len(self.d) + +class MSDKTemplate(Template): + delimiter = "##__" def parse_json(filename): """ @@ -43,13 +68,7 @@ def parse_json(filename): """ f = open(filename, "r") d = json.load(f) - - # Convert key values to uppercase for easier template parsing - keys = list(d.keys()) # Keys are changing on the fly, so can't use a view object - for k in keys: - d[k.upper()] = d.pop(k) - - return d + return UpperDict(d) # Timer wrapper function import time diff --git a/vscmxm.py b/vscmxm.py deleted file mode 100644 index 38ad7fc..0000000 --- a/vscmxm.py +++ /dev/null @@ -1,94 +0,0 @@ -""" -/******************************************************************************* -* Copyright (C) 2022 Maxim Integrated Products, Inc., All Rights Reserved. -* -* Permission is hereby granted, free of charge, to any person obtaining a -* copy of this software and associated documentation files (the "Software"), -* to deal in the Software without restriction, including without limitation -* the rights to use, copy, modify, merge, publish, distribute, sublicense, -* and/or sell copies of the Software, and to permit persons to whom the -* Software is furnished to do so, subject to the following conditions: -* -* The above copyright notice and this permission notice shall be included -* in all copies or substantial portions of the Software. -* -* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -* IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES -* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -* OTHER DEALINGS IN THE SOFTWARE. -* -* Except as contained in this notice, the name of Maxim Integrated -* Products, Inc. shall not be used except as stated in the Maxim Integrated -* Products, Inc. Branding Policy. -* -* The mere transfer of this software does not imply any licenses -* of trade secrets, proprietary technology, copyrights, patents, -* trademarks, maskwork rights, or any other form of intellectual -* property whatsoever. Maxim Integrated Products, Inc. retains all -* ownership rights. -*******************************************************************************/ -""" -import argparse -import platform -import os -from generate import * - -# Set up command-line args -# --- -parser = argparse.ArgumentParser(description="VSCode-Maxim command line tool.") - -parser.add_argument("--os", type=str, choices=["Windows", "Linux", "RPi"], help="(Optional) Operating system to generate the project files for. If not specified the script will auto-detect.") -parser.add_argument("--maxim_path", type=str, help="(Optional) Location of the MaximSDK. If this is not specified then the script will attempt to use the MAXIM_PATH environment variable.") - -cmd_parser = parser.add_subparsers(dest="cmd", help="sub-command", required=True) - -SDK_parser = cmd_parser.add_parser("SDK", help="Populate a MaximSDK installation's example projects with VS Code project files.") - -new_parser = cmd_parser.add_parser("new", help="Create a new VSCode-Maxim project") -new_parser.add_argument("location", help="Root location of the project to create. The project will be created in a new folder located at /.") -new_parser.add_argument("name", help="Name of the project. The project will be created in a new folder located at /.") -new_parser.add_argument("target", help="Target microcontroller for the project", choices=whitelist) -new_parser.add_argument("board", help="Target board to use for the project.") -# --- - -if __name__ == "__main__": - args = parser.parse_args() - - # Auto-detect OS - if args.os is None: - current_os = platform.platform() - if "Windows" in current_os: args.os = "Windows" - elif "Linux" in current_os: args.os = "Linux" - else: - print(f"{current_os} is not supported at this time.") - exit() - - # Auto-detect MAXIM_PATH - if args.maxim_path is None: - # Check environment variable - print("Checking MAXIM_PATH environment variable..") - if "MAXIM_PATH" in os.environ.keys(): - args.maxim_path = os.environ["MAXIM_PATH"] - print(f"MaximSDK located at {args.maxim_path}") - - else: - print("Failed to locate the MaximSDK... Please specify --maxim_path manually.") - exit() - else: - # Parse to abs path - args.maxim_path = os.path.abspath(args.maxim_path) - - # Process command - if args.cmd == "SDK": - print(f"Generating .vscode projects for all examples in SDK located at {args.maxim_path}") - populate_maximsdk(target_os=args.os, maxim_path=args.maxim_path) - - elif args.cmd == "new": - pass - # TODO: new project generator - - - \ No newline at end of file From e2f3dc0409ce9c303930a88e669be3eb987b6fdb Mon Sep 17 00:00:00 2001 From: Jake Carter Date: Thu, 16 Jun 2022 14:18:45 -0500 Subject: [PATCH 06/55] Add overwrite option and check for modifications --- generate.py | 86 ++++++++++++++++++++++++++++++++++------------------- utils.py | 44 ++++++++++++++++++++++++++- 2 files changed, 99 insertions(+), 31 deletions(-) diff --git a/generate.py b/generate.py index 9a20fc6..57c3e62 100644 --- a/generate.py +++ b/generate.py @@ -35,8 +35,8 @@ import os import shutil import stat -from .utils import parse_json -from sdk import * +from utils import * +from pathlib import Path # Get location of this file. # Need to use this so that template look-ups are decoupled from the caller's working directory @@ -64,6 +64,7 @@ def create_project( out_path: str, target: str, board: str, + overwrite = False, program_file: str = defaults["PROGRAM_FILE"], symbol_file: str = defaults["SYMBOL_FILE"], m4_ocd_interface_file: str = defaults["M4_OCD_INTERFACE_FILE"], @@ -78,7 +79,7 @@ def create_project( ocd_path: str = defaults["OCD_PATH"], arm_gcc_path: str = defaults["ARM_GCC_PATH"], xpack_gcc_path: str = defaults["XPACK_GCC_PATH"], - make_path: str = defaults["MAKE_PATH"] + make_path: str = defaults["MAKE_PATH"], ): """ Generates Visual Studio Code project files from the VSCode-Maxim project. @@ -115,6 +116,7 @@ def create_project( tmp = list(map(lambda s: f"\"{s}\"", tmp)) # Surround with quotes v_paths_parsed = ",\n ".join(tmp).replace(target, "${config:target}").replace("\\", "/") + updated = [] # Create template... for directory, _, files in sorted(os.walk(template_dir)): # ^ For each directory in the directory tree rooted at top (including top itself, @@ -133,42 +135,66 @@ def create_project( # We're in the root template folder, no need to create a directory. pass + # Any files to copy? for file in sorted(files): if file.startswith(template_prefix): # There is a template file to copy. Perform string substitution in output file. - out_loc = Path(out_path).joinpath(file[len(template_prefix):]) # Remove prefix + out_file = Path(out_path).joinpath(file[len(template_prefix):]) # Remove prefix template = Path(directory).joinpath(file) - with open(template, 'r', encoding="UTF-8") as in_file, \ - open(out_loc, "w+", encoding="UTF-8") as out_file: - content = in_file.read() - out_file.write( - content.replace("##__TARGET__##", target.upper()). - replace("##__BOARD__##", board). - replace("##__PROGRAM_FILE__##", program_file). - replace("##__SYMBOL_FILE__##", symbol_file). - replace("##__M4_OCD_INTERFACE_FILE__##", m4_ocd_interface_file). - replace("##__M4_OCD_TARGET_FILE__##", m4_ocd_target_file). - replace("##__RV_OCD_INTERFACE_FILE__##", rv_ocd_interface_file). - replace("##__RV_OCD_TARGET_FILE__##", rv_ocd_target_file). - replace("\"##__I_PATHS__##\"", i_paths_parsed). - replace("\"##__DEFINES__##\"", defines_parsed). - replace("\"##__V_PATHS__##\"", v_paths_parsed). - replace("##__V_ARM_GCC__##", v_arm_gcc). - replace("##__V_XPACK_GCC__##", v_xpack_gcc). - replace("##__OCD_PATH__##", ocd_path). - replace("##__ARM_GCC_PATH__##", arm_gcc_path). - replace("##__XPACK_GCC_PATH__##", xpack_gcc_path). + + content = None + with open(template, 'r', encoding="UTF-8") as f: + content = f.read() + content = content.replace("##__TARGET__##", target.upper()). \ + replace("##__BOARD__##", board). \ + replace("##__PROGRAM_FILE__##", program_file). \ + replace("##__SYMBOL_FILE__##", symbol_file). \ + replace("##__M4_OCD_INTERFACE_FILE__##", m4_ocd_interface_file). \ + replace("##__M4_OCD_TARGET_FILE__##", m4_ocd_target_file). \ + replace("##__RV_OCD_INTERFACE_FILE__##", rv_ocd_interface_file). \ + replace("##__RV_OCD_TARGET_FILE__##", rv_ocd_target_file). \ + replace("\"##__I_PATHS__##\"", i_paths_parsed). \ + replace("\"##__DEFINES__##\"", defines_parsed). \ + replace("\"##__V_PATHS__##\"", v_paths_parsed). \ + replace("##__V_ARM_GCC__##", v_arm_gcc). \ + replace("##__V_XPACK_GCC__##", v_xpack_gcc). \ + replace("##__OCD_PATH__##", ocd_path). \ + replace("##__ARM_GCC_PATH__##", arm_gcc_path). \ + replace("##__XPACK_GCC_PATH__##", xpack_gcc_path). \ replace("##__MAKE_PATH__##", make_path) - ) - os.chmod(out_loc, stat.S_IRWXU | stat.S_IRGRP | stat.S_IWGRP | stat.S_IROTH) - # print(f"Wrote {os.path.basename(out_loc)}") # Uncomment to debug + write = True + if out_file.exists(): + if not overwrite or compare_content(content, out_file): + write = False + + if write: + with open(out_file, "w+", encoding="UTF-8") as f: + f.write(content) + os.chmod(out_file, stat.S_IRWXU | stat.S_IRGRP | stat.S_IWGRP | stat.S_IROTH) + if out_file not in updated: + updated.append(out_file) + + # print(f"Wrote {os.path.basename(out_loc)}") # Uncomment to debug else: # There is a non-template file to copy - shutil.copy(os.path.join(directory, file), out_path) - os.chmod(out_path, stat.S_IRWXU | stat.S_IRGRP | stat.S_IWGRP | stat.S_IROTH) - # print(f"Wrote {os.path.basename(file)}") # Uncomment to debug \ No newline at end of file + in_file = Path(directory).joinpath(file) + out_file = Path(out_path).joinpath(file) + + write = True + if out_file.exists(): + if not overwrite or (hash_file(in_file) == hash_file(out_file)): + write = False + + if write: + shutil.copy(in_file, out_path) + os.chmod(out_file, stat.S_IRWXU | stat.S_IRGRP | stat.S_IWGRP | stat.S_IROTH) + if out_file not in updated: + updated.append(out_file) + # print(f"Wrote {os.path.basename(file)}") # Uncomment to debug + + return (len(updated) > 0) \ No newline at end of file diff --git a/utils.py b/utils.py index dc14120..dca96e9 100644 --- a/utils.py +++ b/utils.py @@ -35,6 +35,9 @@ from collections.abc import MutableMapping from string import Template import json +from pathlib import Path +import hashlib +import os class UpperDict(MutableMapping): def __init__(self, *args, **kwargs): @@ -83,4 +86,43 @@ def wrapper(*args, **kwargs): return res - return wrapper \ No newline at end of file + return wrapper + +def hash(val): + if not isinstance(val, bytes): + val = bytes(val, encoding="utf-8") + return hashlib.sha1(val).digest() + +def hash_file(filepath): + return hash(open(Path(filepath), 'rb').read()) + +def hash_folder(folderpath) -> bytes: + folderpath = Path(folderpath) + result = b'' + for dir, subdirs, files in os.walk(folderpath): + for f in sorted(files): + file_path = Path(dir).joinpath(f) + relative_path = file_path.relative_to(folderpath) + + result = hash(result + hash_file(file_path) + bytes(str(relative_path), encoding="utf-8")) + + return result + +def compare_content(content: str, file: Path) -> bool: + """ + Compare the 'content' string to the existing content in 'file'. + + It seems that when a file gets written there may be some metadata that is affecting + the hash functions. As a result, this function writes 'content' to a temporary file, + then checks for equality using the temp file. + """ + if not file.exists(): + return False + + tmp = file.parent.joinpath("tmp") + with open(tmp, "w", encoding='utf-8') as f: + f.write(content) + + match = (hash_file(file) == hash_file(tmp)) + os.remove(tmp) + return match \ No newline at end of file From 17ece88e0528fe4fe5817d0f370cafece20cff1b Mon Sep 17 00:00:00 2001 From: Jake Carter Date: Thu, 16 Jun 2022 14:25:44 -0500 Subject: [PATCH 07/55] Fix bug in OpenOCD utility task --- MaximSDK/Inject/.vscode/tasks.json | 2 +- MaximSDK/New_Project/.vscode/tasks.json | 2 +- MaximSDK/Template/.vscode/tasks.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/MaximSDK/Inject/.vscode/tasks.json b/MaximSDK/Inject/.vscode/tasks.json index d44ace3..f340937 100644 --- a/MaximSDK/Inject/.vscode/tasks.json +++ b/MaximSDK/Inject/.vscode/tasks.json @@ -60,7 +60,7 @@ "command": "openocd", "args": [ "-s", - "${config:MAXIM_PATH}/Tools/OpenOCD/scripts", + "${config:OCD_path}/scripts", "-f", "interface/${config:M4_OCD_interface_file}", "-f", diff --git a/MaximSDK/New_Project/.vscode/tasks.json b/MaximSDK/New_Project/.vscode/tasks.json index d44ace3..f340937 100644 --- a/MaximSDK/New_Project/.vscode/tasks.json +++ b/MaximSDK/New_Project/.vscode/tasks.json @@ -60,7 +60,7 @@ "command": "openocd", "args": [ "-s", - "${config:MAXIM_PATH}/Tools/OpenOCD/scripts", + "${config:OCD_path}/scripts", "-f", "interface/${config:M4_OCD_interface_file}", "-f", diff --git a/MaximSDK/Template/.vscode/tasks.json b/MaximSDK/Template/.vscode/tasks.json index d44ace3..f340937 100644 --- a/MaximSDK/Template/.vscode/tasks.json +++ b/MaximSDK/Template/.vscode/tasks.json @@ -60,7 +60,7 @@ "command": "openocd", "args": [ "-s", - "${config:MAXIM_PATH}/Tools/OpenOCD/scripts", + "${config:OCD_path}/scripts", "-f", "interface/${config:M4_OCD_interface_file}", "-f", From 249caf62096af6197cde8cc613e9f534c75246bd Mon Sep 17 00:00:00 2001 From: Jake Carter Date: Thu, 16 Jun 2022 14:25:54 -0500 Subject: [PATCH 08/55] Update gitignore --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 6ad18a8..a803a46 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ build buildlogs* -__pycache__ \ No newline at end of file +__pycache__ +MaximSDK/Template/.vscode/readme.md \ No newline at end of file From 0fa221ba920d1d47700d9944cb97424451c5fc4e Mon Sep 17 00:00:00 2001 From: Jake Carter Date: Thu, 16 Jun 2022 14:26:04 -0500 Subject: [PATCH 09/55] Remove unused imports --- maintain.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/maintain.py b/maintain.py index 29cc3df..dfc63c4 100644 --- a/maintain.py +++ b/maintain.py @@ -39,9 +39,6 @@ import shutil import argparse from pathlib import Path -from dataclasses import dataclass -from utils import time_me -from generate import populate_maximsdk from datetime import date curplatform = platform.system() # Get OS From 6f18f8ec6432e33e0a05701837fbd239417c1fb1 Mon Sep 17 00:00:00 2001 From: Jake Carter Date: Tue, 21 Jun 2022 20:29:04 -0500 Subject: [PATCH 10/55] Add flash erase utility task --- MaximSDK/Inject/.vscode/tasks.json | 15 +++++++++++++++ MaximSDK/New_Project/.vscode/tasks.json | 15 +++++++++++++++ MaximSDK/Template/.vscode/tasks.json | 15 +++++++++++++++ 3 files changed, 45 insertions(+) diff --git a/MaximSDK/Inject/.vscode/tasks.json b/MaximSDK/Inject/.vscode/tasks.json index f340937..3951f35 100644 --- a/MaximSDK/Inject/.vscode/tasks.json +++ b/MaximSDK/Inject/.vscode/tasks.json @@ -54,6 +54,21 @@ "problemMatcher": [], "dependsOn":["build"] }, + { + "label": "erase flash", + "type": "shell", + "command": "openocd", + "args": [ + "-s", "${config:OCD_path}/scripts", + "-f", "interface/${config:M4_OCD_interface_file}", + "-f", "target/${config:M4_OCD_target_file}", + "-c", "\"init; reset halt; max32xxx mass_erase 0;\"", + "-c", "exit" + ], + "group":"build", + "problemMatcher": [], + "dependsOn":[] + }, { "label": "openocd (m4)", "type": "shell", diff --git a/MaximSDK/New_Project/.vscode/tasks.json b/MaximSDK/New_Project/.vscode/tasks.json index f340937..3951f35 100644 --- a/MaximSDK/New_Project/.vscode/tasks.json +++ b/MaximSDK/New_Project/.vscode/tasks.json @@ -54,6 +54,21 @@ "problemMatcher": [], "dependsOn":["build"] }, + { + "label": "erase flash", + "type": "shell", + "command": "openocd", + "args": [ + "-s", "${config:OCD_path}/scripts", + "-f", "interface/${config:M4_OCD_interface_file}", + "-f", "target/${config:M4_OCD_target_file}", + "-c", "\"init; reset halt; max32xxx mass_erase 0;\"", + "-c", "exit" + ], + "group":"build", + "problemMatcher": [], + "dependsOn":[] + }, { "label": "openocd (m4)", "type": "shell", diff --git a/MaximSDK/Template/.vscode/tasks.json b/MaximSDK/Template/.vscode/tasks.json index f340937..3951f35 100644 --- a/MaximSDK/Template/.vscode/tasks.json +++ b/MaximSDK/Template/.vscode/tasks.json @@ -54,6 +54,21 @@ "problemMatcher": [], "dependsOn":["build"] }, + { + "label": "erase flash", + "type": "shell", + "command": "openocd", + "args": [ + "-s", "${config:OCD_path}/scripts", + "-f", "interface/${config:M4_OCD_interface_file}", + "-f", "target/${config:M4_OCD_target_file}", + "-c", "\"init; reset halt; max32xxx mass_erase 0;\"", + "-c", "exit" + ], + "group":"build", + "problemMatcher": [], + "dependsOn":[] + }, { "label": "openocd (m4)", "type": "shell", From 4ffa89739e5db772ae11dace9844c61b57d510d8 Mon Sep 17 00:00:00 2001 From: Jake Carter Date: Tue, 21 Jun 2022 20:29:35 -0500 Subject: [PATCH 11/55] Add another note about backslashes to readme --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 22f1558..4cce59b 100644 --- a/readme.md +++ b/readme.md @@ -56,7 +56,7 @@ The project folders in this repo have the following dependencies: { // There may be other settings up here... - "MAXIM_PATH":"C:/MaximSDK", + "MAXIM_PATH":"C:/MaximSDK", // Only use forward slahes '/' when setting this path! "update.mode": "manual", "extensions.autoUpdate": false, From 2d28cd373e9853d9cbdd787ea55ef6735aa7ec25 Mon Sep 17 00:00:00 2001 From: Jake Carter Date: Thu, 23 Jun 2022 16:00:51 -0500 Subject: [PATCH 12/55] Update test script --- maintain.py | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/maintain.py b/maintain.py index dfc63c4..3c692ec 100644 --- a/maintain.py +++ b/maintain.py @@ -68,6 +68,10 @@ def wrapper(*args, **kwargs): return wrapper +@time_me +def run_cmd(*args, **kwargs): + return run(*args, **kwargs) + def sync(): # Inject .vscode folder into example projects print("Copying from Inject folder into example project and template...") @@ -149,10 +153,10 @@ def test(maxim_path, targets=None, boards=None, projects=None): env = os.environ.copy() # Simulate the VS Code terminal by appending to the Path - if curplatform == 'Linux': - env["PATH"] = f"{maxim_path.as_posix()}/Tools/GNUTools/10.3/bin:{maxim_path.as_posix()}/Tools/xPack/riscv-none-embed-gcc/10.2.0-1.2/bin:" + env["PATH"] - elif curplatform == 'Windows': - env["PATH"] = f"{maxim_path.as_posix()}/Tools/GNUTools/10.3/bin;{maxim_path.as_posix()}/Tools/xPack/riscv-none-embed-gcc/10.2.0-1.2/bin;{maxim_path.as_posix()}/Tools/MSYS2/usr/bin;" + env["PATH"] + # if curplatform == 'Linux': + # env["PATH"] = f"{maxim_path.as_posix()}/Tools/GNUTools/10.3/bin:{maxim_path.as_posix()}/Tools/xPack/riscv-none-embed-gcc/10.2.0-1.2/bin:" + env["PATH"] + # elif curplatform == 'Windows': + # env["PATH"] = f"{maxim_path.as_posix()}/Tools/GNUTools/10.3/bin;{maxim_path.as_posix()}/Tools/xPack/riscv-none-embed-gcc/10.2.0-1.2/bin;{maxim_path.as_posix()}/Tools/MSYS2/usr/bin;" + env["PATH"] log_dir = Path(os.getcwd()).joinpath("buildlogs") @@ -239,8 +243,8 @@ def test(maxim_path, targets=None, boards=None, projects=None): success = True # Test build (make all) - build_cmd = f"make all TARGET={target} MAXIM_PATH={maxim_path.as_posix()} BOARD={board} MAKE=make" - res = run(build_cmd, env=env, cwd=project, shell=True, capture_output=True) # Run build command + build_cmd = f"make -r -j 8 all TARGET={target} MAXIM_PATH={maxim_path.as_posix()} BOARD={board} MAKE=make" + res = run_cmd(build_cmd, env=env, cwd=project, shell=True, capture_output=True, encoding="utf-8") # Run build command # Error check build command if res.returncode != 0: @@ -256,18 +260,17 @@ def test(maxim_path, targets=None, boards=None, projects=None): f.write(f"[BOARD] {board}\n") f.write(f"[BUILD COMMAND] {build_cmd}\n") f.write("===============\n") - for line in str(res.stdout + res.stderr, encoding="ASCII").splitlines(): - f.write(line + '\n') + f.write(res.stdout + res.stderr) else: log(f"{timestamp()}[{board}] --- [BUILD]\t[SUCCESS] {round(duration, 4)}s", logfile) # Test clean (make clean) clean_cmd = f"make distclean TARGET={target} MAXIM_PATH={maxim_path} BOARD={board} MAKE=make" - res = run(clean_cmd, env=env, cwd=project, shell=True, capture_output=True) # Run clean command + res = run_cmd(clean_cmd, env=env, cwd=project, shell=True, capture_output=True, encoding="utf-8") # Run clean command # Error check clean command if res.returncode != 0: - log(f"{timestamp()}[{board}] --- [CLEAN]\t[SUCCESS] {str(res.stderr, encoding='ASCII')}", logfile) + log(f"{timestamp()}[{board}] --- [CLEAN]\t[SUCCESS] {res.stderr}", logfile) success = False else: log(f"{timestamp()}[{board}] --- [CLEAN]\t[SUCCESS] {round(duration, 4)}s", logfile) From 4d089e7ce98924e3333eaa287e446a636a947fc4 Mon Sep 17 00:00:00 2001 From: Jake Carter Date: Thu, 23 Jun 2022 16:00:51 -0500 Subject: [PATCH 13/55] Update test script --- maintain.py | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/maintain.py b/maintain.py index dfc63c4..3c692ec 100644 --- a/maintain.py +++ b/maintain.py @@ -68,6 +68,10 @@ def wrapper(*args, **kwargs): return wrapper +@time_me +def run_cmd(*args, **kwargs): + return run(*args, **kwargs) + def sync(): # Inject .vscode folder into example projects print("Copying from Inject folder into example project and template...") @@ -149,10 +153,10 @@ def test(maxim_path, targets=None, boards=None, projects=None): env = os.environ.copy() # Simulate the VS Code terminal by appending to the Path - if curplatform == 'Linux': - env["PATH"] = f"{maxim_path.as_posix()}/Tools/GNUTools/10.3/bin:{maxim_path.as_posix()}/Tools/xPack/riscv-none-embed-gcc/10.2.0-1.2/bin:" + env["PATH"] - elif curplatform == 'Windows': - env["PATH"] = f"{maxim_path.as_posix()}/Tools/GNUTools/10.3/bin;{maxim_path.as_posix()}/Tools/xPack/riscv-none-embed-gcc/10.2.0-1.2/bin;{maxim_path.as_posix()}/Tools/MSYS2/usr/bin;" + env["PATH"] + # if curplatform == 'Linux': + # env["PATH"] = f"{maxim_path.as_posix()}/Tools/GNUTools/10.3/bin:{maxim_path.as_posix()}/Tools/xPack/riscv-none-embed-gcc/10.2.0-1.2/bin:" + env["PATH"] + # elif curplatform == 'Windows': + # env["PATH"] = f"{maxim_path.as_posix()}/Tools/GNUTools/10.3/bin;{maxim_path.as_posix()}/Tools/xPack/riscv-none-embed-gcc/10.2.0-1.2/bin;{maxim_path.as_posix()}/Tools/MSYS2/usr/bin;" + env["PATH"] log_dir = Path(os.getcwd()).joinpath("buildlogs") @@ -239,8 +243,8 @@ def test(maxim_path, targets=None, boards=None, projects=None): success = True # Test build (make all) - build_cmd = f"make all TARGET={target} MAXIM_PATH={maxim_path.as_posix()} BOARD={board} MAKE=make" - res = run(build_cmd, env=env, cwd=project, shell=True, capture_output=True) # Run build command + build_cmd = f"make -r -j 8 all TARGET={target} MAXIM_PATH={maxim_path.as_posix()} BOARD={board} MAKE=make" + res = run_cmd(build_cmd, env=env, cwd=project, shell=True, capture_output=True, encoding="utf-8") # Run build command # Error check build command if res.returncode != 0: @@ -256,18 +260,17 @@ def test(maxim_path, targets=None, boards=None, projects=None): f.write(f"[BOARD] {board}\n") f.write(f"[BUILD COMMAND] {build_cmd}\n") f.write("===============\n") - for line in str(res.stdout + res.stderr, encoding="ASCII").splitlines(): - f.write(line + '\n') + f.write(res.stdout + res.stderr) else: log(f"{timestamp()}[{board}] --- [BUILD]\t[SUCCESS] {round(duration, 4)}s", logfile) # Test clean (make clean) clean_cmd = f"make distclean TARGET={target} MAXIM_PATH={maxim_path} BOARD={board} MAKE=make" - res = run(clean_cmd, env=env, cwd=project, shell=True, capture_output=True) # Run clean command + res = run_cmd(clean_cmd, env=env, cwd=project, shell=True, capture_output=True, encoding="utf-8") # Run clean command # Error check clean command if res.returncode != 0: - log(f"{timestamp()}[{board}] --- [CLEAN]\t[SUCCESS] {str(res.stderr, encoding='ASCII')}", logfile) + log(f"{timestamp()}[{board}] --- [CLEAN]\t[SUCCESS] {res.stderr}", logfile) success = False else: log(f"{timestamp()}[{board}] --- [CLEAN]\t[SUCCESS] {round(duration, 4)}s", logfile) From f5cd0f800b192cc1172e8d8939dd9fd367b0d0e5 Mon Sep 17 00:00:00 2001 From: Jake Carter Date: Fri, 24 Jun 2022 19:52:03 -0500 Subject: [PATCH 14/55] Add CLI for test functions --- maintain.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/maintain.py b/maintain.py index 3c692ec..6f4ab44 100644 --- a/maintain.py +++ b/maintain.py @@ -303,6 +303,11 @@ def test(maxim_path, targets=None, boards=None, projects=None): sync_parser = cmd_parser.add_parser("sync", help="Sync all .vscode project folders") +test_parser = cmd_parser.add_parser("test", help="Run a build test of the SDK.") +test_parser.add_argument("--targets", type=str, nargs="+", required=False, help="Target microcontrollers to test.") +test_parser.add_argument("--boards", type=str, nargs="+", required=False, help="Boards to test. Should match the BSP folder-name exactly.") +test_parser.add_argument("--projects", type=str, nargs="+", required=False, help="Examples to populate. Should match the example's folder name.") + if __name__ == "__main__": args = parser.parse_args() @@ -322,4 +327,7 @@ def test(maxim_path, targets=None, boards=None, projects=None): release(args.version, args.maxim_path) elif args.cmd == "sync": - sync() \ No newline at end of file + sync() + + elif args.cmd == "test": + test(args.maxim_path, targets=args.targets, boards=args.boards, projects=args.projects) \ No newline at end of file From 9ef76f1c12a8c0ed471af07a1a23cc372ba2d848 Mon Sep 17 00:00:00 2001 From: Jake Carter Date: Thu, 14 Jul 2022 17:06:27 -0500 Subject: [PATCH 15/55] Update example existence check --- maintain.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/maintain.py b/maintain.py index 6f4ab44..a254c3c 100644 --- a/maintain.py +++ b/maintain.py @@ -219,7 +219,7 @@ def test(maxim_path, targets=None, boards=None, projects=None): if projects is None: projects = [] for dirpath, subdirs, items in os.walk(maxim_path.joinpath("Examples", target)): - if 'Makefile' in items and "main.c" in items: + if 'Makefile' in items and ("main.c" in items or "project.mk" in items): projects.append(Path(dirpath)) log(f"[PROJECTS] Detected {projects}", logfile) @@ -330,4 +330,4 @@ def test(maxim_path, targets=None, boards=None, projects=None): sync() elif args.cmd == "test": - test(args.maxim_path, targets=args.targets, boards=args.boards, projects=args.projects) \ No newline at end of file + test(args.maxim_path, targets=args.targets, boards=args.boards, projects=args.projects) From b32624f10a9f3720c525f34c2ab2e63a5a13860f Mon Sep 17 00:00:00 2001 From: Jake Carter Date: Mon, 1 Aug 2022 19:58:14 -0500 Subject: [PATCH 16/55] Update maintenance script --- maintain.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/maintain.py b/maintain.py index a254c3c..c696bdd 100644 --- a/maintain.py +++ b/maintain.py @@ -108,7 +108,7 @@ def release(version): # Copy in to installer package print("Updating installer package...") - shutil.copytree(Path("./Releases/VSCode-Maxim-v140"), Path("./installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim"), dirs_exist_ok=True) + shutil.copytree(r_dir, Path("./installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim"), dirs_exist_ok=True) # Update version # and release date in package.xml # --- @@ -324,7 +324,7 @@ def test(maxim_path, targets=None, boards=None, projects=None): exit() if args.cmd == "release": - release(args.version, args.maxim_path) + release(args.version) elif args.cmd == "sync": sync() From 0c02174f119518ef5b1c0c08b32573b199bca3d7 Mon Sep 17 00:00:00 2001 From: Jake Carter Date: Mon, 1 Aug 2022 19:58:30 -0500 Subject: [PATCH 17/55] Update installer package for v1.4.3 release --- .../VSCode-Maxim/Inject/.vscode/flash.gdb | 8 +++++ .../VSCode-Maxim/Inject/.vscode/launch.json | 0 .../VSCode-Maxim/Inject/.vscode/tasks.json | 35 +++++++++++++++++-- .../New_Project/.vscode/flash.gdb | 8 +++++ .../New_Project/.vscode/launch.json | 0 .../New_Project/.vscode/tasks.json | 35 +++++++++++++++++-- .../data/Tools/VSCode-Maxim/readme.md | 2 +- .../meta/installscript.js | 2 +- .../meta/package.xml | 4 +-- 9 files changed, 86 insertions(+), 8 deletions(-) mode change 100644 => 100755 installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/Inject/.vscode/launch.json mode change 100644 => 100755 installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/New_Project/.vscode/launch.json diff --git a/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/Inject/.vscode/flash.gdb b/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/Inject/.vscode/flash.gdb index 2d86f86..fc627ae 100644 --- a/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/Inject/.vscode/flash.gdb +++ b/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/Inject/.vscode/flash.gdb @@ -5,3 +5,11 @@ define flash_m4 compare-sections monitor reset halt end + +define flash_m4_run + set architecture armv7e-m + target remote | openocd -c "gdb_port pipe;log_output flash.log" -s $arg0/scripts -f interface/$arg1 -f target/$arg2 -c "init; reset halt" + load + compare-sections + monitor resume +end \ No newline at end of file diff --git a/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/Inject/.vscode/launch.json b/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/Inject/.vscode/launch.json old mode 100644 new mode 100755 diff --git a/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/Inject/.vscode/tasks.json b/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/Inject/.vscode/tasks.json index 5eef671..3951f35 100644 --- a/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/Inject/.vscode/tasks.json +++ b/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/Inject/.vscode/tasks.json @@ -26,25 +26,56 @@ "label": "flash", "type": "shell", "command": "arm-none-eabi-gdb", + "args": [ + "--cd=\"${workspaceFolder}\"", + "--se=\"build/${config:program_file}\"", + "--symbols=build/${config:symbol_file}", + "-x=\"${workspaceFolder}/.vscode/flash.gdb\"", + "--ex=\"flash_m4 ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", + "--batch" + ], + "group": "build", + "problemMatcher": [], + "dependsOn":["build"] + }, + { + "label": "flash & run", + "type": "shell", + "command": "arm-none-eabi-gdb", "args": [ "--cd=\"${workspaceFolder}\"", "--se=\"build/${config:program_file}\"", "--symbols=build/${config:symbol_file}", "-x=\"${workspaceFolder}/.vscode/flash.gdb\"", - "--ex=\"flash_m4 ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", + "--ex=\"flash_m4_run ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", "--batch" ], "group": "build", "problemMatcher": [], "dependsOn":["build"] }, + { + "label": "erase flash", + "type": "shell", + "command": "openocd", + "args": [ + "-s", "${config:OCD_path}/scripts", + "-f", "interface/${config:M4_OCD_interface_file}", + "-f", "target/${config:M4_OCD_target_file}", + "-c", "\"init; reset halt; max32xxx mass_erase 0;\"", + "-c", "exit" + ], + "group":"build", + "problemMatcher": [], + "dependsOn":[] + }, { "label": "openocd (m4)", "type": "shell", "command": "openocd", "args": [ "-s", - "${config:MAXIM_PATH}/Tools/OpenOCD/scripts", + "${config:OCD_path}/scripts", "-f", "interface/${config:M4_OCD_interface_file}", "-f", diff --git a/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/New_Project/.vscode/flash.gdb b/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/New_Project/.vscode/flash.gdb index 2d86f86..fc627ae 100644 --- a/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/New_Project/.vscode/flash.gdb +++ b/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/New_Project/.vscode/flash.gdb @@ -5,3 +5,11 @@ define flash_m4 compare-sections monitor reset halt end + +define flash_m4_run + set architecture armv7e-m + target remote | openocd -c "gdb_port pipe;log_output flash.log" -s $arg0/scripts -f interface/$arg1 -f target/$arg2 -c "init; reset halt" + load + compare-sections + monitor resume +end \ No newline at end of file diff --git a/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/New_Project/.vscode/launch.json b/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/New_Project/.vscode/launch.json old mode 100644 new mode 100755 diff --git a/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/New_Project/.vscode/tasks.json b/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/New_Project/.vscode/tasks.json index 5eef671..3951f35 100644 --- a/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/New_Project/.vscode/tasks.json +++ b/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/New_Project/.vscode/tasks.json @@ -26,25 +26,56 @@ "label": "flash", "type": "shell", "command": "arm-none-eabi-gdb", + "args": [ + "--cd=\"${workspaceFolder}\"", + "--se=\"build/${config:program_file}\"", + "--symbols=build/${config:symbol_file}", + "-x=\"${workspaceFolder}/.vscode/flash.gdb\"", + "--ex=\"flash_m4 ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", + "--batch" + ], + "group": "build", + "problemMatcher": [], + "dependsOn":["build"] + }, + { + "label": "flash & run", + "type": "shell", + "command": "arm-none-eabi-gdb", "args": [ "--cd=\"${workspaceFolder}\"", "--se=\"build/${config:program_file}\"", "--symbols=build/${config:symbol_file}", "-x=\"${workspaceFolder}/.vscode/flash.gdb\"", - "--ex=\"flash_m4 ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", + "--ex=\"flash_m4_run ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", "--batch" ], "group": "build", "problemMatcher": [], "dependsOn":["build"] }, + { + "label": "erase flash", + "type": "shell", + "command": "openocd", + "args": [ + "-s", "${config:OCD_path}/scripts", + "-f", "interface/${config:M4_OCD_interface_file}", + "-f", "target/${config:M4_OCD_target_file}", + "-c", "\"init; reset halt; max32xxx mass_erase 0;\"", + "-c", "exit" + ], + "group":"build", + "problemMatcher": [], + "dependsOn":[] + }, { "label": "openocd (m4)", "type": "shell", "command": "openocd", "args": [ "-s", - "${config:MAXIM_PATH}/Tools/OpenOCD/scripts", + "${config:OCD_path}/scripts", "-f", "interface/${config:M4_OCD_interface_file}", "-f", diff --git a/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/readme.md b/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/readme.md index 22f1558..4cce59b 100644 --- a/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/readme.md +++ b/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/readme.md @@ -56,7 +56,7 @@ The project folders in this repo have the following dependencies: { // There may be other settings up here... - "MAXIM_PATH":"C:/MaximSDK", + "MAXIM_PATH":"C:/MaximSDK", // Only use forward slahes '/' when setting this path! "update.mode": "manual", "extensions.autoUpdate": false, diff --git a/installer/com.maximintegrated.dist.vscodemaxim/meta/installscript.js b/installer/com.maximintegrated.dist.vscodemaxim/meta/installscript.js index 8fd3678..0fa69b6 100644 --- a/installer/com.maximintegrated.dist.vscodemaxim/meta/installscript.js +++ b/installer/com.maximintegrated.dist.vscodemaxim/meta/installscript.js @@ -23,7 +23,7 @@ Component.prototype.createOperations = function() Component.prototype.installationFinished = function() { - var tag = "v1.4.2"; + var tag = "v1.4.3"; var tag_url = "https://github.com/MaximIntegratedTechSupport/VSCode-Maxim/tree/" + tag; var release_url = "https://github.com/MaximIntegratedTechSupport/VSCode-Maxim/releases/tag/" + tag; diff --git a/installer/com.maximintegrated.dist.vscodemaxim/meta/package.xml b/installer/com.maximintegrated.dist.vscodemaxim/meta/package.xml index 36129e6..afc42dc 100644 --- a/installer/com.maximintegrated.dist.vscodemaxim/meta/package.xml +++ b/installer/com.maximintegrated.dist.vscodemaxim/meta/package.xml @@ -1,9 +1,9 @@ Visual Studio Code Support Project files, templates, and documentation for integrating Visual Studio Code and the MaximSDK. Example projects come pre-populated with .vscode project folders, and this package contains information on how to use them. It installs to "Tools/VSCode-Maxim". - 2022-05-16 + 2022-08-01 net.sourceforge.openocd, net.launchpad.gcc.arm.embedded, net.launchpad.gcc.riscv.embedded, com.maximintegrated.libraries.periphdrivers - 1.4.2 + 1.4.3 1 \ No newline at end of file From 9a61b7b9caf14dd7c0e86ee675963301f6459aca Mon Sep 17 00:00:00 2001 From: Jake Carter Date: Tue, 16 Aug 2022 13:56:53 -0500 Subject: [PATCH 18/55] Update readme.md --- readme.md | 41 ++++++++++++++++++++++++++--------------- 1 file changed, 26 insertions(+), 15 deletions(-) diff --git a/readme.md b/readme.md index 4cce59b..a52e0a9 100644 --- a/readme.md +++ b/readme.md @@ -6,7 +6,7 @@ If you are viewing this document from within Visual Studio Code, press `CTRL+SHI ## Introduction -This repository is dedicated to maintaining [Visual Studio Code](https://code.visualstudio.com/) project files that integrate with [Maxim Integrated's](https://www.maximintegrated.com/en/products/microcontrollers.html) Microcontroller SDK. The following features are enabled by the project files: +VSCode-Maxim is a set of [Visual Studio Code](https://code.visualstudio.com/) project configurations and utilities for enabling embedded development for [Analog Device's MSDK](https://github.com/Analog-Devices-MSDK/msdk) and the [MAX-series](https://www.maximintegrated.com/en/products/microcontrollers.html) microcontrollers. The following features are enabled by the project files: * Code editing with intellisense and definition look-ups down to the register level * Code compilation with the ability to easily re-target a project for different microcontrollers and boards @@ -15,8 +15,6 @@ This repository is dedicated to maintaining [Visual Studio Code](https://code.vi ## Dependencies -The project folders in this repo have the following dependencies: - * [Visual Studio Code](https://code.visualstudio.com/) * [C/C++ VSCode Extension](https://github.com/microsoft/vscode-cpptools) * [Maxim Micros SDK](https://www.maximintegrated.com/content/maximintegrated/en/design/software-description.html/swpart=SFW0010820A) @@ -34,7 +32,7 @@ The project folders in this repo have the following dependencies: ![Selected Components](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/installer_components.JPG) -4. Finish the MaximSDK installation, and proceed to step 5 below to set up Visual Studio Code. +4. Finish the MaximSDK installation, taking note of where the MaximSDK was installed. 5. Download & install Visual Studio Code for your OS [here](https://code.visualstudio.com/Download). @@ -70,23 +68,25 @@ The project folders in this repo have the following dependencies: ## Usage -This section covers basic usage of the VSCode-Maxim project files. For documentation on Visual Studio Code itself, please refer to the official docs [here](https://code.visualstudio.com/Docs). - -Prior experience with Visual Studio Code is not required to understand this section or use the project files, but some basic familiarity is helpful. For new users, this initial familiarity can be gained by working through the full [User Guide](https://github.com/MaximIntegratedTechSupport/VSCode-Maxim/blob/main/userguide.md). +This section covers basic usage of the VSCode-Maxim project files. For documentation on Visual Studio Code itself, please refer to the official docs [here](https://code.visualstudio.com/Docs). ### Opening Projects -Visual Studio Code is built around a "working directory" paradigm. VS Code's editor is always running from inside of a working directory, and the main mechanism for changing that directory is `File -> Open Folder...` +Visual Studio Code is built around a "working directory" paradigm. The editor is always rooted in a working directory, and the main mechanism for changing that directory is `File -> Open Folder...`. ![File -> Open Folder](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/file_openfolder.JPG) -VS Code will look in the opened folder for a `.vscode` _sub_-folder to load project-specific settings from. +As a result, you'll notice that there is no "New Project" mechanism. A "project" in VS Code is simply a folder. It will look inside of the opened folder for a `.vscode` _sub_-folder to load project-specific settings from. -Opening an existing project is as simple as `File -> Open Folder...`. A project that is configured for VS Code will have, at minimum, a .vscode sub-folder and a Makefile in its directory. Ex: +A project that is configured for VS Code will have, at minimum, a .vscode sub-folder and a Makefile in its directory _(Note: You may need to enable viewing of hidden items in your file explorer to see the .vscode sub-folder)_. Ex: ![Example Directory Contents](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/opening_projects_2.jpg) -Note: You may need to enable viewing of hidden items in your file explorer to see the .vscode sub-folder. +### Where to Find Projects + +The [Examples](https://github.com/Analog-Devices-MSDK/msdk/tree/main/Examples) in the MSDK come with with pre-configured .vscode project folders. These projects can be opened "out of the box", but it's good practice to copy example folders _outside_ of the MSDK so that the original copies are kept as clean references. The examples can be freely moved to any location _without a space in its path_. + +Additionally, empty project templates and a drag-and-drop folder for "injecting" VSCode-Maxim into a project can be found under `Tools/VSCode-Maxim` in the MaximSDK installation. ### Build Tasks @@ -95,19 +95,30 @@ Once a project is opened 4 available build tasks will become available via `Term ![Build Tasks Image](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/buildtasks.JPG) * Build - * Compiles the code. + * Compiles the code with a `make all` command. + * Additional options are passed into Make on the command-line based on the project's settings.json file. * The `./build` directory will be created and will contain the output binary, as well as all intermediary object files. * Clean - * This task cleans the build output, removing the `./build` directory and all of its contents. + * Cleans the build output, removing the `./build` directory and all of its contents. * Clean-Periph * This task is the same as 'clean', but it also removes the build output for Maxim's peripheral drivers. * Use this if you would like to recompile the peripheral drivers from source on the next build. * Flash - * This task runs the Build task, and then flashes the output binary to the microcontroller. - * A debugger must be connected to the correct debugger port on the target microcontroller. Refer to the datasheet of your microcontrollers evaluation board for instructions on connecting a debugger. + * Launching this task automatically runs the `Build` task first. Then, it flashes the output binary to the microcontroller. + * It uses the GDB `load` and `compare-sections` commands, and handles launching an OpenOCD internally via a pipe connection. + * The flashed program will be halted until the microcontroller is reset, power cycled, or a debugger is connected. + * A debugger must be connected correctly to use this task. Refer to the datasheet of your microcontroller's evaluation board for instructions. + +* Flash & Run + * This is the same as the `Flash` task, but it also will launch execution of the program once flashing is complete. + +* Erase Flash + * Completely erases all of the application code in the flash memory bank. + * Once complete, the target microcontroller will be effectively "blank". + * This can be useful for recovering from Low-Power (LP) lockouts, bad firmware, etc. ### Editing the Makefile From 414d24d53139a939f103da1d48454ced01289d9d Mon Sep 17 00:00:00 2001 From: Jake Carter Date: Tue, 16 Aug 2022 14:05:12 -0500 Subject: [PATCH 19/55] Update readme.md --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index a52e0a9..4d39a79 100644 --- a/readme.md +++ b/readme.md @@ -86,7 +86,7 @@ A project that is configured for VS Code will have, at minimum, a .vscode sub-fo The [Examples](https://github.com/Analog-Devices-MSDK/msdk/tree/main/Examples) in the MSDK come with with pre-configured .vscode project folders. These projects can be opened "out of the box", but it's good practice to copy example folders _outside_ of the MSDK so that the original copies are kept as clean references. The examples can be freely moved to any location _without a space in its path_. -Additionally, empty project templates and a drag-and-drop folder for "injecting" VSCode-Maxim into a project can be found under `Tools/VSCode-Maxim` in the MaximSDK installation. +Additionally, empty project templates and a drag-and-drop folder for "injecting" a VSCode-Maxim project can be found under `Tools/VSCode-Maxim` in the MaximSDK installation. ### Build Tasks From 6f5e9ab4e8ff8b273d1e8a80d2763bb171eb23be Mon Sep 17 00:00:00 2001 From: Jake Carter Date: Tue, 16 Aug 2022 17:49:05 -0500 Subject: [PATCH 20/55] Manually set the PC after reset Manually set the Program Counter to the Reset_Handler after reset. This enables smooth debugging on parts with a secure bootloader. If a secure part is reset, it enters into the secure bootloader verification in ROM, which will prevent unsigned applications we've flashed from running after reset. However, the SWD port is always held open, so we can move the program counter into the Reset_Handler manually to work around this. This enables debugging the flashed application on secure parts for development. Additionally, this should be a transparent change for the non-secure parts, which don't have any ROM. A traditional reset will place the program counter into the Reset_Handler anyways. --- MaximSDK/Inject/.vscode/c_cpp_properties.json | 2 +- MaximSDK/Inject/.vscode/launch.json | 1 + MaximSDK/New_Project/.vscode/launch.json | 1 + MaximSDK/Template/.vscode/launch.json | 1 + 4 files changed, 4 insertions(+), 1 deletion(-) diff --git a/MaximSDK/Inject/.vscode/c_cpp_properties.json b/MaximSDK/Inject/.vscode/c_cpp_properties.json index bd9d5ef..dfbed47 100644 --- a/MaximSDK/Inject/.vscode/c_cpp_properties.json +++ b/MaximSDK/Inject/.vscode/c_cpp_properties.json @@ -11,7 +11,7 @@ "intelliSenseMode": "gcc-arm", "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc.exe", "browse": { - "path": [ + "path": [ "${default}" ] } diff --git a/MaximSDK/Inject/.vscode/launch.json b/MaximSDK/Inject/.vscode/launch.json index 9c45b1d..fb021b9 100755 --- a/MaximSDK/Inject/.vscode/launch.json +++ b/MaximSDK/Inject/.vscode/launch.json @@ -46,6 +46,7 @@ { "text":"symbol-file build/${config:symbol_file}" }, { "text":"target remote localhost:3333" }, { "text":"monitor reset halt" }, + { "text":"set $pc=Reset_Handler"}, { "text":"b main" } ] }, diff --git a/MaximSDK/New_Project/.vscode/launch.json b/MaximSDK/New_Project/.vscode/launch.json index 9c45b1d..fb021b9 100755 --- a/MaximSDK/New_Project/.vscode/launch.json +++ b/MaximSDK/New_Project/.vscode/launch.json @@ -46,6 +46,7 @@ { "text":"symbol-file build/${config:symbol_file}" }, { "text":"target remote localhost:3333" }, { "text":"monitor reset halt" }, + { "text":"set $pc=Reset_Handler"}, { "text":"b main" } ] }, diff --git a/MaximSDK/Template/.vscode/launch.json b/MaximSDK/Template/.vscode/launch.json index 9c45b1d..fb021b9 100755 --- a/MaximSDK/Template/.vscode/launch.json +++ b/MaximSDK/Template/.vscode/launch.json @@ -46,6 +46,7 @@ { "text":"symbol-file build/${config:symbol_file}" }, { "text":"target remote localhost:3333" }, { "text":"monitor reset halt" }, + { "text":"set $pc=Reset_Handler"}, { "text":"b main" } ] }, From 4395d7ba217a264dded7eff74602bccc10f3cd3b Mon Sep 17 00:00:00 2001 From: Jake Carter Date: Tue, 16 Aug 2022 18:48:48 -0500 Subject: [PATCH 21/55] Clean up readme, move some info to the wiki --- readme.md | 416 +++++++++++++++++++++--------------------------------- 1 file changed, 164 insertions(+), 252 deletions(-) diff --git a/readme.md b/readme.md index 4d39a79..8ac3be0 100644 --- a/readme.md +++ b/readme.md @@ -1,16 +1,23 @@ # VSCode-Maxim -[VSCode-Maxim on Github](https://github.com/MaximIntegratedTechSupport/VSCode-Maxim) +_(If you're viewing this document from within Visual Studio Code you can press `CTRL+SHIFT+V` to open a Markdown preview window.)_ -If you are viewing this document from within Visual Studio Code, press `CTRL+SHIFT+V` to open a Markdown preview window. +## Quick Links + +* [VSCode-Maxim Github](https://github.com/Analog-Devices-MSDK/VSCode-Maxim) +* [Wiki](https://github.com/Analog-Devices-MSDK/VSCode-Maxim/wiki) + * If it's not in the readme, check the wiki. + * If it's not in the wiki, open a ticket! ## Introduction -VSCode-Maxim is a set of [Visual Studio Code](https://code.visualstudio.com/) project configurations and utilities for enabling embedded development for [Analog Device's MSDK](https://github.com/Analog-Devices-MSDK/msdk) and the [MAX-series](https://www.maximintegrated.com/en/products/microcontrollers.html) microcontrollers. The following features are enabled by the project files: +VSCode-Maxim is a set of [Visual Studio Code](https://code.visualstudio.com/) project configurations and utilities for enabling embedded development for [Analog Device's MSDK](https://github.com/Analog-Devices-MSDK/msdk) and the [MAX-series](https://www.maximintegrated.com/en/products/microcontrollers.html) microcontrollers. + +The following features are supported: -* Code editing with intellisense and definition look-ups down to the register level +* Code editing with intellisense down to the register level * Code compilation with the ability to easily re-target a project for different microcontrollers and boards -* Flashing program binaries +* Flashing programs * GUI and command-line debugging ## Dependencies @@ -26,45 +33,41 @@ VSCode-Maxim is a set of [Visual Studio Code](https://code.visualstudio.com/) pr * [Linux (Ubuntu)](https://www.maximintegrated.com/en/design/software-description.html/swpart=SFW0018720A) * [MacOS](https://www.maximintegrated.com/en/design/software-description.html/swpart=SFW0018610A) -2. Run the installer executable. - -3. During component selection, ensure that "Visual Studio Code Support" is selected. +2. Run the installer executable, and ensure that "Visual Studio Code Support" is enabled for your installation. ![Selected Components](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/installer_components.JPG) -4. Finish the MaximSDK installation, taking note of where the MaximSDK was installed. +3. Finish the MaximSDK installation, taking note of where the MaximSDK was installed. -5. Download & install Visual Studio Code for your OS [here](https://code.visualstudio.com/Download). +4. Download & install Visual Studio Code for your OS [here](https://code.visualstudio.com/Download). -6. Launch Visual Studio Code. +5. Launch Visual Studio Code. -7. Install the Microsoft [C/C++ extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools). +6. Install the Microsoft [C/C++ extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools). -8. Use `CTRL + SHIFT + P` (or `COMMAND + SHIFT + P` on MacOS) to open the developer prompt. +7. Use `CTRL + SHIFT + P` (or `COMMAND + SHIFT + P` on MacOS) to open the developer prompt. -9. Type "open settings json" and select the "Preferences: Open Settings (JSON)" option (_not_ the "Preferences: Open _Default_ Settings (JSON)"). This will open your user settings.json file in VS Code's editor. +8. Type "open settings json" and select the "Preferences: Open Settings (JSON)" option (_not_ the "Preferences: Open _Default_ Settings (JSON)"). This will open your user settings.json file in VS Code's editor. ![Open Settings JSON Command](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/open_settings_json.jpg) -10. Add the entries below into your user settings.json file. - - Note: **If you installed the MaximSDK to a non-default location change the value of `"MAXIM_PATH"`. Only use forward slashes `/` when setting `"MAXIM_PATH"`.** +9. Add the entries below into your user settings.json file. ```json { // There may be other settings up here... - "MAXIM_PATH":"C:/MaximSDK", // Only use forward slahes '/' when setting this path! + "MAXIM_PATH":"C:/MaximSDK", // Set this to the installed location of the MaximSDK. Only use forward slashes '/' when setting this path! "update.mode": "manual", "extensions.autoUpdate": false, - // and/or other settings down here... + // There may be other settings down here... } ``` -11. Save your changes to the file with `CTRL + S` and restart VS Code. +10. Save your changes to the file with `CTRL + S` and restart VS Code. -12. That's it! You're ready to start using Visual Studio Code to develop with Maxim's Microcontrollers. The MaximSDK examples come pre-populated with .vscode project folders, and the `Tools/VSCode-Maxim` folder of the SDK contains documentation and templates. See [Usage](#usage) below for more details. +11. That's it! You're ready to start using Visual Studio Code to develop with Maxim's Microcontrollers. The MaximSDK examples come pre-populated with .vscode project folders, and the `Tools/VSCode-Maxim` folder of the SDK contains documentation and templates. See [Usage](#usage) below for more details. ## Usage @@ -78,7 +81,9 @@ Visual Studio Code is built around a "working directory" paradigm. The editor i As a result, you'll notice that there is no "New Project" mechanism. A "project" in VS Code is simply a folder. It will look inside of the opened folder for a `.vscode` _sub_-folder to load project-specific settings from. -A project that is configured for VS Code will have, at minimum, a .vscode sub-folder and a Makefile in its directory _(Note: You may need to enable viewing of hidden items in your file explorer to see the .vscode sub-folder)_. Ex: +A project that is configured for VS Code will have, at minimum, a .vscode sub-folder and a Makefile in its directory _(Note: You may need to enable viewing of hidden items in your file explorer to see the .vscode sub-folder)_. + +Ex: ![Example Directory Contents](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/opening_projects_2.jpg) @@ -120,42 +125,13 @@ Once a project is opened 4 available build tasks will become available via `Term * Once complete, the target microcontroller will be effectively "blank". * This can be useful for recovering from Low-Power (LP) lockouts, bad firmware, etc. -### Editing the Makefile - -At the heart of every project is its `Makefile`. Build Tasks are essentially a wrapper around the Makefile. Adding source code files to the build, setting compiler flags, linking libraries, etc. must be done by directly editing this file. - -The usage guidelines below are specific to Maxim's Makefiles. The [GNU Make Manual](https://www.gnu.org/software/make/manual/html_node/index.html) is a good one to have on hand for documentation regarding Makefiles in general. - -#### Adding Source Code Files - -* VS Code's editor can create and add new files to a project, but they won't be added to the build automatically. The Makefile must be told which source code files to build, and where to find them. -* Add a source file to the build with `SRCS += yourfile.c` -* The Makefile looks for project source files in the `/src` directory by default. Add additional directories to search with `VPATH += yoursourcedirectory` -* The Makefile looks for project header files in the `/src` directory by default. Add additional directories to search with `IPATH += yourincludedirectory` - -#### Compiler Flags - -* Compiler flags can be added/changed via the `PROJ_CFLAGS` variable. -* Add a new flag to be passed to the compiler with `PROJ_CFLAGS += -yourflag`. Flags are passed in the order that they are added to the `PROJ_CFLAGS` variable. - -#### Linking Libraries - -* Additional libraries can be linked via the `PROJ_LIBS` variable. Add a new library to the build with `PROJ_LIBS += yourlibraryname`. - * Note : Do not include the 'lib' part of the library name, or the file extension. For example, to link `libarm_cortexM4lf_math.a` set `PROJ_LIBS += arm_cortexM4lf_math`. -* Tell the linker where to find the library with the '-L' linker flag. Set `PROJ_LDFLAGS += -Lpathtoyourlibrary`. For example, set `PROJ_LDFLAGS += -L./lib` to search a 'lib' directory inside of the project for libraries. - -#### Optimization Level - -* The optimization level that the compiler uses can be set by changing the `MXC_OPTIMIZE_CFLAGS` variable. -* See [GCC Optimization Options](https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html) for more details on available optimization levels. For example, disable optimization with `MXC_OPTIMIZE_CFLAGS = -O0` - ### Debugging -Debugging is enabled by Visual Studio Code's integrated debugger. Launch configurations are provided by the `.vscode/launch.json` file. +![Debug Window](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/debugger.JPG) -* Note: **Flashing does not happen automatically when launching the debugger.** Run the "Flash" [build task](#build-tasks) for your program before debugging. +Debugging is enabled by Visual Studio Code's integrated debugger. Launch configurations can be found in the `.vscode/launch.json` file. -![Debug Window](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/debugger.JPG) +* Note: **Flashing does not happen automatically when launching the debugger.** Run the "Flash" [build task](#build-tasks) for your program _before_ debugging. #### Debugger Limitations @@ -165,6 +141,8 @@ In general, Maxim's microcontrollers have the following debugger limitations at * The device can not be debugged while the device is in Sleep, Low Power Mode, Micro Power Mode, Standby, Backup, or Shutdown mode. These modes shut down the SWD clock. +* These limitations can sometimes make the device difficult or impossible to connect to if firmware has locked out the debugger. In such cases, the "Erase Flash" task can be used to recover the part. + #### Launching the Debugger 1. Attach your debugger to the SWD port on the target microcontroller. (Refer to the datasheet of your evaluation board for instructions on connecting a debugger) @@ -193,45 +171,6 @@ Breakpoints can be set by clicking in the space next to the line number in a sou ![Breakpoint](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/breakpoint.JPG) -#### RISC-V Debugging - -For microcontrollers with both an Arm M4 and a RISC-V core, the "GDB (RISC-V)" launch profile is provided to enable RISC-V debugging. The RISC-V core requires setup and handoff from the Arm M4 core. As a result, this is an advanced configuration requiring a unique combination of the project's source code, Makefiles, and VSCode-Maxim project settings. Such projects are appended with the `"-riscv"` suffix in the project's folder name. - -To debug a RISC-V project: - -1. Connect your Arm (SWD) and RISC-V (JTAG) debuggers. The RISC-V projects come pre-configured for the [ARM-USB-OCD-H](https://www.olimex.com/Products/ARM/JTAG/ARM-USB-OCD-H/) + [ARM-JTAG-20-10](https://www.olimex.com/Products/ARM/JTAG/ARM-JTAG-20-10/) adapter. - -2. Make sure your Olimex debugger drivers are installed correctly. Sometimes they need to be updated using the "zadig" tool. See [this](https://www.olimex.com/Products/ARM/JTAG/_resources/ARM-USB-OCD_and_OCD_H_manual.pdf) Olimex User Manual for more details. - -3. Run the "Flash" task. Ex: - - ![image](https://user-images.githubusercontent.com/38844790/168398354-2ac2961b-6d45-4f84-8805-0ab5339a4b98.png) - -4. Launch the debugger using the GDB (Arm M4) profile first: - - ![image](https://user-images.githubusercontent.com/38844790/168398415-147a3a96-1a7d-4057-8a32-0dfaf2d378c1.png) - - ... which should hit the breakpoint in `main.c`... - ![image](https://user-images.githubusercontent.com/38844790/168398503-0f2ae9c1-f535-4d41-aed9-9d9e19b16303.png) - -5. Continue the debugger. The code in `main.c` will boot up the RISC-V core. You can optionally set a breakpoint on `WakeISR` to see when the RISC-V core has signaled it's ready. - - ![image](https://user-images.githubusercontent.com/38844790/168398665-9486e1b6-73bd-481e-a4b5-15dd44c7d7b9.png) - -6. Now, launch another debugger window with the GDB (RISC-V) profile. - - ![image](https://user-images.githubusercontent.com/38844790/168398707-b6771bf3-b6bf-47a2-b963-b0b9fc003ca4.png) - - ... which should hit the breakpoint on main. - - Notice the "Signal 0" exception below... This is a known issue caused by a reset hardware bug on the RISC-V core that can be safely ignored. The exception message is harmless, but annoying... It will present itself every time the debugger is paused. - - ![image](https://user-images.githubusercontent.com/38844790/168399130-95fe7539-fb46-4c06-a268-6b720403b539.png) - -7. From here, the debugger should be fully functional. Ex, stepping through loading CNN weights on the MAX78000 RISC-V core: - - ![image](https://user-images.githubusercontent.com/38844790/168399419-d0488a0e-2068-4cc7-9108-0a296fdc04b4.png) - ## Configuration ### Project Settings @@ -258,11 +197,15 @@ The following configuration options are available: * `"MAX32650"` * `"MAX32655"` * `"MAX32660"` + * `"MAX32662"` * `"MAX32665"` (for MAX32665-MAX32668) * `"MAX32670"` * `"MAX32672"` * `"MAX32675"` + * `"MAX32680"` + * `"MAX32690"` * `"MAX78000"` + * `"MAX78002"` * `"board"` * This sets the target board for the project (ie. Evaluation Kit, Feather board, etc.) @@ -274,222 +217,191 @@ The following configuration options are available: ### Advanced Config Options -* `"MAXIM_PATH"` - * This option must point to the root installation directory of the MaximSDK. - * It should be placed in the _global_ user settings.json file during first-time VSCode-Maxim setup. See [Installation](#installation). - -* `"terminal.integrated.env.[platform]:Path"` - * This prepends the location of toolchain binaries to the system `Path` used by VSCode's integrated terminal. - * The Path is not sanitized by default, which means that the terminal inherits the system path. - * Don't touch unless you know what you're doing :) - -* `"project_name"` - * Sets the name of project. This is used in other config options such as `program_file`. - * Default value: `"${workspaceFolderBasename}"` - -* `"program_file"` - * Sets the name of the file to flash and debug. This is provided in case it's needed, but for most use cases should be left at its default. - * File extension must be included. - * Default value: `"${config:project_name}.elf"` - -* `"symbol_file"` - * Sets the name of the file that GDB will load debug symbols from. - * File extension must be included. - * Default value: `"${config:program_file}"` - -* `"M4_OCD_interface_file"` - * Sets the OpenOCD interface file to use to connect to the Arm M4 core. This should match the debugger being used for the M4 core. - * The `MaximSDK/Tools/OpenOCD/scripts/interface` folder is searched for the file specified by this setting. - * `.cfg` file extension must be included. - * Default value: `"cmsis-dap.cfg"` - -* `"M4_OCD_target_file"` - * Sets the OpenOCD target file to use for the Arm M4 core. This should match the target microcontroller. - * `.cfg` file extension must be included. - * The `MaximSDK/Tools/OpenOCD/scripts/target` folder is searched for the file specified by this setting. - * Default value: `"${config:target}.cfg"` - -* `"RV_OCD_interface_file"` - * Sets the OpenOCD interface file to use to connect to the RISC-V core. This should match the debugger being used for the RISC-V core. - * The `MaximSDK/Tools/OpenOCD/scripts/interface` folder is searched for the file specified by this setting. - * `.cfg` file extension must be included. - * Default value: `"ftdi/olimex-arm-usb-ocd-h.cfg"` - -* `"RV_OCD_target_file"` - * Sets the OpenOCD target file to use for the RISC-V core. - * The `MaximSDK/Tools/OpenOCD/scripts/target` folder is searched for the file specified by this setting. - * `.cfg` file extension must be included. - * Default value: `"${config:target}_riscv.cfg"` - -* `"v_Arm_GCC"` - * Sets the version of the Arm Embedded GCC to use, including toolchain binaries and the standard library version. - * This gets parsed into `ARM_GCC_path`. - * Default value: `"10.3"` - -* `"v_xPack_GCC"` - * Sets the version of the xPack RISC-V GCC to use. - * This gets parsed into `xPack_GCC_path`. - * Default value: `"10.2.0-1.2"` - -* `"OCD_path"` - * Where to find the OpenOCD. - * Default value: `"${config:MAXIM_PATH}/Tools/OpenOCD"` - -* `"ARM_GCC_path"` - * Where to find the Arm Embedded GCC Toolchain. - * Default value: `"${config:MAXIM_PATH}/Tools/GNUTools/${config:v_Arm_GCC}"` - -* `"xPack_GCC_path"` - * Where to find the RISC-V GCC Toolchain. - * Default value: `"${config:MAXIM_PATH}/Tools/xPack/riscv-none-embed-gcc/${config:v_xPack_GCC}"` - -* `"Make_path"` - * Where to find Make binaries (only used on Windows) - * Default value: `"${config:MAXIM_PATH}/Tools/MSYS2/usr/bin"` +#### `"MAXIM_PATH"` -### Setting Search Paths for Intellisense +* This option must point to the root installation directory of the MaximSDK. +* It should be placed in the _global_ user settings.json file during first-time VSCode-Maxim setup. See [Installation](#installation). -VS Code's intellisense engine must be told where to find the header files for your source code. By default, Maxim's perpiheral drivers, the C standard libraries, and all of the sub-directories of the workspace will be searched for header files to use with Intellisense. If VS Code throws an error on an `#include` statement (and the file exists), then a search path is most likely missing. +#### `"terminal.integrated.env.[platform]:Path"` -To add additional search paths : +* This prepends the location of toolchain binaries to the system `Path` used by VSCode's integrated terminal. +* The Path is not sanitized by default, which means that the terminal inherits the system path. +* Don't touch unless you know what you're doing :) -1. Open the `.vscode/settings.json` file. +#### `"project_name"` -2. Add the include path(s) to the `C_Cpp.default.includePath` list. The paths set here should contain header files, and will be searched by the Intellisense engine and when using "Go to Declaration" in the editor. +* Sets the name of project. This is used in other config options such as `program_file`. +* Default value: `"${workspaceFolderBasename}"` -3. Add the path(s) to any relevant implementation files to the `C_Cpp.default.browse.path` list. This list contains the paths that will be searched when using "Go to Definition". +#### `"program_file"` -## Die Types to Part Numbers - -The MaximSDK's peripheral driver filenames are written using die types instead of external part numbers. This table shows which part numbers correspond to each die type, which is useful when browsing through source file definitions in Maxim's peripheral drivers. - -| Die Type | Part Number | -| -------- | ----------- | -| ES17 | MAX32520 | -| ME10 | MAX32650 | -| ME11 | MAX32660 | -| ME13 | MAX32570 | -| ME14 | MAX32665 | -| ME15 | MAX32670 | -| ME16 | MAX32675 | -| ME17 | MAX32655 | -| ME18 | MAX32690 | -| ME21 | MAX32672 | -| AI85 | MAX78000 | -| AI87 | MAX78002 | +* Sets the name of the file to flash and debug. This is provided in case it's needed, but for most use cases should be left at its default. +* File extension must be included. +* Default value: `"${config:project_name}.elf"` -## Project Creation +#### `"symbol_file"` -### Option 1. Copying a Pre-Made Project +* Sets the name of the file that GDB will load debug symbols from. +* File extension must be included. +* Default value: `"${config:program_file}"` -Copying a pre-made example project is a great way to get rolling quickly, and is currently the recommended method for creating new projects. +#### `"M4_OCD_interface_file"` -The release package for this project (Located at Tools/VSCode-Maxim in the MaximSDK) contains a `New_Project` folder designed for such purposes. Additionally, any of the VS Code-enabled Example projects can be copied from the SDK. +* Sets the OpenOCD interface file to use to connect to the Arm M4 core. This should match the debugger being used for the M4 core. +* The `MaximSDK/Tools/OpenOCD/scripts/interface` folder is searched for the file specified by this setting. +* `.cfg` file extension must be included. +* Default value: `"cmsis-dap.cfg"` -1. Copy the existing project folder to an accessible location. This will be the location of your new project. +#### `"M4_OCD_target_file"` -2. (Optional) Rename the folder. For example, I might rename the folder to `MyProject`. +* Sets the OpenOCD target file to use for the Arm M4 core. This should match the target microcontroller. +* `.cfg` file extension must be included. +* The `MaximSDK/Tools/OpenOCD/scripts/target` folder is searched for the file specified by this setting. +* Default value: `"${config:target}.cfg"` -3. Open the project in VS Code (`File -> Open Folder...`) +#### `"RV_OCD_interface_file"` -4. Set your target microcontroller and board correctly. See [Basic Config Options](#basic-config-options) +* Sets the OpenOCD interface file to use to connect to the RISC-V core. This should match the debugger being used for the RISC-V core. +* The `MaximSDK/Tools/OpenOCD/scripts/interface` folder is searched for the file specified by this setting. +* `.cfg` file extension must be included. +* Default value: `"ftdi/olimex-arm-usb-ocd-h.cfg"` -5. `CTRL+SHIFT+P -> Reload Window` to re-parse the project settings. +#### `"RV_OCD_target_file"` -6. That's it! The existing project is ready to build, debug, and modify. +* Sets the OpenOCD target file to use for the RISC-V core. +* The `MaximSDK/Tools/OpenOCD/scripts/target` folder is searched for the file specified by this setting. +* `.cfg` file extension must be included. +* Default value: `"${config:target}_riscv.cfg"` -### Option 2 - Creating a Project from Scratch +#### `"v_Arm_GCC"` -If you want to start from scratch, take this option. +* Sets the version of the Arm Embedded GCC to use, including toolchain binaries and the standard library version. +* This gets parsed into `ARM_GCC_path`. +* Default value: `"10.3"` -1. Create your project folder. For example, I might create a new project in a workspace folder with the path: `C:\Users\Jake.Carter\workspace\MyNewProject`. +#### `"v_xPack_GCC"` -2. Copy the **contents** of the `Inject` folder into the project folder created in step 2. This includes a `.vscode` folder and a `Makefile`. In the example above, the contents of the 'MyProject' folder would be the following : +* Sets the version of the xPack RISC-V GCC to use. +* This gets parsed into `xPack_GCC_path`. +* Default value: `"10.2.0-1.2"` - ```shell - C:\Users\Jake.Carter\workspace\MyNewProject - +-- \.vscode - +-- Makefile - ``` +#### `"OCD_path"` -3. Open the project in VS Code (`File -> Open Folder...`) +* Where to find the OpenOCD. +* Default value: `"${config:MAXIM_PATH}/Tools/OpenOCD"` -4. Set your target microcontroller correctly. See [Basic Config Options](#basic-config-options). +#### `"ARM_GCC_path"` -5. `CTRL+SHIFT+P -> Reload Window` to re-parse the project settings. +* Where to find the Arm Embedded GCC Toolchain. +* Default value: `"${config:MAXIM_PATH}/Tools/GNUTools/${config:v_Arm_GCC}"` -6. Fundamentally, that's it. Your new empty project can now be opened with `File > Open Folder` from within VS Code. However, you'll probably want to add some source code. See [Configuring the Makefile](#configuring-the-makefile). +#### `"xPack_GCC_path"` -## Troubleshooting +* Where to find the RISC-V GCC Toolchain. +* Default value: `"${config:MAXIM_PATH}/Tools/xPack/riscv-none-embed-gcc/${config:v_xPack_GCC}"` -Before troubleshooting, ensure that you are using the project files from the latest VSCode-Maxim version, and that the version number of Visual Studio Code and the C/C++ extension match the release notes. Sometimes, issues are caused by VS Code auto-updates. +#### `"Make_path"` -Additionally, ensure that your MaximSDK is updated to the latest version. You can use the "MaintenanceTool" application in the root directory of the SDK installation. +* Where to find Make binaries (only used on Windows) +* Default value: `"${config:MAXIM_PATH}/Tools/MSYS2/usr/bin"` -### Testing the Setup +#### `"C_Cpp.default.includePath"` -Opening a VSCode-Maxim project with `File > Open Folder` should make Maxim's toolchain accessible from the integrated terminal. To test that everything is working properly : +* Which paths to search to find header (.h) files. +* Does not recursively search by default. To recursively search, use `/**`. -1. Navigate to the open `TERMINAL` tab on the bottom of the VS Code application. If a terminal is not open, you can open a new terminal with `Terminal > New Terminal` or (Ctrl+Shift+`). +#### `"C_Cpp.default.browse.path"` - ![Terminal image](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/Terminal.JPG) +* Which paths to search to find source (.c) files. +* Does not recursively search by default. To recursively search, use `/**`. -2. The following commands to retrieve version numbers should be able to be run successfully from within the terminal : +#### `"C_Cpp.default.defines"` - * `make -v` - * `openocd -v` - * `arm-none-eabi-gcc -v` - * `arm-none-eabi-gdb -v` +* Sets the compiler definitions to use for the intellisense engine. +* Most definitions should be defined in header files, but if a definition is missing it can be entered here to get the intellisense engine to recognize it. - For example, the `make -v` command should similar to the following: +### Setting Search Paths for Intellisense - ![Make -v example output](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/make_test.JPG) +VS Code's intellisense engine must be told where to find the header files for your source code. By default, Maxim's perpiheral drivers, the C standard libraries, and all of the sub-directories of the workspace will be searched for header files to use with Intellisense. If VS Code throws an error on an `#include` statement (and the file exists), then a search path is most likely missing. -If the tools are not accessible from the terminal, then the system settings and/or project settings must be examined further. (Troubleshooting guide is in progress) +To add additional search paths : -### Common Issues Caused by a Bad MAXIM_PATH +1. Open the `.vscode/settings.json` file. -* Large 'Problem' count when opening VS Code +2. Add the include path(s) to the `C_Cpp.default.includePath` list. The paths set here should contain header files, and will be searched by the Intellisense engine and when using "Go to Declaration" in the editor. - ![Problems Screenshot](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/issue_includeerrors.jpg) +3. Add the path(s) to any relevant implementation files to the `C_Cpp.default.browse.path` list. This list contains the paths that will be searched when using "Go to Definition". -* "Unable to resolve configuration with compilerPath..." +### Editing the Makefile - ![Compiler Path Issue](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/issue_compilerpath.jpg) +At the heart of every project is its `Makefile`. Build Tasks are essentially a wrapper around the Makefile. Adding source code files to the build, setting compiler flags, linking libraries, etc. must be done by directly editing this file. -The issues above are usually caused by a missing or improperly set "MAXIM_PATH" global settings.json variable. +The usage guidelines below are specific to Maxim's Makefiles. The [GNU Make Manual](https://www.gnu.org/software/make/manual/html_node/index.html) is a good one to have on hand for documentation regarding Makefiles in general. -If you see the issues below ensure that you have set "MAXIM_PATH" in your _global_ user settings.json file, and that this path matches the location of the MaximSDK installation on your system. +#### Adding Source Code Files -This can be resolved by double checking that the [Installation](#installation) procedure has been followed exactly. +* VS Code's editor can create and add new files to a project, but they won't be added to the build automatically. The Makefile must be told which source code files to build, and where to find them. +* Add a source file to the build with `SRCS += yourfile.c` +* The Makefile looks for project source files in the `/src` directory by default. Add additional directories to search with `VPATH += yoursourcedirectory` +* The Makefile looks for project header files in the `/src` directory by default. Add additional directories to search with `IPATH += yourincludedirectory` -You can check the MAXIM_PATH on the VS Code terminal with the following commands... +#### Compiler Flags -(Windows cmd) +* Compiler flags can be added/changed via the `PROJ_CFLAGS` variable. +* Add a new flag to be passed to the compiler with `PROJ_CFLAGS += -yourflag`. Flags are passed in the order that they are added to the `PROJ_CFLAGS` variable. -```shell -echo %MAXIM_PATH% -``` +#### Linking Libraries -(Windows powershell) +* Additional libraries can be linked via the `PROJ_LIBS` variable. Add a new library to the build with `PROJ_LIBS += yourlibraryname`. + * Note : Do not include the 'lib' part of the library name, or the file extension. For example, to link `libarm_cortexM4lf_math.a` set `PROJ_LIBS += arm_cortexM4lf_math`. +* Tell the linker where to find the library with the '-L' linker flag. Set `PROJ_LDFLAGS += -Lpathtoyourlibrary`. For example, set `PROJ_LDFLAGS += -L./lib` to search a 'lib' directory inside of the project for libraries. -```shell -echo $env:MAXIM_PATH -``` +#### Optimization Level -(Linux/MacOS) +* The optimization level that the compiler uses can be set by changing the `MXC_OPTIMIZE_CFLAGS` variable. +* See [GCC Optimization Options](https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html) for more details on available optimization levels. For example, disable optimization with `MXC_OPTIMIZE_CFLAGS = -O0` -```shell -printenv | grep MAXIM_PATH -``` +## Project Creation -... which should print the exact location of the MaximSDK installation. +### Option 1. Copying a Pre-Made Project + +Copying a pre-made example project is a great way to get rolling quickly, and is currently the recommended method for creating new projects. + +The release package for this project (Located at Tools/VSCode-Maxim in the MaximSDK) contains a `New_Project` folder designed for such purposes. Additionally, any of the VS Code-enabled Example projects can be copied from the SDK. + +1. Copy the existing project folder to an accessible location. This will be the location of your new project. + +2. (Optional) Rename the folder. For example, I might rename the folder to `MyProject`. + +3. Open the project in VS Code (`File -> Open Folder...`) + +4. Set your target microcontroller and board correctly. See [Basic Config Options](#basic-config-options) + +5. `CTRL+SHIFT+P -> Reload Window` to re-parse the project settings. + +6. That's it! The existing project is ready to build, debug, and modify. + +### Option 2 - Creating a Project from Scratch + +If you want to start from scratch, take this option. + +1. Create your project folder. For example, I might create a new project in a workspace folder with the path: `C:\Users\Jake.Carter\workspace\MyNewProject`. + +2. Copy the **contents** of the `Inject` folder into the project folder created in step 2. This includes a `.vscode` folder and a `Makefile`. In the example above, the contents of the 'MyProject' folder would be the following : + + ```shell + C:\Users\Jake.Carter\workspace\MyNewProject + +-- \.vscode + +-- Makefile + ``` -### Strange Debugger Behavior +3. Open the project in VS Code (`File -> Open Folder...`) -If you debugger is behaving strangely (which might consist of skipping code, throwing hard faults, failing to find function definitions, etc.) ensure that the program you're debugging matches the latest build output of the project. These symptoms are usually caused by a mismatch between the build output file and the contents of the micro's flash. +4. Set your target microcontroller correctly. See [Basic Config Options](#basic-config-options). + +5. `CTRL+SHIFT+P -> Reload Window` to re-parse the project settings. -This issue is can usually be fixed by running the "Flash" build task. Remember - flashing does not happen automatically when launching the debugger. +6. Fundamentally, that's it. Your new empty project can now be opened with `File > Open Folder` from within VS Code. However, you'll probably want to add some source code. See [Configuring the Makefile](#configuring-the-makefile). ## Issue Tracker From ee446ee78f86ef9d4a5322df0c4bf35d5a22969c Mon Sep 17 00:00:00 2001 From: Jake Carter Date: Wed, 17 Aug 2022 18:22:43 -0500 Subject: [PATCH 22/55] Sync up the VS Code starter projects with the upgraded Makefile system --- MaximSDK/Inject/Makefile | 273 ++++++++++++++---- MaximSDK/Inject/project.mk | 11 + .../New_Project/.vscode/c_cpp_properties.json | 2 +- MaximSDK/New_Project/Makefile | 273 ++++++++++++++---- MaximSDK/New_Project/project.mk | 11 + .../Template/.vscode/c_cpp_properties.json | 2 +- 6 files changed, 470 insertions(+), 102 deletions(-) create mode 100644 MaximSDK/Inject/project.mk create mode 100644 MaximSDK/New_Project/project.mk diff --git a/MaximSDK/Inject/Makefile b/MaximSDK/Inject/Makefile index aa6f3e8..786f356 100644 --- a/MaximSDK/Inject/Makefile +++ b/MaximSDK/Inject/Makefile @@ -30,84 +30,257 @@ # * ownership rights. # ******************************************************************************* - ############################################################################### -# Main configuration -# Below are the most commonly needed configuration options for this Makefile. -# You shouldn't need to touch anything else unless advanced configuration is required. +# ** Readme! ** +# Don't edit this file! Edit "project.mk" instead... -# Source files to compile for this project (add path to VPATH below) -SRCS += main.c +# This is the core Makefile for a MaximSDK project. The configuration below +# is made to be suitable for most use-cases, and you normally shouldn't ever +# need to edit this file directly. Instead, if you do need to modify the build system +# for your project use the "project.mk" file to override and/or add to the +# various "API"-like configuration variables that are available. -# Where to find source files for this project -VPATH += ./src +# You can also set most configuration variables on the command-line or in your +# system's environment variables. If you're using a supported IDE, it will +# offer its own options for overriding the available configuration variables. -# Where to find header files for this project -IPATH += ./src +# For more details on what configuration variables are available, see the sections +# of this Makefile below. Each section contains a description and a list of +# options. -# Set compiler flags -PROJ_CFLAGS+=-Wall # Enable warnings -PROJ_CFLAGS+=-DMXC_ASSERT_ENABLE # Enable assertion checking for development +# For a more comprehensive overview of Make itself, see https://www.gnu.org/software/make/manual/ -# Set compiler optimization level -MXC_OPTIMIZE_CFLAGS=-Og - ############################################################################### +# ******************************************************************************* +# Set the target microcontroller and board to compile for. + +# Every TARGET microcontroller has some Board Support Packages (BSPs) that are available +# for it under the MaximSDK/Libraries/Boards/TARGET folder. The BSP that gets +# selected is MaximSDK/Libraries/Boards/TARGET/BOARD. + +# Configuration Variables: +# - TARGET : Override the default target microcontroller. Ex: TARGET=MAX78000 +# - BOARD : Override the default BSP (case sensitive). Ex: BOARD=EvKit_V1, BOARD=FTHR_RevA -# Set the MAKE variable. This eliminates issues with some setups -MAKE=make ifeq "$(TARGET)" "" -$(error target must be specified! Set the TARGET variable.) +# Default target microcontroller +TARGET := MAX78000 +TARGET_UC := MAX78000 +TARGET_LC := max78000 +else +# "TARGET" has been overridden in the environment or on the command-line. +# We need to calculate an upper and lowercase version of the part number, +# because paths on Linux and MacOS are case-sensitive. +TARGET_UC := $(subst m,M,$(subst a,A,$(subst x,X,$(TARGET)))) +TARGET_LC := $(subst M,m,$(subst A,a,$(subst X,x,$(TARGET)))) endif -# Default board used. This is overridden in settings.json -ifeq "$(BOARD)" "" -$(error board must be specified! Set the BOARD variable.) -endif +# Default board. +BOARD ?= EvKit_V1 -# Set output filename -ifeq "$(PROJECT)" "" -PROJECT=$(TARGET) +# ******************************************************************************* +# Locate the MaximSDK + +# This Makefile needs to know where to find the MaximSDK, and the MAXIM_PATH variable +# should point to the root directory of the MaximSDK installation. Setting this manually +# is usually only required if you're working on the command-line. + +# If MAXIM_PATH is not specified, we assume the project still lives inside of the MaximSDK +# and move up from this project's original location. + +# Configuration Variables: +# - MAXIM_PATH : Tell this Makefile where to find the MaximSDK. Ex: MAXIM_PATH=C:/MaximSDK + + +ifneq "$(MAXIM_PATH)" "" +# Sanitize MAXIM_PATH for backslashes +MAXIM_PATH := $(subst \,/,$(MAXIM_PATH)) +# Locate some other useful paths... +LIBS_DIR := $(abspath $(MAXIM_PATH)/Libraries) +CMSIS_ROOT := $(LIBS_DIR)/CMSIS endif -# Create Target name variables -TARGET_UC:=$(shell echo $(TARGET) | tr a-z A-Z) -TARGET_LC:=$(shell echo $(TARGET) | tr A-Z a-z) +# ******************************************************************************* +# Include project Makefile. We do this after formulating TARGET, BOARD, and MAXIM_PATH +# in case project.mk needs to reference those values. However, we also include +# this as early as possible in the Makefile so that it can append to or override +# the variables below. + -# Select 'GCC' or 'IAR' compiler -COMPILER=GCC +include ./project.mk +$(info Loaded project.mk) + +# ******************************************************************************* +# Final path sanitization and re-calculation. No options here. -# This is the path to the CMSIS root directory ifeq "$(MAXIM_PATH)" "" -LIBS_DIR=../../../Libraries +# MAXIM_PATH is still not defined... +DEPTH := ../../../ +MAXIM_PATH := $(abspath $(DEPTH)) +$(warning Warning: MAXIM_PATH is not set! It's recommended to set MAXIM_PATH in your environment or in project.mk) +$(warning Warning: Attempting to use $(MAXIM_PATH) calculated from relative path) else -LIBS_DIR=/$(subst \,/,$(subst :,,$(MAXIM_PATH))/Libraries) +# Sanitize MAXIM_PATH for backslashes +MAXIM_PATH := $(subst \,/,$(MAXIM_PATH)) endif -#LIBS_DIR = ./Libraries -CMSIS_ROOT=$(LIBS_DIR)/CMSIS +# Final recalculation of LIBS_DIR/CMSIS_ROOT +LIBS_DIR := $(abspath $(MAXIM_PATH)/Libraries) +CMSIS_ROOT := $(LIBS_DIR)/CMSIS -#Use this for other library make files so they are all based off the same as root as the project +# One final UC/LC check in case user set TARGET in project.mk +TARGET_UC := $(subst m,M,$(subst a,A,$(subst x,X,$(TARGET)))) +TARGET_LC := $(subst M,m,$(subst A,a,$(subst X,x,$(TARGET)))) + +export TARGET +export TARGET_UC +export TARGET_LC export CMSIS_ROOT +# TODO: Remove dependency on exports for these variables. + +# ******************************************************************************* +# Set up search paths, and auto-detect all source code on those paths. + +# The following paths are searched by default, where "./" is the project directory. +# ./ +# ├─ *.h +# ├─ *.c +# ├─include (optional) +# └─ *.h +# ├─src (optional) +# └─ *.c + +# Configuration Variables: +# - VPATH : Tell this Makefile to search additional locations for source (.c) files. +# You should use the "+=" operator with this option. +# Ex: VPATH += your/new/path +# - IPATH : Tell this Makefile to search additional locations for header (.h) files. +# You should use the "+=" operator with this option. +# Ex: VPATH += your/new/path +# - SRCS : Tell this Makefile to explicitly add a source (.c) file to the build. +# This is really only useful if you want to add a source file that isn't +# on any VPATH, in which case you can add the full path to the file here. +# You should use the "+=" operator with this option. +# Ex: SRCS += your/specific/source/file.c +# - AUTOSEARCH : Set whether this Makefile should automatically detect .c files on +# VPATH and add them to the build. This is enabled by default. Set +# to 0 to disable. If autosearch is disabled, source files must be +# manually added to SRCS. +# Ex: AUTOSEARCH = 0 + + +# Where to find source files for this project. +VPATH += . +VPATH := $(VPATH) + +# Where to find header files for this project +IPATH += . +IPATH := $(IPATH) + +AUTOSEARCH ?= 1 +ifeq ($(AUTOSEARCH), 1) +# Auto-detect all C source files on VPATH +SRCS += $(wildcard $(addsuffix /*.c, $(VPATH))) +endif + +# Collapse SRCS before passing them on to the next stage +SRCS := $(SRCS) + +# ******************************************************************************* +# Set the output filename + +# Configuration Variables: +# - PROJECT : Override the default output filename. Ex: PROJECT=MyProject + + +# The default value creates a file named after the target micro. Ex: MAX78000.elf +PROJECT ?= $(TARGET_UC) + +# ******************************************************************************* +# Compiler options + +# Configuration Variables: +# - MXC_OPTIMIZE_CFLAGS : Override the default compiler optimization level. +# Ex: MXC_OPTIMIZE_CFLAGS = -O2 +# - PROJ_CFLAGS : Add additional compiler flags to the build. +# You should use the "+=" operator with this option. +# Ex: PROJ_CFLAGS += -Wextra +# - MFLOAT_ABI : Set the floating point acceleration level. +# The only options are "hard", "soft", or "softfp". +# Ex: MFLOAT_ABI = hard +# - LINKERFILE : Override the default linkerfile. +# Ex: LINKERFILE = customlinkerfile.ld + + +# Select 'GCC' or 'IAR' compiler +ifeq "$(COMPILER)" "" +COMPILER := GCC +endif + +# Set compiler optimization level +ifeq "$(MAKECMDGOALS)" "release" +# Optimization level for "release" builds +MXC_OPTIMIZE_CFLAGS := -O2 +else +# Optimization level for default builds +MXC_OPTIMIZE_CFLAGS := -Og +endif + +# Set compiler flags +PROJ_CFLAGS += -Wall # Enable warnings +PROJ_CFLAGS += -DMXC_ASSERT_ENABLE + +# Set hardware floating point acceleration. +# Options are: +# - hard +# - soft +# - softfp (default if MFLOAT_ABI is not set) +MFLOAT_ABI ?= softfp +# MFLOAT_ABI must be exported to other Makefiles, who check this too +export MFLOAT_ABI + +# Set the default linkerfile. Since the core Makefiles later add the location of Maxim's +# linkerfiles to VPATH, and the local project directory has also been added to VPATH, Make +# will search both locations for the specified linkerfile if it can't find it by its path alone. +# The result is that overriding LINKERFILE with the filename of one of Maxim's alternate linkerfiles +# (ex: LINKERFILE=max78000_arm.ld) will work just the same as LINKERFILE=mycustom.ld +# even if mycustom.ld lives locally to this project. + +ifeq "$(RISCV_CORE)" "" +# Default linkerfile is only specified for standard Arm-core projects. +# Otherwise, gcc_riscv.mk sets the appropriate riscv linkerfile. +LINKERFILE ?= $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/GCC/$(TARGET_LC).ld +endif + +# This path contains system-level intialization files for the target micro. Add to the build. VPATH += $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source -# Point this variable to a linker file to override the default file -LINKER=$(TARGET_LC).ld -LINKERFILE=$(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/GCC/$(LINKER) +# ******************************************************************************* +# Libraries + +# This section offers "toggle switches" to include or exclude the libraries that +# are available in the MaximSDK. Set a configuration variable to 1 to include the +# library in the build, or 0 to exclude. -################################################################################ -# Include external library makefiles here +# Each library may also have its own library specific configuration variables. See +# Libraries/libs.mk for more details. -# Include the BSP -BOARD_DIR=$(LIBS_DIR)/Boards/$(TARGET_UC)/$(BOARD) -include $(BOARD_DIR)/board.mk +# Configuration variables: +# - LIB_BOARD : Include the Board-Support Package (BSP) library. (Enabled by default) +# - LIB_PERIPHDRIVERS : Include the peripheral driver library. (Enabled by default) +# - LIB_CMSIS_DSP : Include the CMSIS-DSP library. +# - LIB_CORDIO : Include the Cordio BLE library +# - LIB_FCL : Include the Free Cryptographic Library (FCL) +# - LIB_FREERTOS : Include the FreeRTOS and FreeRTOS-Plus-CLI libraries +# - LIB_LC3 : Include the Low Complexity Communication Codec (LC3) library +# - LIB_LTTLEFS : Include the "little file system" (littleFS) library +# - LIB_LWIP : Include the lwIP library +# - LIB_MAXUSB : Include the MAXUSB library +# - LIB_SDHC : Include the SDHC library -# Include the peripheral driver -PERIPH_DRIVER_DIR=$(LIBS_DIR)/PeriphDrivers -include $(PERIPH_DRIVER_DIR)/periphdriver.mk -export PERIPH_DRIVER_DIR +include $(LIBS_DIR)/libs.mk -################################################################################ +# ******************************************************************************* # Include the rules for building for this target. All other makefiles should be # included before this one. include $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/$(COMPILER)/$(TARGET_LC).mk diff --git a/MaximSDK/Inject/project.mk b/MaximSDK/Inject/project.mk new file mode 100644 index 0000000..45184da --- /dev/null +++ b/MaximSDK/Inject/project.mk @@ -0,0 +1,11 @@ +# This file can be used for project configuration. +# It's a sibling to the core "Makefile", which offers +# various configuration variables that you can set here +# if the default setup isn't suitable. + +# See the comments in the "Makefile" for a detailed +# description of the default behavior and the full list of +# available options. + + + diff --git a/MaximSDK/New_Project/.vscode/c_cpp_properties.json b/MaximSDK/New_Project/.vscode/c_cpp_properties.json index bd9d5ef..dfbed47 100644 --- a/MaximSDK/New_Project/.vscode/c_cpp_properties.json +++ b/MaximSDK/New_Project/.vscode/c_cpp_properties.json @@ -11,7 +11,7 @@ "intelliSenseMode": "gcc-arm", "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc.exe", "browse": { - "path": [ + "path": [ "${default}" ] } diff --git a/MaximSDK/New_Project/Makefile b/MaximSDK/New_Project/Makefile index aa6f3e8..786f356 100644 --- a/MaximSDK/New_Project/Makefile +++ b/MaximSDK/New_Project/Makefile @@ -30,84 +30,257 @@ # * ownership rights. # ******************************************************************************* - ############################################################################### -# Main configuration -# Below are the most commonly needed configuration options for this Makefile. -# You shouldn't need to touch anything else unless advanced configuration is required. +# ** Readme! ** +# Don't edit this file! Edit "project.mk" instead... -# Source files to compile for this project (add path to VPATH below) -SRCS += main.c +# This is the core Makefile for a MaximSDK project. The configuration below +# is made to be suitable for most use-cases, and you normally shouldn't ever +# need to edit this file directly. Instead, if you do need to modify the build system +# for your project use the "project.mk" file to override and/or add to the +# various "API"-like configuration variables that are available. -# Where to find source files for this project -VPATH += ./src +# You can also set most configuration variables on the command-line or in your +# system's environment variables. If you're using a supported IDE, it will +# offer its own options for overriding the available configuration variables. -# Where to find header files for this project -IPATH += ./src +# For more details on what configuration variables are available, see the sections +# of this Makefile below. Each section contains a description and a list of +# options. -# Set compiler flags -PROJ_CFLAGS+=-Wall # Enable warnings -PROJ_CFLAGS+=-DMXC_ASSERT_ENABLE # Enable assertion checking for development +# For a more comprehensive overview of Make itself, see https://www.gnu.org/software/make/manual/ -# Set compiler optimization level -MXC_OPTIMIZE_CFLAGS=-Og - ############################################################################### +# ******************************************************************************* +# Set the target microcontroller and board to compile for. + +# Every TARGET microcontroller has some Board Support Packages (BSPs) that are available +# for it under the MaximSDK/Libraries/Boards/TARGET folder. The BSP that gets +# selected is MaximSDK/Libraries/Boards/TARGET/BOARD. + +# Configuration Variables: +# - TARGET : Override the default target microcontroller. Ex: TARGET=MAX78000 +# - BOARD : Override the default BSP (case sensitive). Ex: BOARD=EvKit_V1, BOARD=FTHR_RevA -# Set the MAKE variable. This eliminates issues with some setups -MAKE=make ifeq "$(TARGET)" "" -$(error target must be specified! Set the TARGET variable.) +# Default target microcontroller +TARGET := MAX78000 +TARGET_UC := MAX78000 +TARGET_LC := max78000 +else +# "TARGET" has been overridden in the environment or on the command-line. +# We need to calculate an upper and lowercase version of the part number, +# because paths on Linux and MacOS are case-sensitive. +TARGET_UC := $(subst m,M,$(subst a,A,$(subst x,X,$(TARGET)))) +TARGET_LC := $(subst M,m,$(subst A,a,$(subst X,x,$(TARGET)))) endif -# Default board used. This is overridden in settings.json -ifeq "$(BOARD)" "" -$(error board must be specified! Set the BOARD variable.) -endif +# Default board. +BOARD ?= EvKit_V1 -# Set output filename -ifeq "$(PROJECT)" "" -PROJECT=$(TARGET) +# ******************************************************************************* +# Locate the MaximSDK + +# This Makefile needs to know where to find the MaximSDK, and the MAXIM_PATH variable +# should point to the root directory of the MaximSDK installation. Setting this manually +# is usually only required if you're working on the command-line. + +# If MAXIM_PATH is not specified, we assume the project still lives inside of the MaximSDK +# and move up from this project's original location. + +# Configuration Variables: +# - MAXIM_PATH : Tell this Makefile where to find the MaximSDK. Ex: MAXIM_PATH=C:/MaximSDK + + +ifneq "$(MAXIM_PATH)" "" +# Sanitize MAXIM_PATH for backslashes +MAXIM_PATH := $(subst \,/,$(MAXIM_PATH)) +# Locate some other useful paths... +LIBS_DIR := $(abspath $(MAXIM_PATH)/Libraries) +CMSIS_ROOT := $(LIBS_DIR)/CMSIS endif -# Create Target name variables -TARGET_UC:=$(shell echo $(TARGET) | tr a-z A-Z) -TARGET_LC:=$(shell echo $(TARGET) | tr A-Z a-z) +# ******************************************************************************* +# Include project Makefile. We do this after formulating TARGET, BOARD, and MAXIM_PATH +# in case project.mk needs to reference those values. However, we also include +# this as early as possible in the Makefile so that it can append to or override +# the variables below. + -# Select 'GCC' or 'IAR' compiler -COMPILER=GCC +include ./project.mk +$(info Loaded project.mk) + +# ******************************************************************************* +# Final path sanitization and re-calculation. No options here. -# This is the path to the CMSIS root directory ifeq "$(MAXIM_PATH)" "" -LIBS_DIR=../../../Libraries +# MAXIM_PATH is still not defined... +DEPTH := ../../../ +MAXIM_PATH := $(abspath $(DEPTH)) +$(warning Warning: MAXIM_PATH is not set! It's recommended to set MAXIM_PATH in your environment or in project.mk) +$(warning Warning: Attempting to use $(MAXIM_PATH) calculated from relative path) else -LIBS_DIR=/$(subst \,/,$(subst :,,$(MAXIM_PATH))/Libraries) +# Sanitize MAXIM_PATH for backslashes +MAXIM_PATH := $(subst \,/,$(MAXIM_PATH)) endif -#LIBS_DIR = ./Libraries -CMSIS_ROOT=$(LIBS_DIR)/CMSIS +# Final recalculation of LIBS_DIR/CMSIS_ROOT +LIBS_DIR := $(abspath $(MAXIM_PATH)/Libraries) +CMSIS_ROOT := $(LIBS_DIR)/CMSIS -#Use this for other library make files so they are all based off the same as root as the project +# One final UC/LC check in case user set TARGET in project.mk +TARGET_UC := $(subst m,M,$(subst a,A,$(subst x,X,$(TARGET)))) +TARGET_LC := $(subst M,m,$(subst A,a,$(subst X,x,$(TARGET)))) + +export TARGET +export TARGET_UC +export TARGET_LC export CMSIS_ROOT +# TODO: Remove dependency on exports for these variables. + +# ******************************************************************************* +# Set up search paths, and auto-detect all source code on those paths. + +# The following paths are searched by default, where "./" is the project directory. +# ./ +# ├─ *.h +# ├─ *.c +# ├─include (optional) +# └─ *.h +# ├─src (optional) +# └─ *.c + +# Configuration Variables: +# - VPATH : Tell this Makefile to search additional locations for source (.c) files. +# You should use the "+=" operator with this option. +# Ex: VPATH += your/new/path +# - IPATH : Tell this Makefile to search additional locations for header (.h) files. +# You should use the "+=" operator with this option. +# Ex: VPATH += your/new/path +# - SRCS : Tell this Makefile to explicitly add a source (.c) file to the build. +# This is really only useful if you want to add a source file that isn't +# on any VPATH, in which case you can add the full path to the file here. +# You should use the "+=" operator with this option. +# Ex: SRCS += your/specific/source/file.c +# - AUTOSEARCH : Set whether this Makefile should automatically detect .c files on +# VPATH and add them to the build. This is enabled by default. Set +# to 0 to disable. If autosearch is disabled, source files must be +# manually added to SRCS. +# Ex: AUTOSEARCH = 0 + + +# Where to find source files for this project. +VPATH += . +VPATH := $(VPATH) + +# Where to find header files for this project +IPATH += . +IPATH := $(IPATH) + +AUTOSEARCH ?= 1 +ifeq ($(AUTOSEARCH), 1) +# Auto-detect all C source files on VPATH +SRCS += $(wildcard $(addsuffix /*.c, $(VPATH))) +endif + +# Collapse SRCS before passing them on to the next stage +SRCS := $(SRCS) + +# ******************************************************************************* +# Set the output filename + +# Configuration Variables: +# - PROJECT : Override the default output filename. Ex: PROJECT=MyProject + + +# The default value creates a file named after the target micro. Ex: MAX78000.elf +PROJECT ?= $(TARGET_UC) + +# ******************************************************************************* +# Compiler options + +# Configuration Variables: +# - MXC_OPTIMIZE_CFLAGS : Override the default compiler optimization level. +# Ex: MXC_OPTIMIZE_CFLAGS = -O2 +# - PROJ_CFLAGS : Add additional compiler flags to the build. +# You should use the "+=" operator with this option. +# Ex: PROJ_CFLAGS += -Wextra +# - MFLOAT_ABI : Set the floating point acceleration level. +# The only options are "hard", "soft", or "softfp". +# Ex: MFLOAT_ABI = hard +# - LINKERFILE : Override the default linkerfile. +# Ex: LINKERFILE = customlinkerfile.ld + + +# Select 'GCC' or 'IAR' compiler +ifeq "$(COMPILER)" "" +COMPILER := GCC +endif + +# Set compiler optimization level +ifeq "$(MAKECMDGOALS)" "release" +# Optimization level for "release" builds +MXC_OPTIMIZE_CFLAGS := -O2 +else +# Optimization level for default builds +MXC_OPTIMIZE_CFLAGS := -Og +endif + +# Set compiler flags +PROJ_CFLAGS += -Wall # Enable warnings +PROJ_CFLAGS += -DMXC_ASSERT_ENABLE + +# Set hardware floating point acceleration. +# Options are: +# - hard +# - soft +# - softfp (default if MFLOAT_ABI is not set) +MFLOAT_ABI ?= softfp +# MFLOAT_ABI must be exported to other Makefiles, who check this too +export MFLOAT_ABI + +# Set the default linkerfile. Since the core Makefiles later add the location of Maxim's +# linkerfiles to VPATH, and the local project directory has also been added to VPATH, Make +# will search both locations for the specified linkerfile if it can't find it by its path alone. +# The result is that overriding LINKERFILE with the filename of one of Maxim's alternate linkerfiles +# (ex: LINKERFILE=max78000_arm.ld) will work just the same as LINKERFILE=mycustom.ld +# even if mycustom.ld lives locally to this project. + +ifeq "$(RISCV_CORE)" "" +# Default linkerfile is only specified for standard Arm-core projects. +# Otherwise, gcc_riscv.mk sets the appropriate riscv linkerfile. +LINKERFILE ?= $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/GCC/$(TARGET_LC).ld +endif + +# This path contains system-level intialization files for the target micro. Add to the build. VPATH += $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source -# Point this variable to a linker file to override the default file -LINKER=$(TARGET_LC).ld -LINKERFILE=$(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/GCC/$(LINKER) +# ******************************************************************************* +# Libraries + +# This section offers "toggle switches" to include or exclude the libraries that +# are available in the MaximSDK. Set a configuration variable to 1 to include the +# library in the build, or 0 to exclude. -################################################################################ -# Include external library makefiles here +# Each library may also have its own library specific configuration variables. See +# Libraries/libs.mk for more details. -# Include the BSP -BOARD_DIR=$(LIBS_DIR)/Boards/$(TARGET_UC)/$(BOARD) -include $(BOARD_DIR)/board.mk +# Configuration variables: +# - LIB_BOARD : Include the Board-Support Package (BSP) library. (Enabled by default) +# - LIB_PERIPHDRIVERS : Include the peripheral driver library. (Enabled by default) +# - LIB_CMSIS_DSP : Include the CMSIS-DSP library. +# - LIB_CORDIO : Include the Cordio BLE library +# - LIB_FCL : Include the Free Cryptographic Library (FCL) +# - LIB_FREERTOS : Include the FreeRTOS and FreeRTOS-Plus-CLI libraries +# - LIB_LC3 : Include the Low Complexity Communication Codec (LC3) library +# - LIB_LTTLEFS : Include the "little file system" (littleFS) library +# - LIB_LWIP : Include the lwIP library +# - LIB_MAXUSB : Include the MAXUSB library +# - LIB_SDHC : Include the SDHC library -# Include the peripheral driver -PERIPH_DRIVER_DIR=$(LIBS_DIR)/PeriphDrivers -include $(PERIPH_DRIVER_DIR)/periphdriver.mk -export PERIPH_DRIVER_DIR +include $(LIBS_DIR)/libs.mk -################################################################################ +# ******************************************************************************* # Include the rules for building for this target. All other makefiles should be # included before this one. include $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/$(COMPILER)/$(TARGET_LC).mk diff --git a/MaximSDK/New_Project/project.mk b/MaximSDK/New_Project/project.mk new file mode 100644 index 0000000..45184da --- /dev/null +++ b/MaximSDK/New_Project/project.mk @@ -0,0 +1,11 @@ +# This file can be used for project configuration. +# It's a sibling to the core "Makefile", which offers +# various configuration variables that you can set here +# if the default setup isn't suitable. + +# See the comments in the "Makefile" for a detailed +# description of the default behavior and the full list of +# available options. + + + diff --git a/MaximSDK/Template/.vscode/c_cpp_properties.json b/MaximSDK/Template/.vscode/c_cpp_properties.json index bd9d5ef..dfbed47 100644 --- a/MaximSDK/Template/.vscode/c_cpp_properties.json +++ b/MaximSDK/Template/.vscode/c_cpp_properties.json @@ -11,7 +11,7 @@ "intelliSenseMode": "gcc-arm", "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc.exe", "browse": { - "path": [ + "path": [ "${default}" ] } From 2a7dc4accedb95bb5ab0317a35921b35844ed91c Mon Sep 17 00:00:00 2001 From: Jake Carter Date: Thu, 18 Aug 2022 16:26:40 -0500 Subject: [PATCH 23/55] Fix broken link in readme --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 8ac3be0..2ed0620 100644 --- a/readme.md +++ b/readme.md @@ -401,7 +401,7 @@ If you want to start from scratch, take this option. 5. `CTRL+SHIFT+P -> Reload Window` to re-parse the project settings. -6. Fundamentally, that's it. Your new empty project can now be opened with `File > Open Folder` from within VS Code. However, you'll probably want to add some source code. See [Configuring the Makefile](#configuring-the-makefile). +6. Fundamentally, that's it. Your new empty project can now be opened with `File > Open Folder` from within VS Code. However, you'll probably want to add some source code. See [Configuring the Makefile](#editing-the-makefile). ## Issue Tracker From 9f76cddd07e1baa58829633c718823833e48b6dd Mon Sep 17 00:00:00 2001 From: Jake Carter Date: Thu, 25 Aug 2022 21:52:35 -0500 Subject: [PATCH 24/55] Update readme for new Makefile system --- readme.md | 143 ++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 123 insertions(+), 20 deletions(-) diff --git a/readme.md b/readme.md index 2ed0620..788536e 100644 --- a/readme.md +++ b/readme.md @@ -171,7 +171,7 @@ Breakpoints can be set by clicking in the space next to the line number in a sou ![Breakpoint](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/breakpoint.JPG) -## Configuration +## Project Configuration ### Project Settings @@ -191,6 +191,7 @@ The following configuration options are available: * `"target"` * This sets the target microcontroller for the project. + * It sets the `TARGET` [Build Configuration](#build-configuration) variable. * Supported values: * `"MAX32520"` * `"MAX32570"` @@ -332,34 +333,136 @@ To add additional search paths : 3. Add the path(s) to any relevant implementation files to the `C_Cpp.default.browse.path` list. This list contains the paths that will be searched when using "Go to Definition". -### Editing the Makefile +## Build Configuration -At the heart of every project is its `Makefile`. Build Tasks are essentially a wrapper around the Makefile. Adding source code files to the build, setting compiler flags, linking libraries, etc. must be done by directly editing this file. +A project's build system is managed by two files found in the project's root directory. These files are used alongside the [GNU Make](https://www.gnu.org/software/make/) program (which is a part of the MaximSDK toolchain) to locate and build a project's source code for the correct microcontroller. -The usage guidelines below are specific to Maxim's Makefiles. The [GNU Make Manual](https://www.gnu.org/software/make/manual/html_node/index.html) is a good one to have on hand for documentation regarding Makefiles in general. +* `Makefile` +* `project.mk` -#### Adding Source Code Files +![Files are located in the root directory](img/projectmk.JPG) -* VS Code's editor can create and add new files to a project, but they won't be added to the build automatically. The Makefile must be told which source code files to build, and where to find them. -* Add a source file to the build with `SRCS += yourfile.c` -* The Makefile looks for project source files in the `/src` directory by default. Add additional directories to search with `VPATH += yoursourcedirectory` -* The Makefile looks for project header files in the `/src` directory by default. Add additional directories to search with `IPATH += yourincludedirectory` +`Makefile` is the "core" file for the project. It should not be edited directly. Instead, it offers a number of configuration variables that can be overridden in the `project.mk` file, on the command-line, in your system's environment, or via your IDE. It also comes with a default configuration that is suitable for most projects. -#### Compiler Flags +### Default Build Behavior -* Compiler flags can be added/changed via the `PROJ_CFLAGS` variable. -* Add a new flag to be passed to the compiler with `PROJ_CFLAGS += -yourflag`. Flags are passed in the order that they are added to the `PROJ_CFLAGS` variable. +By default, the build system will auto-search the root project directory source code (`*.c`) and header files (`*.h`). The optional "include" and "src" directories are also searched if they exist. -#### Linking Libraries +```shell +Root Project Directory +├─ project.mk +├─ Makefile +├─ *.h +├─ *.c +├─include # <-- Optional + └─ *.h +├─src # <-- Optional + └─ *.c +``` -* Additional libraries can be linked via the `PROJ_LIBS` variable. Add a new library to the build with `PROJ_LIBS += yourlibraryname`. - * Note : Do not include the 'lib' part of the library name, or the file extension. For example, to link `libarm_cortexM4lf_math.a` set `PROJ_LIBS += arm_cortexM4lf_math`. -* Tell the linker where to find the library with the '-L' linker flag. Set `PROJ_LDFLAGS += -Lpathtoyourlibrary`. For example, set `PROJ_LDFLAGS += -L./lib` to search a 'lib' directory inside of the project for libraries. +Additionally, the "core" `Makefile` will come pre-configured for a specific target microcontroller and Board Support Package (BSP). The default BSP will match the main EVKIT for the device. In VSCode-Maxim, the two [Basic Config Options](#basic-config-options) can be used to easily override the target microcontroller and BSP. These options are passed to `make` on the command-line when the ["Build" task](#build-tasks) is run. -#### Optimization Level +For more advanced build configuration, `project.mk` should be used. + +### How to Set a Configuration Variable + +A configuration variable is a [Makefile variable](https://www.gnu.org/software/make/manual/make.html#Using-Variables), and therefore follows the same rules. However, they have been streamlined to be made much easier to use, so most of the official GNU Make documentation is only needed for advanced use-cases. + +To set a configuration variable, use the syntax... + +```Makefile +VARIABLE=VALUE +``` + +... and write a line like this into the `project.mk` file. The `=` operater is used for _most_ configuration variables with a few exceptions (that are clearly documented) when a variable should contain a _list_ of values. In such cases, use the syntax... + +```Makefile +VARIABLE+=VALUE1 +VARIABLE+=VALUE2 +``` + +... to _add_ values to the list. + +For example, if I wanted to enable hardware floating-point acceleration for my project, I would use the `MFLOAT_ABI` configuration variable to set its value to `hard` **project.mk**. The contents might then look as follows: + +(_Inside project.mk_) +```Makefile +# This file can be used for project configuration. + +# To see what options are available open the file +# called "Makefile", which should live next to this one. +# It has a full list of options you can set. + +#BOARD=FTHR_RevA +# ^ For example, you can uncomment this line to make the +# project build for the "FTHR_RevA" board. + +MFLOAT_ABI=hard # Enable hardware floating point acceleration +``` + +It should also be noted that configuration variables can be set on the **command-line** as well. For example... + +```shell +$ make MFlOAT_ABI=hard +``` + +... will have the same effect. + +Additionally, **environment variables** can be used. For example... + +```shell +$ export TARGET=MAX78000 +``` + +... will set all projects to build for the MAX78000. + +However, there is a precedence hierarchy that should be taken into consideration. + +### Precedence Hierarchy + +The precedence hierarchy for the value of a configuration variable is: + +* **command-line > project.mk > environment variable > default value** + +...meaning if a value is set on the command-line _and_ project.mk, the command-line value will take precedence. However, the ["override" directive](https://www.gnu.org/software/make/manual/make.html#Override-Directive) can be used in project.mk to give it max precedence. + +### Configuration Variables Reference + +The project's `Makefile` can be opened to see a full list of available config options, but they are nested among the implementation details of the Makefile itself. This might be fine for those familiar with reading Makefiles, but a clean reference table is also available below. + +| Variable | Description | Example | Details | +|--- | --- | --- | ---| +**Target** +| `TARGET` | Set the target microcontroller | `TARGET=MAX78000` | +| `BOARD` | Set the Board Support Package (BSP) | `BOARD=FTHR_RevA` | Every microcontroller has a number of BSPs available for it that can be found in the `Libraries/Boards/TARGET` folder of the MaximSDK. When you change this option, it's usually a good idea to fully clean your project, then re-build. +**SDK** +| `MAXIM_PATH` | (Optional) Specify the location of the MaximSDK | `MAXIM_PATH=/home/me/MaximSDK` | This optional variable can be used to change where the Makefile looks for the MaximSDK. By default, the Makefile will attempt to locate the MaximSDK with a relative path moving "up" from its original location. This option is most useful when a project is moved _outside_ of the SDK and you're developing on the command-line, since VS Code and Eclipse will set this via an environment variable. It's also useful for re-targeting a project to point to the development repository. +| `CAMERA` | (Optional) Set the Camera drivers to use | `CAMERA=HM0360_MONO` | This option is only useful for the MAX78000 and MAX78002, and sets the camera drivers to use for the project. Permitted values are `HM01B0`, `HM0360_MONO`, `HM0360_COLOR`, `OV5642`, `OV7692` (default), or `PAG7920`. Camera drivers can be found in the `Libraries/MiscDrivers/Camera` folder of the MaximSDK. Depending on the selected camera, a compiler definition may be added to the build. See the `board.mk` Makefile in the active BSP for more details. +**Source Code** +| `VPATH` | Where to search for source (.c) files | `VPATH+=your/source/path` | **Use the `+=` operator with this option**. This controls where the Makefile will look for **source code** files. If `AUTOSEARCH` is enabled (which it is by default) this controls which paths will be searched. If `AUTOSEARCH` is disabled, this tells the Makefile where to look for the files specified by `SRCS`. +| `IPATH` | Where to search for header (.h) files | `IPATH+=your/include/path` | **Use the `+=` operator with this option**. This controls where the Makefile will look for **header** files. _Unlike_ the `VPATH` option, this is not related to `AUTOSEARCH`. Individual header files are _not_ ever manually added into the build. Instead, you only need to specify the _location_ of your header files. +| `AUTOSEARCH` | Automatically search for source (.c) files | `AUTOSEARCH=0` | Enable or disable the automatic detection of .c files on `VPATH` (enabled by default). Set to `0` to disable, or `1` to enable. If autosearch is disabled, source files must be manually added to `SRCS`. +| `SRCS` | List of source (.c) files to add to the build | `SRCS+=./my/other/source.c` | **Use the `+=` operator with this option**. All of the files in this list will be added to the build. If `AUTOSEARCH` is enabled, this is most useful for adding the full absolute path to a singular source file to selectively add to the build. If `AUTOSEARCH` is disabled, _all_ of the source files for the project must be added to `SRCS`, and they must also all be located on an entry in `VPATH`. Otherwise, a full path relative to the Makefile must be used. +| `PROJECT` | Set the output filename | `PROJECT=MyProject` | This controls the output filename of the build. File extensions should _not_ be set here since the output file format may vary depending on the build recipe. For VSCode-Maxim, you should use the [project_name](#projectname) advanced config option instead, which sets `PROJECT` on the command-line [Build Tasks](#build-tasks). +**Compiler** +| `MXC_OPTIMIZE_CFLAGS` | Set the optimization level | `MXC_OPTIMIZE_CFLAGS=-O2` | See [Optimize Options](https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html) for more details. Normal builds will default to `-Og`, which is good for debugging, while release builds will default to `-O2`. +| `PROJ_CFLAGS` | Add a compiler flag to the build | `PROJ_CFLAGS+=-Wextra`, `PROJ_CFLAGS+=-DMYDEFINE` | Compiler flags can be added with this option, including compiler definitions. For each value, the same syntax should be used as if the compiler flag was passed in via the command-line. These can include standard [GCC options](https://gcc.gnu.org/onlinedocs/gcc-10.4.0/gcc/Option-Summary.html#Option-Summary) and/or [ARM-specific](https://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html) options. +| `MFLOAT_ABI` | Set the floating point acceleration level | `MFLOAT_ABI=hard` | Sets the floating-point acceleration level. Permitted values are `hard`, `soft`, `softfp` (default). To enable full hardware acceleration instructions use `hard`, but keep in mind that _all_ libraries your source code uses must also be compiled with `hard`. If there is any conflict, you'll get a linker error. For more details, see `-mfloat-abi` under [ARM Options](https://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html). +**Linker** +| `LINKERFILE` | Set the linkerfile to use | `LINKERFILE=customlinker.ld` | You can use a different linkerfile with this option. The file should exists in `Libraries/CMSIS/Device/Maxim/TARGET/Source/GCC` in the MaximSDK, or it should be placed inside the root directory of the project. +**Libraries** +| `LIB_BOARD` | Include the BSP library (enabled by default) | `LIB_BOARD=0` | Inclusion of the Board-Support Package (BSP) library, which is enabled by default, can be toggled with this variable. This library contains important startup code specific to a microcontroller's evaluation platform, such as serial port initialization, power sequencing, external peripheral initalization, etc. Set to `0` to disable, or `1` to enable. +| `LIB_PERIPHDRIVERS` | Include the peripheral driver library (enabled by default) | `LIB_PERIPHDRIVERS=0` | The peripheral driver library can be toggled with this option. If disabled, you'll lose access to the higher-level driver functions but still have access to the register-level files. Set to `0` to disable, or `1` to enable. +| `LIB_CMSIS_DSP` | Include the CMSIS-DSP library | `LIB_CMSIS_DSP=1` | The [CMSIS-DSP library](https://www.keil.com/pack/doc/CMSIS/DSP/html/index.html) can be enabled with this option. Set to `0` to disable, or `1` to enable. +| `LIB_CORDIO` | Include the Cordio library | `LIB_CORDIO=1` | The Cordio BLE library can be included with this option. This is only applicable towards microcontrollers with an integrated BLE controller. +| `LIB_FCL` | Include the Free Cryptographic Library (FCL) | `LIB_FCL=1` | This option toggles the Free Cryptographic Library (FCL), which is a collection of software-implemented common cryptographic functions can be included with this option. Set to `0` to disable, or `1` to enable. +| `LIB_FREERTOS` | Include the FreeRTOS library | `LIB_FREERTOS=1` | The [FreeRTOS](https://freertos.org/) library can be enabled with this option, which is an open-source Real-Time Operating System (RTOS). Set to `0` to disable, or `1` to enable. +| `LIB_LC3` | Include the LC3 codec library | `LIB_LC3=1` | This option enables the inclusion of the Low Complexity Communication Codec (LC3), which is an efficient low latency audio codec. Set to `0` to disable, or `1` to enable. +| `LIB_LITTLEFS` | Include the littleFS library | `LIB_LITTLEFS=1` | This option toggles the ["Little File System"](https://github.com/littlefs-project/littlefs) library - a small filesystem library designed for microcontrollers. Set to `0` to disable, or `1` to enable. +| `LIB_LWIP` | Include the lwIP library | `LIB_LWIP=1` | | +| `LIB_MAXUSB` | Include the MaxUSB library | `LIB_MAXUSB=1` | This option toggles the inclusion of the MAXUSB library, which facilitates the use of the native USB peripherals on some microcontrollers. Set to `0` to disable, or `1` to enable. +| `LIB_SDHC` | Include the SDHC library | `LIB_SDHC=1` | This options toggles the Secure Digital High Capacity (SDHC) library, which can be used to interface with SD cards. Additionally, it enables the [FatFS](http://elm-chan.org/fsw/ff/00index_e.html) library, which implements a generic FAT filesystem. -* The optimization level that the compiler uses can be set by changing the `MXC_OPTIMIZE_CFLAGS` variable. -* See [GCC Optimization Options](https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html) for more details on available optimization levels. For example, disable optimization with `MXC_OPTIMIZE_CFLAGS = -O0` ## Project Creation @@ -401,7 +504,7 @@ If you want to start from scratch, take this option. 5. `CTRL+SHIFT+P -> Reload Window` to re-parse the project settings. -6. Fundamentally, that's it. Your new empty project can now be opened with `File > Open Folder` from within VS Code. However, you'll probably want to add some source code. See [Configuring the Makefile](#editing-the-makefile). +6. Fundamentally, that's it. Your new empty project can now be opened with `File > Open Folder` from within VS Code. However, you'll probably want to add some source code. See [Editing the Makefile](#editing-the-makefile). ## Issue Tracker From 1de73cbbbc8a831ef2d05bf46f6858f3a357b93c Mon Sep 17 00:00:00 2001 From: Jake Carter Date: Thu, 25 Aug 2022 21:57:46 -0500 Subject: [PATCH 25/55] Add images --- img/J-Link/browse-manually.JPG | Bin 0 -> 46429 bytes img/J-Link/debug.JPG | Bin 0 -> 73838 bytes img/J-Link/flash-jlink.JPG | Bin 0 -> 15903 bytes img/J-Link/flash.JPG | Bin 0 -> 111747 bytes img/J-Link/jlink-debug.JPG | Bin 0 -> 65906 bytes img/J-Link/jlink-path.JPG | Bin 0 -> 25239 bytes img/J-Link/jlinkcfg.JPG | Bin 0 -> 59591 bytes img/J-Link/m4_ocd_interface_file.JPG | Bin 0 -> 79869 bytes img/J-Link/open-settings.JPG | Bin 0 -> 16104 bytes img/J-Link/segger-driver.JPG | Bin 0 -> 57901 bytes img/J-Link/zadig-listall.JPG | Bin 0 -> 49453 bytes img/J-Link/zadig-success.JPG | Bin 0 -> 41694 bytes img/J-Link/zadig.JPG | Bin 0 -> 47791 bytes img/buildtasks.JPG | Bin 19255 -> 15151 bytes img/projectmk.JPG | Bin 0 -> 14640 bytes 15 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 img/J-Link/browse-manually.JPG create mode 100644 img/J-Link/debug.JPG create mode 100644 img/J-Link/flash-jlink.JPG create mode 100644 img/J-Link/flash.JPG create mode 100644 img/J-Link/jlink-debug.JPG create mode 100644 img/J-Link/jlink-path.JPG create mode 100644 img/J-Link/jlinkcfg.JPG create mode 100644 img/J-Link/m4_ocd_interface_file.JPG create mode 100644 img/J-Link/open-settings.JPG create mode 100644 img/J-Link/segger-driver.JPG create mode 100644 img/J-Link/zadig-listall.JPG create mode 100644 img/J-Link/zadig-success.JPG create mode 100644 img/J-Link/zadig.JPG create mode 100644 img/projectmk.JPG diff --git a/img/J-Link/browse-manually.JPG b/img/J-Link/browse-manually.JPG new file mode 100644 index 0000000000000000000000000000000000000000..d0c0f781599a5f49fc2f79864aa0accd60d878b9 GIT binary patch literal 46429 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 LG*F7Se=YnExLyNw literal 0 HcmV?d00001 diff --git a/img/J-Link/flash-jlink.JPG b/img/J-Link/flash-jlink.JPG new file mode 100644 index 0000000000000000000000000000000000000000..d13cd4578a53ae2d89f0a4eb9738a42523d5a580 GIT binary patch literal 15903 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 tSs@f|UJ2P(p}8KZH-{|orRZbAS6 literal 0 HcmV?d00001 diff --git a/img/J-Link/flash.JPG b/img/J-Link/flash.JPG new file mode 100644 index 0000000000000000000000000000000000000000..306ab3af272193b3a6db67a23236d66abffce16a GIT binary patch literal 111747 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 z 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

3q;|Nq>Ax!QB{2@ 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 G5C7Tu#vU>N literal 0 HcmV?d00001 diff --git a/img/J-Link/jlink-debug.JPG b/img/J-Link/jlink-debug.JPG new file mode 100644 index 0000000000000000000000000000000000000000..83b2c192bcc6e17955179a0c445f4f0d01002971 GIT binary patch literal 65906 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 J_kdqZ{|A!k$>0D0 literal 0 HcmV?d00001 diff --git a/img/J-Link/jlink-path.JPG b/img/J-Link/jlink-path.JPG new file mode 100644 index 0000000000000000000000000000000000000000..386811ef46b174e82b0ccc9a1bdd819d5b56ab76 GIT binary patch literal 25239 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 literal 0 HcmV?d00001 diff --git a/img/J-Link/jlinkcfg.JPG b/img/J-Link/jlinkcfg.JPG new file mode 100644 index 0000000000000000000000000000000000000000..4f65d7074c3e7282a6f790d19cfec9c34ffb1419 GIT binary patch literal 59591 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 literal 0 HcmV?d00001 diff --git a/img/J-Link/m4_ocd_interface_file.JPG b/img/J-Link/m4_ocd_interface_file.JPG new file mode 100644 index 0000000000000000000000000000000000000000..294a20d3f957135437eeac1664e6c0435b2dfeb8 GIT binary patch literal 79869 zcmeFY1yo#5w=dYxI3xrD1b26LCrIP&Bseq=dyUzW>{Tkqrx(Y}IfQE(!h)4YZ z_v?>Nl>@+z0DzVjfD-@!-~cetqyXrs)C1Iw`a3WH1C>TYrA@Q4|NH|e0f0we_Nf8b zs5}DHy(}sMsP|D9oIk0*!`}$}jlkas{Efih2>gw}|BeVK+4%T6_;Ay!+qgQQ_{WR~ z{$)>)pzMa?c#MCh+Y=N1N&^K%0D#2Af2IFrTi|5;!S8R|;(tdi`kUv!5%?Q{zY+Kw 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%0DeA;PwF3&yso!6Mb6vb{wmn|pQ#C}XeULR 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 IQA`j2*{%m#9{>OV literal 0 HcmV?d00001 diff --git a/img/J-Link/open-settings.JPG b/img/J-Link/open-settings.JPG new file mode 100644 index 0000000000000000000000000000000000000000..408cdd3f4dc5746ad571bd848563b56f9e052b3d GIT binary patch literal 16104 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 literal 0 HcmV?d00001 diff --git a/img/J-Link/segger-driver.JPG b/img/J-Link/segger-driver.JPG new file mode 100644 index 0000000000000000000000000000000000000000..9d3ac929d35706ef484bf1d0495a4c6919acdc2b GIT binary patch literal 57901 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 literal 0 HcmV?d00001 diff --git a/img/J-Link/zadig-listall.JPG b/img/J-Link/zadig-listall.JPG new file mode 100644 index 0000000000000000000000000000000000000000..b23ad65539b8e55ddfaffad8d8497669cdc07918 GIT binary patch literal 49453 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 literal 0 HcmV?d00001 diff --git a/img/J-Link/zadig-success.JPG b/img/J-Link/zadig-success.JPG new file mode 100644 index 0000000000000000000000000000000000000000..f7f45684598fd18eac2e3a697404e6adfa81451e GIT binary patch literal 41694 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

1dFC=~seM;e)< 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 literal 19255 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 literal 0 HcmV?d00001 From e44d0acdf07b23cf185b532935dbd7b1f8291910 Mon Sep 17 00:00:00 2001 From: Jake Carter Date: Thu, 25 Aug 2022 22:05:37 -0500 Subject: [PATCH 26/55] Update readme --- readme.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/readme.md b/readme.md index 788536e..5853cff 100644 --- a/readme.md +++ b/readme.md @@ -362,7 +362,7 @@ Root Project Directory Additionally, the "core" `Makefile` will come pre-configured for a specific target microcontroller and Board Support Package (BSP). The default BSP will match the main EVKIT for the device. In VSCode-Maxim, the two [Basic Config Options](#basic-config-options) can be used to easily override the target microcontroller and BSP. These options are passed to `make` on the command-line when the ["Build" task](#build-tasks) is run. -For more advanced build configuration, `project.mk` should be used. +For more advanced build configuration, configuration variables should be used. ### How to Set a Configuration Variable @@ -374,7 +374,7 @@ To set a configuration variable, use the syntax... VARIABLE=VALUE ``` -... and write a line like this into the `project.mk` file. The `=` operater is used for _most_ configuration variables with a few exceptions (that are clearly documented) when a variable should contain a _list_ of values. In such cases, use the syntax... +The `=` operater is used for _most_ configuration variables with a few exceptions (that are clearly documented) when a variable should contain a _list_ of values. In such cases, use the syntax... ```Makefile VARIABLE+=VALUE1 @@ -383,7 +383,9 @@ VARIABLE+=VALUE2 ... to _add_ values to the list. -For example, if I wanted to enable hardware floating-point acceleration for my project, I would use the `MFLOAT_ABI` configuration variable to set its value to `hard` **project.mk**. The contents might then look as follows: +In most cases, you should do this from inside of **project.mk**. + +For example, if I wanted to enable hardware floating-point acceleration for my project, I would use the `MFLOAT_ABI` configuration variable to set its value to `hard`. The contents of **project.mk** might then look as follows: (_Inside project.mk_) ```Makefile @@ -408,7 +410,7 @@ $ make MFlOAT_ABI=hard ... will have the same effect. -Additionally, **environment variables** can be used. For example... +Additionally, **environment variables** can be used. For example (on linux)... ```shell $ export TARGET=MAX78000 @@ -436,7 +438,7 @@ The project's `Makefile` can be opened to see a full list of available config op | `TARGET` | Set the target microcontroller | `TARGET=MAX78000` | | `BOARD` | Set the Board Support Package (BSP) | `BOARD=FTHR_RevA` | Every microcontroller has a number of BSPs available for it that can be found in the `Libraries/Boards/TARGET` folder of the MaximSDK. When you change this option, it's usually a good idea to fully clean your project, then re-build. **SDK** -| `MAXIM_PATH` | (Optional) Specify the location of the MaximSDK | `MAXIM_PATH=/home/me/MaximSDK` | This optional variable can be used to change where the Makefile looks for the MaximSDK. By default, the Makefile will attempt to locate the MaximSDK with a relative path moving "up" from its original location. This option is most useful when a project is moved _outside_ of the SDK and you're developing on the command-line, since VS Code and Eclipse will set this via an environment variable. It's also useful for re-targeting a project to point to the development repository. +| `MAXIM_PATH` | (Optional) Specify the location of the MaximSDK | `MAXIM_PATH=/path/to/MSDK` | This optional variable can be used to change where the Makefile looks for the MaximSDK. By default, the Makefile will attempt to locate the MaximSDK with a relative path moving "up" from its original location. This option is most useful when a project is moved _outside_ of the SDK and you're developing on the command-line, since VS Code and Eclipse will set this via an environment variable. It's also useful for re-targeting a project to point to the development repository. | `CAMERA` | (Optional) Set the Camera drivers to use | `CAMERA=HM0360_MONO` | This option is only useful for the MAX78000 and MAX78002, and sets the camera drivers to use for the project. Permitted values are `HM01B0`, `HM0360_MONO`, `HM0360_COLOR`, `OV5642`, `OV7692` (default), or `PAG7920`. Camera drivers can be found in the `Libraries/MiscDrivers/Camera` folder of the MaximSDK. Depending on the selected camera, a compiler definition may be added to the build. See the `board.mk` Makefile in the active BSP for more details. **Source Code** | `VPATH` | Where to search for source (.c) files | `VPATH+=your/source/path` | **Use the `+=` operator with this option**. This controls where the Makefile will look for **source code** files. If `AUTOSEARCH` is enabled (which it is by default) this controls which paths will be searched. If `AUTOSEARCH` is disabled, this tells the Makefile where to look for the files specified by `SRCS`. @@ -449,7 +451,7 @@ The project's `Makefile` can be opened to see a full list of available config op | `PROJ_CFLAGS` | Add a compiler flag to the build | `PROJ_CFLAGS+=-Wextra`, `PROJ_CFLAGS+=-DMYDEFINE` | Compiler flags can be added with this option, including compiler definitions. For each value, the same syntax should be used as if the compiler flag was passed in via the command-line. These can include standard [GCC options](https://gcc.gnu.org/onlinedocs/gcc-10.4.0/gcc/Option-Summary.html#Option-Summary) and/or [ARM-specific](https://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html) options. | `MFLOAT_ABI` | Set the floating point acceleration level | `MFLOAT_ABI=hard` | Sets the floating-point acceleration level. Permitted values are `hard`, `soft`, `softfp` (default). To enable full hardware acceleration instructions use `hard`, but keep in mind that _all_ libraries your source code uses must also be compiled with `hard`. If there is any conflict, you'll get a linker error. For more details, see `-mfloat-abi` under [ARM Options](https://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html). **Linker** -| `LINKERFILE` | Set the linkerfile to use | `LINKERFILE=customlinker.ld` | You can use a different linkerfile with this option. The file should exists in `Libraries/CMSIS/Device/Maxim/TARGET/Source/GCC` in the MaximSDK, or it should be placed inside the root directory of the project. +| `LINKERFILE` | Set the linkerfile to use | `LINKERFILE=newlinker.ld` | You can use a different linkerfile with this option. The file should exists in `Libraries/CMSIS/Device/Maxim/TARGET/Source/GCC` in the MaximSDK, or it should be placed inside the root directory of the project. **Libraries** | `LIB_BOARD` | Include the BSP library (enabled by default) | `LIB_BOARD=0` | Inclusion of the Board-Support Package (BSP) library, which is enabled by default, can be toggled with this variable. This library contains important startup code specific to a microcontroller's evaluation platform, such as serial port initialization, power sequencing, external peripheral initalization, etc. Set to `0` to disable, or `1` to enable. | `LIB_PERIPHDRIVERS` | Include the peripheral driver library (enabled by default) | `LIB_PERIPHDRIVERS=0` | The peripheral driver library can be toggled with this option. If disabled, you'll lose access to the higher-level driver functions but still have access to the register-level files. Set to `0` to disable, or `1` to enable. From 758ddb9e2ddf88bc3a326fff2ea98d0c52a0146f Mon Sep 17 00:00:00 2001 From: Jake Carter Date: Thu, 25 Aug 2022 22:49:49 -0500 Subject: [PATCH 27/55] Update readme.md --- readme.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 5853cff..08cf6b1 100644 --- a/readme.md +++ b/readme.md @@ -342,7 +342,15 @@ A project's build system is managed by two files found in the project's root dir ![Files are located in the root directory](img/projectmk.JPG) -`Makefile` is the "core" file for the project. It should not be edited directly. Instead, it offers a number of configuration variables that can be overridden in the `project.mk` file, on the command-line, in your system's environment, or via your IDE. It also comes with a default configuration that is suitable for most projects. +When the command... + +```shell +$ make +``` + +... is run, the program `make` will load settings from these two files. Then, it will use them to build the project's source code. VSCode-Maxim is a "wrapper" around this Makefile system. + +The file named `Makefile` is the "core" file for the project. It should not be edited directly. Instead, it offers a number of configuration variables that can be overridden in the `project.mk` file, on the command-line, in your system's environment, or via your IDE. It also comes with a default configuration that is suitable for most projects. ### Default Build Behavior From 42671f9228043c5c2a2b1651b2038c353c166836 Mon Sep 17 00:00:00 2001 From: Jake Carter Date: Thu, 25 Aug 2022 23:41:39 -0500 Subject: [PATCH 28/55] Update readme --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 5853cff..8268e66 100644 --- a/readme.md +++ b/readme.md @@ -506,7 +506,7 @@ If you want to start from scratch, take this option. 5. `CTRL+SHIFT+P -> Reload Window` to re-parse the project settings. -6. Fundamentally, that's it. Your new empty project can now be opened with `File > Open Folder` from within VS Code. However, you'll probably want to add some source code. See [Editing the Makefile](#editing-the-makefile). +6. Fundamentally, that's it. Your new empty project can now be opened with `File > Open Folder` from within VS Code. ## Issue Tracker From 8dad02332e32a105e05db20db94ec46aeca278b1 Mon Sep 17 00:00:00 2001 From: Jake Carter Date: Thu, 25 Aug 2022 23:51:39 -0500 Subject: [PATCH 29/55] Update readme.md --- readme.md | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/readme.md b/readme.md index 08cf6b1..37988f7 100644 --- a/readme.md +++ b/readme.md @@ -397,16 +397,19 @@ For example, if I wanted to enable hardware floating-point acceleration for my p (_Inside project.mk_) ```Makefile -# This file can be used for project configuration. +# This file can be used to set build configuration +# variables. These variables are defined in a file called +# "Makefile" that is located next to this one. -# To see what options are available open the file -# called "Makefile", which should live next to this one. -# It has a full list of options you can set. +# For instructions on how to use this system, see +# https://github.com/Analog-Devices-MSDK/VSCode-Maxim/tree/develop#build-configuration #BOARD=FTHR_RevA -# ^ For example, you can uncomment this line to make the +# ^ For example, you can uncomment this line to make the # project build for the "FTHR_RevA" board. +# ********************************************************** + MFLOAT_ABI=hard # Enable hardware floating point acceleration ``` From c7c0bfec911f9448fc81a23635a199d4c50486e3 Mon Sep 17 00:00:00 2001 From: Jake Carter Date: Fri, 26 Aug 2022 10:31:38 -0500 Subject: [PATCH 30/55] Fix typos --- readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/readme.md b/readme.md index 37988f7..236a474 100644 --- a/readme.md +++ b/readme.md @@ -416,7 +416,7 @@ MFLOAT_ABI=hard # Enable hardware floating point acceleration It should also be noted that configuration variables can be set on the **command-line** as well. For example... ```shell -$ make MFlOAT_ABI=hard +$ make MFLOAT_ABI=hard ``` ... will have the same effect. @@ -517,7 +517,7 @@ If you want to start from scratch, take this option. 5. `CTRL+SHIFT+P -> Reload Window` to re-parse the project settings. -6. Fundamentally, that's it. Your new empty project can now be opened with `File > Open Folder` from within VS Code. However, you'll probably want to add some source code. See [Editing the Makefile](#editing-the-makefile). +6. Fundamentally, that's it. Your new empty project can now be opened with `File > Open Folder` from within VS Code. ## Issue Tracker From 06a4f4401e965d2ba48b6a181e4538ef57eb199e Mon Sep 17 00:00:00 2001 From: Jake Carter Date: Fri, 26 Aug 2022 13:31:30 -0500 Subject: [PATCH 31/55] Update readme --- readme.md | 1 + 1 file changed, 1 insertion(+) diff --git a/readme.md b/readme.md index 236a474..69a0b0f 100644 --- a/readme.md +++ b/readme.md @@ -396,6 +396,7 @@ In most cases, you should do this from inside of **project.mk**. For example, if I wanted to enable hardware floating-point acceleration for my project, I would use the `MFLOAT_ABI` configuration variable to set its value to `hard`. The contents of **project.mk** might then look as follows: (_Inside project.mk_) + ```Makefile # This file can be used to set build configuration # variables. These variables are defined in a file called From 948f17f24379095aa2a281027114fc89af212545 Mon Sep 17 00:00:00 2001 From: Jake Carter Date: Fri, 26 Aug 2022 13:36:09 -0500 Subject: [PATCH 32/55] Rename readme.md -> README.md --- readme.md => README.md | 0 maintain.py | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename readme.md => README.md (100%) diff --git a/readme.md b/README.md similarity index 100% rename from readme.md rename to README.md diff --git a/maintain.py b/maintain.py index c696bdd..3c77688 100644 --- a/maintain.py +++ b/maintain.py @@ -83,7 +83,7 @@ def sync(): shutil.copy("MaximSDK/Inject/.vscode/c_cpp_properties.json", "MaximSDK/Template/.vscode/") shutil.copy("MaximSDK/Inject/.vscode/tasks.json", "MaximSDK/Template/.vscode/") shutil.copy("MaximSDK/Inject/.vscode/flash.gdb", "MaximSDK/Template/.vscode/") - shutil.copy("readme.md", "MaximSDK/Template/.vscode/") + shutil.copy("README.md", "MaximSDK/Template/.vscode/") def release(version): sync() From 9b6a6a53931627e64c74fd3d99b25dac9f9980a4 Mon Sep 17 00:00:00 2001 From: Jake Carter Date: Fri, 26 Aug 2022 13:38:22 -0500 Subject: [PATCH 33/55] Sync readme in template --- MaximSDK/Template/.vscode/README.md | 532 ++++++++++++++++++++++++++++ 1 file changed, 532 insertions(+) create mode 100644 MaximSDK/Template/.vscode/README.md diff --git a/MaximSDK/Template/.vscode/README.md b/MaximSDK/Template/.vscode/README.md new file mode 100644 index 0000000..69a0b0f --- /dev/null +++ b/MaximSDK/Template/.vscode/README.md @@ -0,0 +1,532 @@ +# VSCode-Maxim + +_(If you're viewing this document from within Visual Studio Code you can press `CTRL+SHIFT+V` to open a Markdown preview window.)_ + +## Quick Links + +* [VSCode-Maxim Github](https://github.com/Analog-Devices-MSDK/VSCode-Maxim) +* [Wiki](https://github.com/Analog-Devices-MSDK/VSCode-Maxim/wiki) + * If it's not in the readme, check the wiki. + * If it's not in the wiki, open a ticket! + +## Introduction + +VSCode-Maxim is a set of [Visual Studio Code](https://code.visualstudio.com/) project configurations and utilities for enabling embedded development for [Analog Device's MSDK](https://github.com/Analog-Devices-MSDK/msdk) and the [MAX-series](https://www.maximintegrated.com/en/products/microcontrollers.html) microcontrollers. + +The following features are supported: + +* Code editing with intellisense down to the register level +* Code compilation with the ability to easily re-target a project for different microcontrollers and boards +* Flashing programs +* GUI and command-line debugging + +## Dependencies + +* [Visual Studio Code](https://code.visualstudio.com/) +* [C/C++ VSCode Extension](https://github.com/microsoft/vscode-cpptools) +* [Maxim Micros SDK](https://www.maximintegrated.com/content/maximintegrated/en/design/software-description.html/swpart=SFW0010820A) + +## Installation + +1. Download & install the Maxim Microcontrollers SDK for your OS from the links below. + * [Windows](https://www.maximintegrated.com/en/design/software-description.html/swpart=SFW0010820A) + * [Linux (Ubuntu)](https://www.maximintegrated.com/en/design/software-description.html/swpart=SFW0018720A) + * [MacOS](https://www.maximintegrated.com/en/design/software-description.html/swpart=SFW0018610A) + +2. Run the installer executable, and ensure that "Visual Studio Code Support" is enabled for your installation. + + ![Selected Components](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/installer_components.JPG) + +3. Finish the MaximSDK installation, taking note of where the MaximSDK was installed. + +4. Download & install Visual Studio Code for your OS [here](https://code.visualstudio.com/Download). + +5. Launch Visual Studio Code. + +6. Install the Microsoft [C/C++ extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools). + +7. Use `CTRL + SHIFT + P` (or `COMMAND + SHIFT + P` on MacOS) to open the developer prompt. + +8. Type "open settings json" and select the "Preferences: Open Settings (JSON)" option (_not_ the "Preferences: Open _Default_ Settings (JSON)"). This will open your user settings.json file in VS Code's editor. + + ![Open Settings JSON Command](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/open_settings_json.jpg) + +9. Add the entries below into your user settings.json file. + + ```json + { + // There may be other settings up here... + + "MAXIM_PATH":"C:/MaximSDK", // Set this to the installed location of the MaximSDK. Only use forward slashes '/' when setting this path! + "update.mode": "manual", + "extensions.autoUpdate": false, + + // There may be other settings down here... + } + ``` + +10. Save your changes to the file with `CTRL + S` and restart VS Code. + +11. That's it! You're ready to start using Visual Studio Code to develop with Maxim's Microcontrollers. The MaximSDK examples come pre-populated with .vscode project folders, and the `Tools/VSCode-Maxim` folder of the SDK contains documentation and templates. See [Usage](#usage) below for more details. + +## Usage + +This section covers basic usage of the VSCode-Maxim project files. For documentation on Visual Studio Code itself, please refer to the official docs [here](https://code.visualstudio.com/Docs). + +### Opening Projects + +Visual Studio Code is built around a "working directory" paradigm. The editor is always rooted in a working directory, and the main mechanism for changing that directory is `File -> Open Folder...`. + +![File -> Open Folder](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/file_openfolder.JPG) + +As a result, you'll notice that there is no "New Project" mechanism. A "project" in VS Code is simply a folder. It will look inside of the opened folder for a `.vscode` _sub_-folder to load project-specific settings from. + +A project that is configured for VS Code will have, at minimum, a .vscode sub-folder and a Makefile in its directory _(Note: You may need to enable viewing of hidden items in your file explorer to see the .vscode sub-folder)_. + +Ex: + +![Example Directory Contents](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/opening_projects_2.jpg) + +### Where to Find Projects + +The [Examples](https://github.com/Analog-Devices-MSDK/msdk/tree/main/Examples) in the MSDK come with with pre-configured .vscode project folders. These projects can be opened "out of the box", but it's good practice to copy example folders _outside_ of the MSDK so that the original copies are kept as clean references. The examples can be freely moved to any location _without a space in its path_. + +Additionally, empty project templates and a drag-and-drop folder for "injecting" a VSCode-Maxim project can be found under `Tools/VSCode-Maxim` in the MaximSDK installation. + +### Build Tasks + +Once a project is opened 4 available build tasks will become available via `Terminal > Run Build task...` or the shortcut `Ctrl+Shift+B`. These tasks are configured by the `.vscode/task.json` file. + +![Build Tasks Image](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/buildtasks.JPG) + +* Build + * Compiles the code with a `make all` command. + * Additional options are passed into Make on the command-line based on the project's settings.json file. + * The `./build` directory will be created and will contain the output binary, as well as all intermediary object files. + +* Clean + * Cleans the build output, removing the `./build` directory and all of its contents. + +* Clean-Periph + * This task is the same as 'clean', but it also removes the build output for Maxim's peripheral drivers. + * Use this if you would like to recompile the peripheral drivers from source on the next build. + +* Flash + * Launching this task automatically runs the `Build` task first. Then, it flashes the output binary to the microcontroller. + * It uses the GDB `load` and `compare-sections` commands, and handles launching an OpenOCD internally via a pipe connection. + * The flashed program will be halted until the microcontroller is reset, power cycled, or a debugger is connected. + * A debugger must be connected correctly to use this task. Refer to the datasheet of your microcontroller's evaluation board for instructions. + +* Flash & Run + * This is the same as the `Flash` task, but it also will launch execution of the program once flashing is complete. + +* Erase Flash + * Completely erases all of the application code in the flash memory bank. + * Once complete, the target microcontroller will be effectively "blank". + * This can be useful for recovering from Low-Power (LP) lockouts, bad firmware, etc. + +### Debugging + +![Debug Window](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/debugger.JPG) + +Debugging is enabled by Visual Studio Code's integrated debugger. Launch configurations can be found in the `.vscode/launch.json` file. + +* Note: **Flashing does not happen automatically when launching the debugger.** Run the "Flash" [build task](#build-tasks) for your program _before_ debugging. + +#### Debugger Limitations + +In general, Maxim's microcontrollers have the following debugger limitations at the hardware level: + +* The debugger can not be connected _while_ the device is in reset. + +* The device can not be debugged while the device is in Sleep, Low Power Mode, Micro Power Mode, Standby, Backup, or Shutdown mode. These modes shut down the SWD clock. + +* These limitations can sometimes make the device difficult or impossible to connect to if firmware has locked out the debugger. In such cases, the "Erase Flash" task can be used to recover the part. + +#### Launching the Debugger + +1. Attach your debugger to the SWD port on the target microcontroller. (Refer to the datasheet of your evaluation board for instructions on connecting a debugger) + +2. Flash the program to the microcontroller with the "Flash" [Build Task](#Build-Tasks). **Flashing does not happen automatically when launching the debugger.** + +3. Launch the debugger with `Run > Start Debugging`, with the shortcut `F5`, or via the `Run and Debug` window (Ctrl + Shift + D) and the green "launch" arrow. + + ![Debug Tab](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/debugger_window.JPG) + +4. The debugger will launch a GDB client & OpenOCD server, reset the microcontroller, and should break on entry into `main`. + + ![Debugger Break on Main](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/debugger_breakmain.JPG) + +#### Using the Debugger + +* For full usage details, please refer to the [official VS Code debugger documentation](https://code.visualstudio.com/docs/editor/debugging). + +The main interface for the debugger is the debugger control bar: + +![Debugger Control Bar Image](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/debugger_bar.JPG) + +`Continue | Step Over | Step Into | Step Out | Restart | Stop` + +Breakpoints can be set by clicking in the space next to the line number in a source code file. A red dot indicates a line to break on. Breakpoints can be removed by clicking on them again. Ex: + +![Breakpoint](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/breakpoint.JPG) + +## Project Configuration + +### Project Settings + +`.vscode/settings.json` is the main project configuration file. Values set here are parsed into the other .json config files. + +**When a change is made to this file, VS Code should be reloaded with CTRL+SHIFT+P -> Reload Window (or alternatively restarted completely) to force a re-parse.** + +![Reload Window](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/reload_window.JPG) + +The default project configuration should work for most use cases as long as `"target"` and `"board"` are set correctly. + +Any field from `settings.json` can be referenced from any other config file (including itself) with `"${config:[fieldname]}"` + +The following configuration options are available: + +### Basic Config Options + +* `"target"` + * This sets the target microcontroller for the project. + * It sets the `TARGET` [Build Configuration](#build-configuration) variable. + * Supported values: + * `"MAX32520"` + * `"MAX32570"` + * `"MAX32650"` + * `"MAX32655"` + * `"MAX32660"` + * `"MAX32662"` + * `"MAX32665"` (for MAX32665-MAX32668) + * `"MAX32670"` + * `"MAX32672"` + * `"MAX32675"` + * `"MAX32680"` + * `"MAX32690"` + * `"MAX78000"` + * `"MAX78002"` + +* `"board"` + * This sets the target board for the project (ie. Evaluation Kit, Feather board, etc.) + * Supported values: + * ... can be found in the `Libraries/Boards` folder of the MaximSDK + * For example, the supported options for the MAX78000 are `"EvKit_V1"`, `"FTHR_RevA"`, and `"MAXREFDES178"`. + + ![MAX78000 Boards](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/78000_boards.JPG) + +### Advanced Config Options + +#### `"MAXIM_PATH"` + +* This option must point to the root installation directory of the MaximSDK. +* It should be placed in the _global_ user settings.json file during first-time VSCode-Maxim setup. See [Installation](#installation). + +#### `"terminal.integrated.env.[platform]:Path"` + +* This prepends the location of toolchain binaries to the system `Path` used by VSCode's integrated terminal. +* The Path is not sanitized by default, which means that the terminal inherits the system path. +* Don't touch unless you know what you're doing :) + +#### `"project_name"` + +* Sets the name of project. This is used in other config options such as `program_file`. +* Default value: `"${workspaceFolderBasename}"` + +#### `"program_file"` + +* Sets the name of the file to flash and debug. This is provided in case it's needed, but for most use cases should be left at its default. +* File extension must be included. +* Default value: `"${config:project_name}.elf"` + +#### `"symbol_file"` + +* Sets the name of the file that GDB will load debug symbols from. +* File extension must be included. +* Default value: `"${config:program_file}"` + +#### `"M4_OCD_interface_file"` + +* Sets the OpenOCD interface file to use to connect to the Arm M4 core. This should match the debugger being used for the M4 core. +* The `MaximSDK/Tools/OpenOCD/scripts/interface` folder is searched for the file specified by this setting. +* `.cfg` file extension must be included. +* Default value: `"cmsis-dap.cfg"` + +#### `"M4_OCD_target_file"` + +* Sets the OpenOCD target file to use for the Arm M4 core. This should match the target microcontroller. +* `.cfg` file extension must be included. +* The `MaximSDK/Tools/OpenOCD/scripts/target` folder is searched for the file specified by this setting. +* Default value: `"${config:target}.cfg"` + +#### `"RV_OCD_interface_file"` + +* Sets the OpenOCD interface file to use to connect to the RISC-V core. This should match the debugger being used for the RISC-V core. +* The `MaximSDK/Tools/OpenOCD/scripts/interface` folder is searched for the file specified by this setting. +* `.cfg` file extension must be included. +* Default value: `"ftdi/olimex-arm-usb-ocd-h.cfg"` + +#### `"RV_OCD_target_file"` + +* Sets the OpenOCD target file to use for the RISC-V core. +* The `MaximSDK/Tools/OpenOCD/scripts/target` folder is searched for the file specified by this setting. +* `.cfg` file extension must be included. +* Default value: `"${config:target}_riscv.cfg"` + +#### `"v_Arm_GCC"` + +* Sets the version of the Arm Embedded GCC to use, including toolchain binaries and the standard library version. +* This gets parsed into `ARM_GCC_path`. +* Default value: `"10.3"` + +#### `"v_xPack_GCC"` + +* Sets the version of the xPack RISC-V GCC to use. +* This gets parsed into `xPack_GCC_path`. +* Default value: `"10.2.0-1.2"` + +#### `"OCD_path"` + +* Where to find the OpenOCD. +* Default value: `"${config:MAXIM_PATH}/Tools/OpenOCD"` + +#### `"ARM_GCC_path"` + +* Where to find the Arm Embedded GCC Toolchain. +* Default value: `"${config:MAXIM_PATH}/Tools/GNUTools/${config:v_Arm_GCC}"` + +#### `"xPack_GCC_path"` + +* Where to find the RISC-V GCC Toolchain. +* Default value: `"${config:MAXIM_PATH}/Tools/xPack/riscv-none-embed-gcc/${config:v_xPack_GCC}"` + +#### `"Make_path"` + +* Where to find Make binaries (only used on Windows) +* Default value: `"${config:MAXIM_PATH}/Tools/MSYS2/usr/bin"` + +#### `"C_Cpp.default.includePath"` + +* Which paths to search to find header (.h) files. +* Does not recursively search by default. To recursively search, use `/**`. + +#### `"C_Cpp.default.browse.path"` + +* Which paths to search to find source (.c) files. +* Does not recursively search by default. To recursively search, use `/**`. + +#### `"C_Cpp.default.defines"` + +* Sets the compiler definitions to use for the intellisense engine. +* Most definitions should be defined in header files, but if a definition is missing it can be entered here to get the intellisense engine to recognize it. + +### Setting Search Paths for Intellisense + +VS Code's intellisense engine must be told where to find the header files for your source code. By default, Maxim's perpiheral drivers, the C standard libraries, and all of the sub-directories of the workspace will be searched for header files to use with Intellisense. If VS Code throws an error on an `#include` statement (and the file exists), then a search path is most likely missing. + +To add additional search paths : + +1. Open the `.vscode/settings.json` file. + +2. Add the include path(s) to the `C_Cpp.default.includePath` list. The paths set here should contain header files, and will be searched by the Intellisense engine and when using "Go to Declaration" in the editor. + +3. Add the path(s) to any relevant implementation files to the `C_Cpp.default.browse.path` list. This list contains the paths that will be searched when using "Go to Definition". + +## Build Configuration + +A project's build system is managed by two files found in the project's root directory. These files are used alongside the [GNU Make](https://www.gnu.org/software/make/) program (which is a part of the MaximSDK toolchain) to locate and build a project's source code for the correct microcontroller. + +* `Makefile` +* `project.mk` + +![Files are located in the root directory](img/projectmk.JPG) + +When the command... + +```shell +$ make +``` + +... is run, the program `make` will load settings from these two files. Then, it will use them to build the project's source code. VSCode-Maxim is a "wrapper" around this Makefile system. + +The file named `Makefile` is the "core" file for the project. It should not be edited directly. Instead, it offers a number of configuration variables that can be overridden in the `project.mk` file, on the command-line, in your system's environment, or via your IDE. It also comes with a default configuration that is suitable for most projects. + +### Default Build Behavior + +By default, the build system will auto-search the root project directory source code (`*.c`) and header files (`*.h`). The optional "include" and "src" directories are also searched if they exist. + +```shell +Root Project Directory +├─ project.mk +├─ Makefile +├─ *.h +├─ *.c +├─include # <-- Optional + └─ *.h +├─src # <-- Optional + └─ *.c +``` + +Additionally, the "core" `Makefile` will come pre-configured for a specific target microcontroller and Board Support Package (BSP). The default BSP will match the main EVKIT for the device. In VSCode-Maxim, the two [Basic Config Options](#basic-config-options) can be used to easily override the target microcontroller and BSP. These options are passed to `make` on the command-line when the ["Build" task](#build-tasks) is run. + +For more advanced build configuration, configuration variables should be used. + +### How to Set a Configuration Variable + +A configuration variable is a [Makefile variable](https://www.gnu.org/software/make/manual/make.html#Using-Variables), and therefore follows the same rules. However, they have been streamlined to be made much easier to use, so most of the official GNU Make documentation is only needed for advanced use-cases. + +To set a configuration variable, use the syntax... + +```Makefile +VARIABLE=VALUE +``` + +The `=` operater is used for _most_ configuration variables with a few exceptions (that are clearly documented) when a variable should contain a _list_ of values. In such cases, use the syntax... + +```Makefile +VARIABLE+=VALUE1 +VARIABLE+=VALUE2 +``` + +... to _add_ values to the list. + +In most cases, you should do this from inside of **project.mk**. + +For example, if I wanted to enable hardware floating-point acceleration for my project, I would use the `MFLOAT_ABI` configuration variable to set its value to `hard`. The contents of **project.mk** might then look as follows: + +(_Inside project.mk_) + +```Makefile +# This file can be used to set build configuration +# variables. These variables are defined in a file called +# "Makefile" that is located next to this one. + +# For instructions on how to use this system, see +# https://github.com/Analog-Devices-MSDK/VSCode-Maxim/tree/develop#build-configuration + +#BOARD=FTHR_RevA +# ^ For example, you can uncomment this line to make the +# project build for the "FTHR_RevA" board. + +# ********************************************************** + +MFLOAT_ABI=hard # Enable hardware floating point acceleration +``` + +It should also be noted that configuration variables can be set on the **command-line** as well. For example... + +```shell +$ make MFLOAT_ABI=hard +``` + +... will have the same effect. + +Additionally, **environment variables** can be used. For example (on linux)... + +```shell +$ export TARGET=MAX78000 +``` + +... will set all projects to build for the MAX78000. + +However, there is a precedence hierarchy that should be taken into consideration. + +### Precedence Hierarchy + +The precedence hierarchy for the value of a configuration variable is: + +* **command-line > project.mk > environment variable > default value** + +...meaning if a value is set on the command-line _and_ project.mk, the command-line value will take precedence. However, the ["override" directive](https://www.gnu.org/software/make/manual/make.html#Override-Directive) can be used in project.mk to give it max precedence. + +### Configuration Variables Reference + +The project's `Makefile` can be opened to see a full list of available config options, but they are nested among the implementation details of the Makefile itself. This might be fine for those familiar with reading Makefiles, but a clean reference table is also available below. + +| Variable | Description | Example | Details | +|--- | --- | --- | ---| +**Target** +| `TARGET` | Set the target microcontroller | `TARGET=MAX78000` | +| `BOARD` | Set the Board Support Package (BSP) | `BOARD=FTHR_RevA` | Every microcontroller has a number of BSPs available for it that can be found in the `Libraries/Boards/TARGET` folder of the MaximSDK. When you change this option, it's usually a good idea to fully clean your project, then re-build. +**SDK** +| `MAXIM_PATH` | (Optional) Specify the location of the MaximSDK | `MAXIM_PATH=/path/to/MSDK` | This optional variable can be used to change where the Makefile looks for the MaximSDK. By default, the Makefile will attempt to locate the MaximSDK with a relative path moving "up" from its original location. This option is most useful when a project is moved _outside_ of the SDK and you're developing on the command-line, since VS Code and Eclipse will set this via an environment variable. It's also useful for re-targeting a project to point to the development repository. +| `CAMERA` | (Optional) Set the Camera drivers to use | `CAMERA=HM0360_MONO` | This option is only useful for the MAX78000 and MAX78002, and sets the camera drivers to use for the project. Permitted values are `HM01B0`, `HM0360_MONO`, `HM0360_COLOR`, `OV5642`, `OV7692` (default), or `PAG7920`. Camera drivers can be found in the `Libraries/MiscDrivers/Camera` folder of the MaximSDK. Depending on the selected camera, a compiler definition may be added to the build. See the `board.mk` Makefile in the active BSP for more details. +**Source Code** +| `VPATH` | Where to search for source (.c) files | `VPATH+=your/source/path` | **Use the `+=` operator with this option**. This controls where the Makefile will look for **source code** files. If `AUTOSEARCH` is enabled (which it is by default) this controls which paths will be searched. If `AUTOSEARCH` is disabled, this tells the Makefile where to look for the files specified by `SRCS`. +| `IPATH` | Where to search for header (.h) files | `IPATH+=your/include/path` | **Use the `+=` operator with this option**. This controls where the Makefile will look for **header** files. _Unlike_ the `VPATH` option, this is not related to `AUTOSEARCH`. Individual header files are _not_ ever manually added into the build. Instead, you only need to specify the _location_ of your header files. +| `AUTOSEARCH` | Automatically search for source (.c) files | `AUTOSEARCH=0` | Enable or disable the automatic detection of .c files on `VPATH` (enabled by default). Set to `0` to disable, or `1` to enable. If autosearch is disabled, source files must be manually added to `SRCS`. +| `SRCS` | List of source (.c) files to add to the build | `SRCS+=./my/other/source.c` | **Use the `+=` operator with this option**. All of the files in this list will be added to the build. If `AUTOSEARCH` is enabled, this is most useful for adding the full absolute path to a singular source file to selectively add to the build. If `AUTOSEARCH` is disabled, _all_ of the source files for the project must be added to `SRCS`, and they must also all be located on an entry in `VPATH`. Otherwise, a full path relative to the Makefile must be used. +| `PROJECT` | Set the output filename | `PROJECT=MyProject` | This controls the output filename of the build. File extensions should _not_ be set here since the output file format may vary depending on the build recipe. For VSCode-Maxim, you should use the [project_name](#projectname) advanced config option instead, which sets `PROJECT` on the command-line [Build Tasks](#build-tasks). +**Compiler** +| `MXC_OPTIMIZE_CFLAGS` | Set the optimization level | `MXC_OPTIMIZE_CFLAGS=-O2` | See [Optimize Options](https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html) for more details. Normal builds will default to `-Og`, which is good for debugging, while release builds will default to `-O2`. +| `PROJ_CFLAGS` | Add a compiler flag to the build | `PROJ_CFLAGS+=-Wextra`, `PROJ_CFLAGS+=-DMYDEFINE` | Compiler flags can be added with this option, including compiler definitions. For each value, the same syntax should be used as if the compiler flag was passed in via the command-line. These can include standard [GCC options](https://gcc.gnu.org/onlinedocs/gcc-10.4.0/gcc/Option-Summary.html#Option-Summary) and/or [ARM-specific](https://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html) options. +| `MFLOAT_ABI` | Set the floating point acceleration level | `MFLOAT_ABI=hard` | Sets the floating-point acceleration level. Permitted values are `hard`, `soft`, `softfp` (default). To enable full hardware acceleration instructions use `hard`, but keep in mind that _all_ libraries your source code uses must also be compiled with `hard`. If there is any conflict, you'll get a linker error. For more details, see `-mfloat-abi` under [ARM Options](https://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html). +**Linker** +| `LINKERFILE` | Set the linkerfile to use | `LINKERFILE=newlinker.ld` | You can use a different linkerfile with this option. The file should exists in `Libraries/CMSIS/Device/Maxim/TARGET/Source/GCC` in the MaximSDK, or it should be placed inside the root directory of the project. +**Libraries** +| `LIB_BOARD` | Include the BSP library (enabled by default) | `LIB_BOARD=0` | Inclusion of the Board-Support Package (BSP) library, which is enabled by default, can be toggled with this variable. This library contains important startup code specific to a microcontroller's evaluation platform, such as serial port initialization, power sequencing, external peripheral initalization, etc. Set to `0` to disable, or `1` to enable. +| `LIB_PERIPHDRIVERS` | Include the peripheral driver library (enabled by default) | `LIB_PERIPHDRIVERS=0` | The peripheral driver library can be toggled with this option. If disabled, you'll lose access to the higher-level driver functions but still have access to the register-level files. Set to `0` to disable, or `1` to enable. +| `LIB_CMSIS_DSP` | Include the CMSIS-DSP library | `LIB_CMSIS_DSP=1` | The [CMSIS-DSP library](https://www.keil.com/pack/doc/CMSIS/DSP/html/index.html) can be enabled with this option. Set to `0` to disable, or `1` to enable. +| `LIB_CORDIO` | Include the Cordio library | `LIB_CORDIO=1` | The Cordio BLE library can be included with this option. This is only applicable towards microcontrollers with an integrated BLE controller. +| `LIB_FCL` | Include the Free Cryptographic Library (FCL) | `LIB_FCL=1` | This option toggles the Free Cryptographic Library (FCL), which is a collection of software-implemented common cryptographic functions can be included with this option. Set to `0` to disable, or `1` to enable. +| `LIB_FREERTOS` | Include the FreeRTOS library | `LIB_FREERTOS=1` | The [FreeRTOS](https://freertos.org/) library can be enabled with this option, which is an open-source Real-Time Operating System (RTOS). Set to `0` to disable, or `1` to enable. +| `LIB_LC3` | Include the LC3 codec library | `LIB_LC3=1` | This option enables the inclusion of the Low Complexity Communication Codec (LC3), which is an efficient low latency audio codec. Set to `0` to disable, or `1` to enable. +| `LIB_LITTLEFS` | Include the littleFS library | `LIB_LITTLEFS=1` | This option toggles the ["Little File System"](https://github.com/littlefs-project/littlefs) library - a small filesystem library designed for microcontrollers. Set to `0` to disable, or `1` to enable. +| `LIB_LWIP` | Include the lwIP library | `LIB_LWIP=1` | | +| `LIB_MAXUSB` | Include the MaxUSB library | `LIB_MAXUSB=1` | This option toggles the inclusion of the MAXUSB library, which facilitates the use of the native USB peripherals on some microcontrollers. Set to `0` to disable, or `1` to enable. +| `LIB_SDHC` | Include the SDHC library | `LIB_SDHC=1` | This options toggles the Secure Digital High Capacity (SDHC) library, which can be used to interface with SD cards. Additionally, it enables the [FatFS](http://elm-chan.org/fsw/ff/00index_e.html) library, which implements a generic FAT filesystem. + + +## Project Creation + +### Option 1. Copying a Pre-Made Project + +Copying a pre-made example project is a great way to get rolling quickly, and is currently the recommended method for creating new projects. + +The release package for this project (Located at Tools/VSCode-Maxim in the MaximSDK) contains a `New_Project` folder designed for such purposes. Additionally, any of the VS Code-enabled Example projects can be copied from the SDK. + +1. Copy the existing project folder to an accessible location. This will be the location of your new project. + +2. (Optional) Rename the folder. For example, I might rename the folder to `MyProject`. + +3. Open the project in VS Code (`File -> Open Folder...`) + +4. Set your target microcontroller and board correctly. See [Basic Config Options](#basic-config-options) + +5. `CTRL+SHIFT+P -> Reload Window` to re-parse the project settings. + +6. That's it! The existing project is ready to build, debug, and modify. + +### Option 2 - Creating a Project from Scratch + +If you want to start from scratch, take this option. + +1. Create your project folder. For example, I might create a new project in a workspace folder with the path: `C:\Users\Jake.Carter\workspace\MyNewProject`. + +2. Copy the **contents** of the `Inject` folder into the project folder created in step 2. This includes a `.vscode` folder and a `Makefile`. In the example above, the contents of the 'MyProject' folder would be the following : + + ```shell + C:\Users\Jake.Carter\workspace\MyNewProject + +-- \.vscode + +-- Makefile + ``` + +3. Open the project in VS Code (`File -> Open Folder...`) + +4. Set your target microcontroller correctly. See [Basic Config Options](#basic-config-options). + +5. `CTRL+SHIFT+P -> Reload Window` to re-parse the project settings. + +6. Fundamentally, that's it. Your new empty project can now be opened with `File > Open Folder` from within VS Code. + +## Issue Tracker + +Bug reports, feature requests, and contributions are welcome via the [issues](https://github.com/MaximIntegratedTechSupport/VSCode-Maxim/issues) tracker on Github. + +New issues should contain _at minimum_ the following information: + +* Visual Studio Code version #s (see `Help -> About`) +* C/C++ Extension version # +* Target microcontroller and evaluation platform +* The projects `.vscode` folder and `Makefile` (where applicable). Standard compression formats such as `.zip`, `.rar`, `.tar.gz`, etc. are all acceptable. From f4a27d3294fef9980f2d94f8fab9a4b099102f05 Mon Sep 17 00:00:00 2001 From: Jake Carter Date: Mon, 29 Aug 2022 13:52:03 -0500 Subject: [PATCH 34/55] Update function prototypes to be 1:1 compatible with ai8xize.py --- __init__.py | 0 generate.py | 10 ++++++---- utils.py | 4 ---- 3 files changed, 6 insertions(+), 8 deletions(-) create mode 100644 __init__.py diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/generate.py b/generate.py index 57c3e62..e5df9b8 100644 --- a/generate.py +++ b/generate.py @@ -35,7 +35,8 @@ import os import shutil import stat -from utils import * +# from utils import * +from . import utils from pathlib import Path # Get location of this file. @@ -43,7 +44,7 @@ here = Path(__file__).parent # Load default values for template from master "inject" folder so that we don't have to maintain multiple copies of the settings -defaults = parse_json(here.joinpath("MaximSDK/Inject/.vscode/settings.json")) +defaults = utils.parse_json(here.joinpath("MaximSDK/Inject/.vscode/settings.json")) whitelist = [ "MAX32650", @@ -61,7 +62,8 @@ ] def create_project( - out_path: str, + out_root: str, + out_stem: str, target: str, board: str, overwrite = False, @@ -85,7 +87,7 @@ def create_project( Generates Visual Studio Code project files from the VSCode-Maxim project. """ - out_path = Path(out_path) + out_path = Path(out_root).joinpath(out_stem) template_dir = here.joinpath("MaximSDK/Template").resolve() # Where to find the VS Code template directory relative to this script diff --git a/utils.py b/utils.py index dca96e9..b917c1b 100644 --- a/utils.py +++ b/utils.py @@ -33,7 +33,6 @@ """ from collections.abc import MutableMapping -from string import Template import json from pathlib import Path import hashlib @@ -62,9 +61,6 @@ def __iter__(self): def __len__(self): return len(self.d) -class MSDKTemplate(Template): - delimiter = "##__" - def parse_json(filename): """ Parse values from a json file into a template-friendly (all-caps keys) dictionary From 6d219d7d8d3328ec5c7f529980c93eb72fff3530 Mon Sep 17 00:00:00 2001 From: Jake Carter Date: Tue, 30 Aug 2022 14:53:20 -0500 Subject: [PATCH 35/55] Sync readme before generating --- generate.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/generate.py b/generate.py index e5df9b8..0f63c2c 100644 --- a/generate.py +++ b/generate.py @@ -38,6 +38,7 @@ # from utils import * from . import utils from pathlib import Path +from .maintain import sync # Get location of this file. # Need to use this so that template look-ups are decoupled from the caller's working directory @@ -87,6 +88,8 @@ def create_project( Generates Visual Studio Code project files from the VSCode-Maxim project. """ + sync() + out_path = Path(out_root).joinpath(out_stem) template_dir = here.joinpath("MaximSDK/Template").resolve() From 86500b960461ab4c7b10b61918268c15985d605e Mon Sep 17 00:00:00 2001 From: Jake Carter Date: Fri, 9 Sep 2022 12:48:31 -0500 Subject: [PATCH 36/55] Update README.md --- README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 69a0b0f..d4e8f02 100644 --- a/README.md +++ b/README.md @@ -99,28 +99,28 @@ Once a project is opened 4 available build tasks will become available via `Term ![Build Tasks Image](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/buildtasks.JPG) -* Build +#### Build * Compiles the code with a `make all` command. * Additional options are passed into Make on the command-line based on the project's settings.json file. * The `./build` directory will be created and will contain the output binary, as well as all intermediary object files. -* Clean +#### Clean * Cleans the build output, removing the `./build` directory and all of its contents. -* Clean-Periph +#### Clean-Periph * This task is the same as 'clean', but it also removes the build output for Maxim's peripheral drivers. * Use this if you would like to recompile the peripheral drivers from source on the next build. -* Flash +#### Flash * Launching this task automatically runs the `Build` task first. Then, it flashes the output binary to the microcontroller. * It uses the GDB `load` and `compare-sections` commands, and handles launching an OpenOCD internally via a pipe connection. * The flashed program will be halted until the microcontroller is reset, power cycled, or a debugger is connected. * A debugger must be connected correctly to use this task. Refer to the datasheet of your microcontroller's evaluation board for instructions. -* Flash & Run +#### Flash & Run * This is the same as the `Flash` task, but it also will launch execution of the program once flashing is complete. -* Erase Flash +#### Erase Flash * Completely erases all of the application code in the flash memory bank. * Once complete, the target microcontroller will be effectively "blank". * This can be useful for recovering from Low-Power (LP) lockouts, bad firmware, etc. @@ -141,7 +141,7 @@ In general, Maxim's microcontrollers have the following debugger limitations at * The device can not be debugged while the device is in Sleep, Low Power Mode, Micro Power Mode, Standby, Backup, or Shutdown mode. These modes shut down the SWD clock. -* These limitations can sometimes make the device difficult or impossible to connect to if firmware has locked out the debugger. In such cases, the "Erase Flash" task can be used to recover the part. +* These limitations can sometimes make the device difficult or impossible to connect to if firmware has locked out the debugger. In such cases, the ["Erase Flash"](#erase-flash) task can be used to recover the part. #### Launching the Debugger From 7aa4d12f43efcd237934efbeb5e779f46c6f0f03 Mon Sep 17 00:00:00 2001 From: Jake Carter Date: Mon, 12 Sep 2022 12:07:03 -0500 Subject: [PATCH 37/55] Adjust utils importing --- generate.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/generate.py b/generate.py index e5df9b8..f0653a7 100644 --- a/generate.py +++ b/generate.py @@ -170,7 +170,7 @@ def create_project( write = True if out_file.exists(): - if not overwrite or compare_content(content, out_file): + if not overwrite or utils.compare_content(content, out_file): write = False if write: @@ -189,7 +189,7 @@ def create_project( write = True if out_file.exists(): - if not overwrite or (hash_file(in_file) == hash_file(out_file)): + if not overwrite or (utils.hash_file(in_file) == utils.hash_file(out_file)): write = False if write: @@ -199,4 +199,4 @@ def create_project( updated.append(out_file) # print(f"Wrote {os.path.basename(file)}") # Uncomment to debug - return (len(updated) > 0) \ No newline at end of file + return (len(updated) > 0) From a777071f0309142dc333390fe80fc1d0d9526cfc Mon Sep 17 00:00:00 2001 From: Jake Carter Date: Mon, 12 Sep 2022 12:27:29 -0500 Subject: [PATCH 38/55] Clean up sync method --- generate.py | 7 ++++++- maintain.py | 22 ++++++++++++++-------- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/generate.py b/generate.py index fd4cde3..d2cebb7 100644 --- a/generate.py +++ b/generate.py @@ -47,6 +47,8 @@ # Load default values for template from master "inject" folder so that we don't have to maintain multiple copies of the settings defaults = utils.parse_json(here.joinpath("MaximSDK/Inject/.vscode/settings.json")) +synced=False + whitelist = [ "MAX32650", "MAX32655", @@ -88,7 +90,10 @@ def create_project( Generates Visual Studio Code project files from the VSCode-Maxim project. """ - sync() + global synced + if not synced: + sync() + synced = True out_path = Path(out_root).joinpath(out_stem) diff --git a/maintain.py b/maintain.py index 3c77688..96f8c9d 100644 --- a/maintain.py +++ b/maintain.py @@ -41,6 +41,8 @@ from pathlib import Path from datetime import date +here = Path(__file__).parent + curplatform = platform.system() # Get OS def log(string, file): @@ -74,16 +76,20 @@ def run_cmd(*args, **kwargs): def sync(): # Inject .vscode folder into example projects - print("Copying from Inject folder into example project and template...") - for f in os.scandir("MaximSDK/Inject/.vscode"): - shutil.copy(f, "MaximSDK/New_Project/.vscode/") + inject_dir = here.joinpath("MaximSDK", "Inject", ".vscode") + new_proj_dir = here.joinpath("MaximSDK", "New_Project", ".vscode") + template_dir = here.joinpath("MaximSDK", "Template", ".vscode") + + print("Syncing VSCode template...") + for f in os.scandir(inject_dir): + shutil.copy(f, new_proj_dir) # Copy files into template folder - shutil.copy("MaximSDK/Inject/.vscode/launch.json", "MaximSDK/Template/.vscode/") - shutil.copy("MaximSDK/Inject/.vscode/c_cpp_properties.json", "MaximSDK/Template/.vscode/") - shutil.copy("MaximSDK/Inject/.vscode/tasks.json", "MaximSDK/Template/.vscode/") - shutil.copy("MaximSDK/Inject/.vscode/flash.gdb", "MaximSDK/Template/.vscode/") - shutil.copy("README.md", "MaximSDK/Template/.vscode/") + shutil.copy(inject_dir.joinpath("launch.json"), template_dir) + shutil.copy(inject_dir.joinpath("c_cpp_properties.json"), template_dir) + shutil.copy(inject_dir.joinpath("tasks.json"), template_dir) + shutil.copy(inject_dir.joinpath("flash.gdb"), template_dir) + shutil.copy(here.joinpath("README.md"), template_dir) def release(version): sync() From 2ff2702861de42a9406dfb76a85b3c5d5e77c23b Mon Sep 17 00:00:00 2001 From: Jake Carter Date: Tue, 13 Sep 2022 16:03:54 -0500 Subject: [PATCH 39/55] Fix markdownlint errors --- README.md | 45 +++++++++++++++++++++++++-------------------- 1 file changed, 25 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index d4e8f02..2f16eb2 100644 --- a/README.md +++ b/README.md @@ -100,30 +100,36 @@ Once a project is opened 4 available build tasks will become available via `Term ![Build Tasks Image](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/buildtasks.JPG) #### Build - * Compiles the code with a `make all` command. - * Additional options are passed into Make on the command-line based on the project's settings.json file. - * The `./build` directory will be created and will contain the output binary, as well as all intermediary object files. + +* Compiles the code with a `make all` command. +* Additional options are passed into Make on the command-line based on the project's settings.json file. +* The `./build` directory will be created and will contain the output binary, as well as all intermediary object files. #### Clean - * Cleans the build output, removing the `./build` directory and all of its contents. + +* Cleans the build output, removing the `./build` directory and all of its contents. #### Clean-Periph - * This task is the same as 'clean', but it also removes the build output for Maxim's peripheral drivers. - * Use this if you would like to recompile the peripheral drivers from source on the next build. + +* This task is the same as 'clean', but it also removes the build output for Maxim's peripheral drivers. +* Use this if you would like to recompile the peripheral drivers from source on the next build. #### Flash - * Launching this task automatically runs the `Build` task first. Then, it flashes the output binary to the microcontroller. - * It uses the GDB `load` and `compare-sections` commands, and handles launching an OpenOCD internally via a pipe connection. - * The flashed program will be halted until the microcontroller is reset, power cycled, or a debugger is connected. - * A debugger must be connected correctly to use this task. Refer to the datasheet of your microcontroller's evaluation board for instructions. + +* Launching this task automatically runs the `Build` task first. Then, it flashes the output binary to the microcontroller. +* It uses the GDB `load` and `compare-sections` commands, and handles launching an OpenOCD internally via a pipe connection. +* The flashed program will be halted until the microcontroller is reset, power cycled, or a debugger is connected. +* A debugger must be connected correctly to use this task. Refer to the datasheet of your microcontroller's evaluation board for instructions. #### Flash & Run - * This is the same as the `Flash` task, but it also will launch execution of the program once flashing is complete. + +* This is the same as the `Flash` task, but it also will launch execution of the program once flashing is complete. #### Erase Flash - * Completely erases all of the application code in the flash memory bank. - * Once complete, the target microcontroller will be effectively "blank". - * This can be useful for recovering from Low-Power (LP) lockouts, bad firmware, etc. + +* Completely erases all of the application code in the flash memory bank. +* Once complete, the target microcontroller will be effectively "blank". +* This can be useful for recovering from Low-Power (LP) lockouts, bad firmware, etc. ### Debugging @@ -147,7 +153,7 @@ In general, Maxim's microcontrollers have the following debugger limitations at 1. Attach your debugger to the SWD port on the target microcontroller. (Refer to the datasheet of your evaluation board for instructions on connecting a debugger) -2. Flash the program to the microcontroller with the "Flash" [Build Task](#Build-Tasks). **Flashing does not happen automatically when launching the debugger.** +2. Flash the program to the microcontroller with the "Flash" [Build Task](#build-tasks). **Flashing does not happen automatically when launching the debugger.** 3. Launch the debugger with `Run > Start Debugging`, with the shortcut `F5`, or via the `Run and Debug` window (Ctrl + Shift + D) and the green "launch" arrow. @@ -345,7 +351,7 @@ A project's build system is managed by two files found in the project's root dir When the command... ```shell -$ make +make ``` ... is run, the program `make` will load settings from these two files. Then, it will use them to build the project's source code. VSCode-Maxim is a "wrapper" around this Makefile system. @@ -417,7 +423,7 @@ MFLOAT_ABI=hard # Enable hardware floating point acceleration It should also be noted that configuration variables can be set on the **command-line** as well. For example... ```shell -$ make MFLOAT_ABI=hard +make MFLOAT_ABI=hard ``` ... will have the same effect. @@ -425,7 +431,7 @@ $ make MFLOAT_ABI=hard Additionally, **environment variables** can be used. For example (on linux)... ```shell -$ export TARGET=MAX78000 +export TARGET=MAX78000 ``` ... will set all projects to build for the MAX78000. @@ -457,7 +463,7 @@ The project's `Makefile` can be opened to see a full list of available config op | `IPATH` | Where to search for header (.h) files | `IPATH+=your/include/path` | **Use the `+=` operator with this option**. This controls where the Makefile will look for **header** files. _Unlike_ the `VPATH` option, this is not related to `AUTOSEARCH`. Individual header files are _not_ ever manually added into the build. Instead, you only need to specify the _location_ of your header files. | `AUTOSEARCH` | Automatically search for source (.c) files | `AUTOSEARCH=0` | Enable or disable the automatic detection of .c files on `VPATH` (enabled by default). Set to `0` to disable, or `1` to enable. If autosearch is disabled, source files must be manually added to `SRCS`. | `SRCS` | List of source (.c) files to add to the build | `SRCS+=./my/other/source.c` | **Use the `+=` operator with this option**. All of the files in this list will be added to the build. If `AUTOSEARCH` is enabled, this is most useful for adding the full absolute path to a singular source file to selectively add to the build. If `AUTOSEARCH` is disabled, _all_ of the source files for the project must be added to `SRCS`, and they must also all be located on an entry in `VPATH`. Otherwise, a full path relative to the Makefile must be used. -| `PROJECT` | Set the output filename | `PROJECT=MyProject` | This controls the output filename of the build. File extensions should _not_ be set here since the output file format may vary depending on the build recipe. For VSCode-Maxim, you should use the [project_name](#projectname) advanced config option instead, which sets `PROJECT` on the command-line [Build Tasks](#build-tasks). +| `PROJECT` | Set the output filename | `PROJECT=MyProject` | This controls the output filename of the build. File extensions should _not_ be set here since the output file format may vary depending on the build recipe. For VSCode-Maxim, you should use the [project_name](#project_name) advanced config option instead, which sets `PROJECT` on the command-line [Build Tasks](#build-tasks). **Compiler** | `MXC_OPTIMIZE_CFLAGS` | Set the optimization level | `MXC_OPTIMIZE_CFLAGS=-O2` | See [Optimize Options](https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html) for more details. Normal builds will default to `-Og`, which is good for debugging, while release builds will default to `-O2`. | `PROJ_CFLAGS` | Add a compiler flag to the build | `PROJ_CFLAGS+=-Wextra`, `PROJ_CFLAGS+=-DMYDEFINE` | Compiler flags can be added with this option, including compiler definitions. For each value, the same syntax should be used as if the compiler flag was passed in via the command-line. These can include standard [GCC options](https://gcc.gnu.org/onlinedocs/gcc-10.4.0/gcc/Option-Summary.html#Option-Summary) and/or [ARM-specific](https://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html) options. @@ -477,7 +483,6 @@ The project's `Makefile` can be opened to see a full list of available config op | `LIB_MAXUSB` | Include the MaxUSB library | `LIB_MAXUSB=1` | This option toggles the inclusion of the MAXUSB library, which facilitates the use of the native USB peripherals on some microcontrollers. Set to `0` to disable, or `1` to enable. | `LIB_SDHC` | Include the SDHC library | `LIB_SDHC=1` | This options toggles the Secure Digital High Capacity (SDHC) library, which can be used to interface with SD cards. Additionally, it enables the [FatFS](http://elm-chan.org/fsw/ff/00index_e.html) library, which implements a generic FAT filesystem. - ## Project Creation ### Option 1. Copying a Pre-Made Project From 95d8c6534ecd4fd5635f1be9158530f42ef1de1f Mon Sep 17 00:00:00 2001 From: Jake Carter Date: Tue, 13 Sep 2022 16:26:50 -0500 Subject: [PATCH 40/55] Add SBT configuration variables to README --- README.md | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 2f16eb2..b77a728 100644 --- a/README.md +++ b/README.md @@ -28,6 +28,8 @@ The following features are supported: ## Installation +The steps below are also available in video form in "Understanding Artificial Intelligence Episode 8.5 - Visual Studio Code" [here](https://www.maximintegrated.com/en/products/microcontrollers/artificial-intelligence.html/tab4/vd_1_2eaktism#.YyDxHaE8U_Y.mailto). + 1. Download & install the Maxim Microcontrollers SDK for your OS from the links below. * [Windows](https://www.maximintegrated.com/en/design/software-description.html/swpart=SFW0010820A) * [Linux (Ubuntu)](https://www.maximintegrated.com/en/design/software-description.html/swpart=SFW0018720A) @@ -446,9 +448,9 @@ The precedence hierarchy for the value of a configuration variable is: ...meaning if a value is set on the command-line _and_ project.mk, the command-line value will take precedence. However, the ["override" directive](https://www.gnu.org/software/make/manual/make.html#Override-Directive) can be used in project.mk to give it max precedence. -### Configuration Variables Reference +### Configuration Variables Table -The project's `Makefile` can be opened to see a full list of available config options, but they are nested among the implementation details of the Makefile itself. This might be fine for those familiar with reading Makefiles, but a clean reference table is also available below. +The project's `Makefile` can be opened to see a full list of available config options, but they are nested among the implementation details of the Makefile itself. A full reference table is also available below. | Variable | Description | Example | Details | |--- | --- | --- | ---| @@ -482,6 +484,12 @@ The project's `Makefile` can be opened to see a full list of available config op | `LIB_LWIP` | Include the lwIP library | `LIB_LWIP=1` | | | `LIB_MAXUSB` | Include the MaxUSB library | `LIB_MAXUSB=1` | This option toggles the inclusion of the MAXUSB library, which facilitates the use of the native USB peripherals on some microcontrollers. Set to `0` to disable, or `1` to enable. | `LIB_SDHC` | Include the SDHC library | `LIB_SDHC=1` | This options toggles the Secure Digital High Capacity (SDHC) library, which can be used to interface with SD cards. Additionally, it enables the [FatFS](http://elm-chan.org/fsw/ff/00index_e.html) library, which implements a generic FAT filesystem. +**Secure Boot Tools (SBT)** +| `SBT` | Toggle SBT integration | `SBT=1` | Toggles integration with the [Secure Boot Tools (SBTs)](https://www.maximintegrated.com/en/design/technical-documents/userguides-and-manuals/7/7637.html). These are a suite of applications designed for use with microcontrollers that have secure bootloaders. When this is enabled, some additional rules become available such as `make sla` and `make scpa`. Set to `0` to disable or `1` to enable. +| `MAXIM_SBT_DIR` | Where to find the SBTs | `MAXIM_SBT_DIR=C:/MaximSBT` | This option can be used to manually specify the location of the SBTs. Usually, this is not necessary. By default, the `Tools/SBT` directory of the MaximSDK will be searched. If the [SBT installer](https://www.maximintegrated.com/en/design/software-description.html/swpart=SFW0015360C) is used, it will set the `MAXIM_SBT_DIR` environment variable to point to itself automatically. +| `TARGET_SEC` | Secure part number to use | `TARGET_SEC=MAX32651` | Some secure microcontrollers have multiple secure variants, and this option can be used to specify the variant to use with the SBTs. Defaults are intelligently selected, and can be found in `$(MAXIM_SBT_DIR)/SBT-config.mk` +| `SCP_PACKETS` | Where to build the scp_packets folder | | Defaults to `build/scp_packets` | +| `TEST_KEY` | Which test key to sign applications with | | Defaults to `$(MAXIM_SBT_DIR)/devices/$(TARGET_SEC)/keys/maximtestcrk.key`, which is the Maxim test key that can be used for development. ## Project Creation From 09024cd8d61229c262bb2e6ac69ea9ac52e239ae Mon Sep 17 00:00:00 2001 From: Jake Carter Date: Tue, 13 Sep 2022 16:40:23 -0500 Subject: [PATCH 41/55] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b77a728..a41883c 100644 --- a/README.md +++ b/README.md @@ -197,7 +197,7 @@ The following configuration options are available: ### Basic Config Options -* `"target"` +#### `"target"` * This sets the target microcontroller for the project. * It sets the `TARGET` [Build Configuration](#build-configuration) variable. * Supported values: @@ -216,7 +216,7 @@ The following configuration options are available: * `"MAX78000"` * `"MAX78002"` -* `"board"` +#### `"board"` * This sets the target board for the project (ie. Evaluation Kit, Feather board, etc.) * Supported values: * ... can be found in the `Libraries/Boards` folder of the MaximSDK From 12860ec3c4d37709c58cb79d4ad7ecc83e9681c7 Mon Sep 17 00:00:00 2001 From: Jake Carter Date: Tue, 13 Sep 2022 16:51:45 -0500 Subject: [PATCH 42/55] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a41883c..fa3e85c 100644 --- a/README.md +++ b/README.md @@ -450,7 +450,7 @@ The precedence hierarchy for the value of a configuration variable is: ### Configuration Variables Table -The project's `Makefile` can be opened to see a full list of available config options, but they are nested among the implementation details of the Makefile itself. A full reference table is also available below. +The following configuration variables are available. | Variable | Description | Example | Details | |--- | --- | --- | ---| From 6b17403a4b05c74a6bb92fc9da8281424bffc402 Mon Sep 17 00:00:00 2001 From: Jake Carter Date: Tue, 4 Oct 2022 12:15:38 -0500 Subject: [PATCH 43/55] Update gitignore --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index a803a46..b8eac84 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ build buildlogs* __pycache__ -MaximSDK/Template/.vscode/readme.md \ No newline at end of file +MaximSDK/Template/.vscode/README.md \ No newline at end of file From 1fc50abd679a79e06c4678b29fcecf358f5a2865 Mon Sep 17 00:00:00 2001 From: Jake Carter Date: Tue, 4 Oct 2022 12:17:01 -0500 Subject: [PATCH 44/55] Remove tracked readme from template (insterted by generator) --- MaximSDK/Template/.vscode/README.md | 532 ---------------------------- 1 file changed, 532 deletions(-) delete mode 100644 MaximSDK/Template/.vscode/README.md diff --git a/MaximSDK/Template/.vscode/README.md b/MaximSDK/Template/.vscode/README.md deleted file mode 100644 index 69a0b0f..0000000 --- a/MaximSDK/Template/.vscode/README.md +++ /dev/null @@ -1,532 +0,0 @@ -# VSCode-Maxim - -_(If you're viewing this document from within Visual Studio Code you can press `CTRL+SHIFT+V` to open a Markdown preview window.)_ - -## Quick Links - -* [VSCode-Maxim Github](https://github.com/Analog-Devices-MSDK/VSCode-Maxim) -* [Wiki](https://github.com/Analog-Devices-MSDK/VSCode-Maxim/wiki) - * If it's not in the readme, check the wiki. - * If it's not in the wiki, open a ticket! - -## Introduction - -VSCode-Maxim is a set of [Visual Studio Code](https://code.visualstudio.com/) project configurations and utilities for enabling embedded development for [Analog Device's MSDK](https://github.com/Analog-Devices-MSDK/msdk) and the [MAX-series](https://www.maximintegrated.com/en/products/microcontrollers.html) microcontrollers. - -The following features are supported: - -* Code editing with intellisense down to the register level -* Code compilation with the ability to easily re-target a project for different microcontrollers and boards -* Flashing programs -* GUI and command-line debugging - -## Dependencies - -* [Visual Studio Code](https://code.visualstudio.com/) -* [C/C++ VSCode Extension](https://github.com/microsoft/vscode-cpptools) -* [Maxim Micros SDK](https://www.maximintegrated.com/content/maximintegrated/en/design/software-description.html/swpart=SFW0010820A) - -## Installation - -1. Download & install the Maxim Microcontrollers SDK for your OS from the links below. - * [Windows](https://www.maximintegrated.com/en/design/software-description.html/swpart=SFW0010820A) - * [Linux (Ubuntu)](https://www.maximintegrated.com/en/design/software-description.html/swpart=SFW0018720A) - * [MacOS](https://www.maximintegrated.com/en/design/software-description.html/swpart=SFW0018610A) - -2. Run the installer executable, and ensure that "Visual Studio Code Support" is enabled for your installation. - - ![Selected Components](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/installer_components.JPG) - -3. Finish the MaximSDK installation, taking note of where the MaximSDK was installed. - -4. Download & install Visual Studio Code for your OS [here](https://code.visualstudio.com/Download). - -5. Launch Visual Studio Code. - -6. Install the Microsoft [C/C++ extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools). - -7. Use `CTRL + SHIFT + P` (or `COMMAND + SHIFT + P` on MacOS) to open the developer prompt. - -8. Type "open settings json" and select the "Preferences: Open Settings (JSON)" option (_not_ the "Preferences: Open _Default_ Settings (JSON)"). This will open your user settings.json file in VS Code's editor. - - ![Open Settings JSON Command](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/open_settings_json.jpg) - -9. Add the entries below into your user settings.json file. - - ```json - { - // There may be other settings up here... - - "MAXIM_PATH":"C:/MaximSDK", // Set this to the installed location of the MaximSDK. Only use forward slashes '/' when setting this path! - "update.mode": "manual", - "extensions.autoUpdate": false, - - // There may be other settings down here... - } - ``` - -10. Save your changes to the file with `CTRL + S` and restart VS Code. - -11. That's it! You're ready to start using Visual Studio Code to develop with Maxim's Microcontrollers. The MaximSDK examples come pre-populated with .vscode project folders, and the `Tools/VSCode-Maxim` folder of the SDK contains documentation and templates. See [Usage](#usage) below for more details. - -## Usage - -This section covers basic usage of the VSCode-Maxim project files. For documentation on Visual Studio Code itself, please refer to the official docs [here](https://code.visualstudio.com/Docs). - -### Opening Projects - -Visual Studio Code is built around a "working directory" paradigm. The editor is always rooted in a working directory, and the main mechanism for changing that directory is `File -> Open Folder...`. - -![File -> Open Folder](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/file_openfolder.JPG) - -As a result, you'll notice that there is no "New Project" mechanism. A "project" in VS Code is simply a folder. It will look inside of the opened folder for a `.vscode` _sub_-folder to load project-specific settings from. - -A project that is configured for VS Code will have, at minimum, a .vscode sub-folder and a Makefile in its directory _(Note: You may need to enable viewing of hidden items in your file explorer to see the .vscode sub-folder)_. - -Ex: - -![Example Directory Contents](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/opening_projects_2.jpg) - -### Where to Find Projects - -The [Examples](https://github.com/Analog-Devices-MSDK/msdk/tree/main/Examples) in the MSDK come with with pre-configured .vscode project folders. These projects can be opened "out of the box", but it's good practice to copy example folders _outside_ of the MSDK so that the original copies are kept as clean references. The examples can be freely moved to any location _without a space in its path_. - -Additionally, empty project templates and a drag-and-drop folder for "injecting" a VSCode-Maxim project can be found under `Tools/VSCode-Maxim` in the MaximSDK installation. - -### Build Tasks - -Once a project is opened 4 available build tasks will become available via `Terminal > Run Build task...` or the shortcut `Ctrl+Shift+B`. These tasks are configured by the `.vscode/task.json` file. - -![Build Tasks Image](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/buildtasks.JPG) - -* Build - * Compiles the code with a `make all` command. - * Additional options are passed into Make on the command-line based on the project's settings.json file. - * The `./build` directory will be created and will contain the output binary, as well as all intermediary object files. - -* Clean - * Cleans the build output, removing the `./build` directory and all of its contents. - -* Clean-Periph - * This task is the same as 'clean', but it also removes the build output for Maxim's peripheral drivers. - * Use this if you would like to recompile the peripheral drivers from source on the next build. - -* Flash - * Launching this task automatically runs the `Build` task first. Then, it flashes the output binary to the microcontroller. - * It uses the GDB `load` and `compare-sections` commands, and handles launching an OpenOCD internally via a pipe connection. - * The flashed program will be halted until the microcontroller is reset, power cycled, or a debugger is connected. - * A debugger must be connected correctly to use this task. Refer to the datasheet of your microcontroller's evaluation board for instructions. - -* Flash & Run - * This is the same as the `Flash` task, but it also will launch execution of the program once flashing is complete. - -* Erase Flash - * Completely erases all of the application code in the flash memory bank. - * Once complete, the target microcontroller will be effectively "blank". - * This can be useful for recovering from Low-Power (LP) lockouts, bad firmware, etc. - -### Debugging - -![Debug Window](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/debugger.JPG) - -Debugging is enabled by Visual Studio Code's integrated debugger. Launch configurations can be found in the `.vscode/launch.json` file. - -* Note: **Flashing does not happen automatically when launching the debugger.** Run the "Flash" [build task](#build-tasks) for your program _before_ debugging. - -#### Debugger Limitations - -In general, Maxim's microcontrollers have the following debugger limitations at the hardware level: - -* The debugger can not be connected _while_ the device is in reset. - -* The device can not be debugged while the device is in Sleep, Low Power Mode, Micro Power Mode, Standby, Backup, or Shutdown mode. These modes shut down the SWD clock. - -* These limitations can sometimes make the device difficult or impossible to connect to if firmware has locked out the debugger. In such cases, the "Erase Flash" task can be used to recover the part. - -#### Launching the Debugger - -1. Attach your debugger to the SWD port on the target microcontroller. (Refer to the datasheet of your evaluation board for instructions on connecting a debugger) - -2. Flash the program to the microcontroller with the "Flash" [Build Task](#Build-Tasks). **Flashing does not happen automatically when launching the debugger.** - -3. Launch the debugger with `Run > Start Debugging`, with the shortcut `F5`, or via the `Run and Debug` window (Ctrl + Shift + D) and the green "launch" arrow. - - ![Debug Tab](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/debugger_window.JPG) - -4. The debugger will launch a GDB client & OpenOCD server, reset the microcontroller, and should break on entry into `main`. - - ![Debugger Break on Main](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/debugger_breakmain.JPG) - -#### Using the Debugger - -* For full usage details, please refer to the [official VS Code debugger documentation](https://code.visualstudio.com/docs/editor/debugging). - -The main interface for the debugger is the debugger control bar: - -![Debugger Control Bar Image](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/debugger_bar.JPG) - -`Continue | Step Over | Step Into | Step Out | Restart | Stop` - -Breakpoints can be set by clicking in the space next to the line number in a source code file. A red dot indicates a line to break on. Breakpoints can be removed by clicking on them again. Ex: - -![Breakpoint](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/breakpoint.JPG) - -## Project Configuration - -### Project Settings - -`.vscode/settings.json` is the main project configuration file. Values set here are parsed into the other .json config files. - -**When a change is made to this file, VS Code should be reloaded with CTRL+SHIFT+P -> Reload Window (or alternatively restarted completely) to force a re-parse.** - -![Reload Window](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/reload_window.JPG) - -The default project configuration should work for most use cases as long as `"target"` and `"board"` are set correctly. - -Any field from `settings.json` can be referenced from any other config file (including itself) with `"${config:[fieldname]}"` - -The following configuration options are available: - -### Basic Config Options - -* `"target"` - * This sets the target microcontroller for the project. - * It sets the `TARGET` [Build Configuration](#build-configuration) variable. - * Supported values: - * `"MAX32520"` - * `"MAX32570"` - * `"MAX32650"` - * `"MAX32655"` - * `"MAX32660"` - * `"MAX32662"` - * `"MAX32665"` (for MAX32665-MAX32668) - * `"MAX32670"` - * `"MAX32672"` - * `"MAX32675"` - * `"MAX32680"` - * `"MAX32690"` - * `"MAX78000"` - * `"MAX78002"` - -* `"board"` - * This sets the target board for the project (ie. Evaluation Kit, Feather board, etc.) - * Supported values: - * ... can be found in the `Libraries/Boards` folder of the MaximSDK - * For example, the supported options for the MAX78000 are `"EvKit_V1"`, `"FTHR_RevA"`, and `"MAXREFDES178"`. - - ![MAX78000 Boards](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/78000_boards.JPG) - -### Advanced Config Options - -#### `"MAXIM_PATH"` - -* This option must point to the root installation directory of the MaximSDK. -* It should be placed in the _global_ user settings.json file during first-time VSCode-Maxim setup. See [Installation](#installation). - -#### `"terminal.integrated.env.[platform]:Path"` - -* This prepends the location of toolchain binaries to the system `Path` used by VSCode's integrated terminal. -* The Path is not sanitized by default, which means that the terminal inherits the system path. -* Don't touch unless you know what you're doing :) - -#### `"project_name"` - -* Sets the name of project. This is used in other config options such as `program_file`. -* Default value: `"${workspaceFolderBasename}"` - -#### `"program_file"` - -* Sets the name of the file to flash and debug. This is provided in case it's needed, but for most use cases should be left at its default. -* File extension must be included. -* Default value: `"${config:project_name}.elf"` - -#### `"symbol_file"` - -* Sets the name of the file that GDB will load debug symbols from. -* File extension must be included. -* Default value: `"${config:program_file}"` - -#### `"M4_OCD_interface_file"` - -* Sets the OpenOCD interface file to use to connect to the Arm M4 core. This should match the debugger being used for the M4 core. -* The `MaximSDK/Tools/OpenOCD/scripts/interface` folder is searched for the file specified by this setting. -* `.cfg` file extension must be included. -* Default value: `"cmsis-dap.cfg"` - -#### `"M4_OCD_target_file"` - -* Sets the OpenOCD target file to use for the Arm M4 core. This should match the target microcontroller. -* `.cfg` file extension must be included. -* The `MaximSDK/Tools/OpenOCD/scripts/target` folder is searched for the file specified by this setting. -* Default value: `"${config:target}.cfg"` - -#### `"RV_OCD_interface_file"` - -* Sets the OpenOCD interface file to use to connect to the RISC-V core. This should match the debugger being used for the RISC-V core. -* The `MaximSDK/Tools/OpenOCD/scripts/interface` folder is searched for the file specified by this setting. -* `.cfg` file extension must be included. -* Default value: `"ftdi/olimex-arm-usb-ocd-h.cfg"` - -#### `"RV_OCD_target_file"` - -* Sets the OpenOCD target file to use for the RISC-V core. -* The `MaximSDK/Tools/OpenOCD/scripts/target` folder is searched for the file specified by this setting. -* `.cfg` file extension must be included. -* Default value: `"${config:target}_riscv.cfg"` - -#### `"v_Arm_GCC"` - -* Sets the version of the Arm Embedded GCC to use, including toolchain binaries and the standard library version. -* This gets parsed into `ARM_GCC_path`. -* Default value: `"10.3"` - -#### `"v_xPack_GCC"` - -* Sets the version of the xPack RISC-V GCC to use. -* This gets parsed into `xPack_GCC_path`. -* Default value: `"10.2.0-1.2"` - -#### `"OCD_path"` - -* Where to find the OpenOCD. -* Default value: `"${config:MAXIM_PATH}/Tools/OpenOCD"` - -#### `"ARM_GCC_path"` - -* Where to find the Arm Embedded GCC Toolchain. -* Default value: `"${config:MAXIM_PATH}/Tools/GNUTools/${config:v_Arm_GCC}"` - -#### `"xPack_GCC_path"` - -* Where to find the RISC-V GCC Toolchain. -* Default value: `"${config:MAXIM_PATH}/Tools/xPack/riscv-none-embed-gcc/${config:v_xPack_GCC}"` - -#### `"Make_path"` - -* Where to find Make binaries (only used on Windows) -* Default value: `"${config:MAXIM_PATH}/Tools/MSYS2/usr/bin"` - -#### `"C_Cpp.default.includePath"` - -* Which paths to search to find header (.h) files. -* Does not recursively search by default. To recursively search, use `/**`. - -#### `"C_Cpp.default.browse.path"` - -* Which paths to search to find source (.c) files. -* Does not recursively search by default. To recursively search, use `/**`. - -#### `"C_Cpp.default.defines"` - -* Sets the compiler definitions to use for the intellisense engine. -* Most definitions should be defined in header files, but if a definition is missing it can be entered here to get the intellisense engine to recognize it. - -### Setting Search Paths for Intellisense - -VS Code's intellisense engine must be told where to find the header files for your source code. By default, Maxim's perpiheral drivers, the C standard libraries, and all of the sub-directories of the workspace will be searched for header files to use with Intellisense. If VS Code throws an error on an `#include` statement (and the file exists), then a search path is most likely missing. - -To add additional search paths : - -1. Open the `.vscode/settings.json` file. - -2. Add the include path(s) to the `C_Cpp.default.includePath` list. The paths set here should contain header files, and will be searched by the Intellisense engine and when using "Go to Declaration" in the editor. - -3. Add the path(s) to any relevant implementation files to the `C_Cpp.default.browse.path` list. This list contains the paths that will be searched when using "Go to Definition". - -## Build Configuration - -A project's build system is managed by two files found in the project's root directory. These files are used alongside the [GNU Make](https://www.gnu.org/software/make/) program (which is a part of the MaximSDK toolchain) to locate and build a project's source code for the correct microcontroller. - -* `Makefile` -* `project.mk` - -![Files are located in the root directory](img/projectmk.JPG) - -When the command... - -```shell -$ make -``` - -... is run, the program `make` will load settings from these two files. Then, it will use them to build the project's source code. VSCode-Maxim is a "wrapper" around this Makefile system. - -The file named `Makefile` is the "core" file for the project. It should not be edited directly. Instead, it offers a number of configuration variables that can be overridden in the `project.mk` file, on the command-line, in your system's environment, or via your IDE. It also comes with a default configuration that is suitable for most projects. - -### Default Build Behavior - -By default, the build system will auto-search the root project directory source code (`*.c`) and header files (`*.h`). The optional "include" and "src" directories are also searched if they exist. - -```shell -Root Project Directory -├─ project.mk -├─ Makefile -├─ *.h -├─ *.c -├─include # <-- Optional - └─ *.h -├─src # <-- Optional - └─ *.c -``` - -Additionally, the "core" `Makefile` will come pre-configured for a specific target microcontroller and Board Support Package (BSP). The default BSP will match the main EVKIT for the device. In VSCode-Maxim, the two [Basic Config Options](#basic-config-options) can be used to easily override the target microcontroller and BSP. These options are passed to `make` on the command-line when the ["Build" task](#build-tasks) is run. - -For more advanced build configuration, configuration variables should be used. - -### How to Set a Configuration Variable - -A configuration variable is a [Makefile variable](https://www.gnu.org/software/make/manual/make.html#Using-Variables), and therefore follows the same rules. However, they have been streamlined to be made much easier to use, so most of the official GNU Make documentation is only needed for advanced use-cases. - -To set a configuration variable, use the syntax... - -```Makefile -VARIABLE=VALUE -``` - -The `=` operater is used for _most_ configuration variables with a few exceptions (that are clearly documented) when a variable should contain a _list_ of values. In such cases, use the syntax... - -```Makefile -VARIABLE+=VALUE1 -VARIABLE+=VALUE2 -``` - -... to _add_ values to the list. - -In most cases, you should do this from inside of **project.mk**. - -For example, if I wanted to enable hardware floating-point acceleration for my project, I would use the `MFLOAT_ABI` configuration variable to set its value to `hard`. The contents of **project.mk** might then look as follows: - -(_Inside project.mk_) - -```Makefile -# This file can be used to set build configuration -# variables. These variables are defined in a file called -# "Makefile" that is located next to this one. - -# For instructions on how to use this system, see -# https://github.com/Analog-Devices-MSDK/VSCode-Maxim/tree/develop#build-configuration - -#BOARD=FTHR_RevA -# ^ For example, you can uncomment this line to make the -# project build for the "FTHR_RevA" board. - -# ********************************************************** - -MFLOAT_ABI=hard # Enable hardware floating point acceleration -``` - -It should also be noted that configuration variables can be set on the **command-line** as well. For example... - -```shell -$ make MFLOAT_ABI=hard -``` - -... will have the same effect. - -Additionally, **environment variables** can be used. For example (on linux)... - -```shell -$ export TARGET=MAX78000 -``` - -... will set all projects to build for the MAX78000. - -However, there is a precedence hierarchy that should be taken into consideration. - -### Precedence Hierarchy - -The precedence hierarchy for the value of a configuration variable is: - -* **command-line > project.mk > environment variable > default value** - -...meaning if a value is set on the command-line _and_ project.mk, the command-line value will take precedence. However, the ["override" directive](https://www.gnu.org/software/make/manual/make.html#Override-Directive) can be used in project.mk to give it max precedence. - -### Configuration Variables Reference - -The project's `Makefile` can be opened to see a full list of available config options, but they are nested among the implementation details of the Makefile itself. This might be fine for those familiar with reading Makefiles, but a clean reference table is also available below. - -| Variable | Description | Example | Details | -|--- | --- | --- | ---| -**Target** -| `TARGET` | Set the target microcontroller | `TARGET=MAX78000` | -| `BOARD` | Set the Board Support Package (BSP) | `BOARD=FTHR_RevA` | Every microcontroller has a number of BSPs available for it that can be found in the `Libraries/Boards/TARGET` folder of the MaximSDK. When you change this option, it's usually a good idea to fully clean your project, then re-build. -**SDK** -| `MAXIM_PATH` | (Optional) Specify the location of the MaximSDK | `MAXIM_PATH=/path/to/MSDK` | This optional variable can be used to change where the Makefile looks for the MaximSDK. By default, the Makefile will attempt to locate the MaximSDK with a relative path moving "up" from its original location. This option is most useful when a project is moved _outside_ of the SDK and you're developing on the command-line, since VS Code and Eclipse will set this via an environment variable. It's also useful for re-targeting a project to point to the development repository. -| `CAMERA` | (Optional) Set the Camera drivers to use | `CAMERA=HM0360_MONO` | This option is only useful for the MAX78000 and MAX78002, and sets the camera drivers to use for the project. Permitted values are `HM01B0`, `HM0360_MONO`, `HM0360_COLOR`, `OV5642`, `OV7692` (default), or `PAG7920`. Camera drivers can be found in the `Libraries/MiscDrivers/Camera` folder of the MaximSDK. Depending on the selected camera, a compiler definition may be added to the build. See the `board.mk` Makefile in the active BSP for more details. -**Source Code** -| `VPATH` | Where to search for source (.c) files | `VPATH+=your/source/path` | **Use the `+=` operator with this option**. This controls where the Makefile will look for **source code** files. If `AUTOSEARCH` is enabled (which it is by default) this controls which paths will be searched. If `AUTOSEARCH` is disabled, this tells the Makefile where to look for the files specified by `SRCS`. -| `IPATH` | Where to search for header (.h) files | `IPATH+=your/include/path` | **Use the `+=` operator with this option**. This controls where the Makefile will look for **header** files. _Unlike_ the `VPATH` option, this is not related to `AUTOSEARCH`. Individual header files are _not_ ever manually added into the build. Instead, you only need to specify the _location_ of your header files. -| `AUTOSEARCH` | Automatically search for source (.c) files | `AUTOSEARCH=0` | Enable or disable the automatic detection of .c files on `VPATH` (enabled by default). Set to `0` to disable, or `1` to enable. If autosearch is disabled, source files must be manually added to `SRCS`. -| `SRCS` | List of source (.c) files to add to the build | `SRCS+=./my/other/source.c` | **Use the `+=` operator with this option**. All of the files in this list will be added to the build. If `AUTOSEARCH` is enabled, this is most useful for adding the full absolute path to a singular source file to selectively add to the build. If `AUTOSEARCH` is disabled, _all_ of the source files for the project must be added to `SRCS`, and they must also all be located on an entry in `VPATH`. Otherwise, a full path relative to the Makefile must be used. -| `PROJECT` | Set the output filename | `PROJECT=MyProject` | This controls the output filename of the build. File extensions should _not_ be set here since the output file format may vary depending on the build recipe. For VSCode-Maxim, you should use the [project_name](#projectname) advanced config option instead, which sets `PROJECT` on the command-line [Build Tasks](#build-tasks). -**Compiler** -| `MXC_OPTIMIZE_CFLAGS` | Set the optimization level | `MXC_OPTIMIZE_CFLAGS=-O2` | See [Optimize Options](https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html) for more details. Normal builds will default to `-Og`, which is good for debugging, while release builds will default to `-O2`. -| `PROJ_CFLAGS` | Add a compiler flag to the build | `PROJ_CFLAGS+=-Wextra`, `PROJ_CFLAGS+=-DMYDEFINE` | Compiler flags can be added with this option, including compiler definitions. For each value, the same syntax should be used as if the compiler flag was passed in via the command-line. These can include standard [GCC options](https://gcc.gnu.org/onlinedocs/gcc-10.4.0/gcc/Option-Summary.html#Option-Summary) and/or [ARM-specific](https://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html) options. -| `MFLOAT_ABI` | Set the floating point acceleration level | `MFLOAT_ABI=hard` | Sets the floating-point acceleration level. Permitted values are `hard`, `soft`, `softfp` (default). To enable full hardware acceleration instructions use `hard`, but keep in mind that _all_ libraries your source code uses must also be compiled with `hard`. If there is any conflict, you'll get a linker error. For more details, see `-mfloat-abi` under [ARM Options](https://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html). -**Linker** -| `LINKERFILE` | Set the linkerfile to use | `LINKERFILE=newlinker.ld` | You can use a different linkerfile with this option. The file should exists in `Libraries/CMSIS/Device/Maxim/TARGET/Source/GCC` in the MaximSDK, or it should be placed inside the root directory of the project. -**Libraries** -| `LIB_BOARD` | Include the BSP library (enabled by default) | `LIB_BOARD=0` | Inclusion of the Board-Support Package (BSP) library, which is enabled by default, can be toggled with this variable. This library contains important startup code specific to a microcontroller's evaluation platform, such as serial port initialization, power sequencing, external peripheral initalization, etc. Set to `0` to disable, or `1` to enable. -| `LIB_PERIPHDRIVERS` | Include the peripheral driver library (enabled by default) | `LIB_PERIPHDRIVERS=0` | The peripheral driver library can be toggled with this option. If disabled, you'll lose access to the higher-level driver functions but still have access to the register-level files. Set to `0` to disable, or `1` to enable. -| `LIB_CMSIS_DSP` | Include the CMSIS-DSP library | `LIB_CMSIS_DSP=1` | The [CMSIS-DSP library](https://www.keil.com/pack/doc/CMSIS/DSP/html/index.html) can be enabled with this option. Set to `0` to disable, or `1` to enable. -| `LIB_CORDIO` | Include the Cordio library | `LIB_CORDIO=1` | The Cordio BLE library can be included with this option. This is only applicable towards microcontrollers with an integrated BLE controller. -| `LIB_FCL` | Include the Free Cryptographic Library (FCL) | `LIB_FCL=1` | This option toggles the Free Cryptographic Library (FCL), which is a collection of software-implemented common cryptographic functions can be included with this option. Set to `0` to disable, or `1` to enable. -| `LIB_FREERTOS` | Include the FreeRTOS library | `LIB_FREERTOS=1` | The [FreeRTOS](https://freertos.org/) library can be enabled with this option, which is an open-source Real-Time Operating System (RTOS). Set to `0` to disable, or `1` to enable. -| `LIB_LC3` | Include the LC3 codec library | `LIB_LC3=1` | This option enables the inclusion of the Low Complexity Communication Codec (LC3), which is an efficient low latency audio codec. Set to `0` to disable, or `1` to enable. -| `LIB_LITTLEFS` | Include the littleFS library | `LIB_LITTLEFS=1` | This option toggles the ["Little File System"](https://github.com/littlefs-project/littlefs) library - a small filesystem library designed for microcontrollers. Set to `0` to disable, or `1` to enable. -| `LIB_LWIP` | Include the lwIP library | `LIB_LWIP=1` | | -| `LIB_MAXUSB` | Include the MaxUSB library | `LIB_MAXUSB=1` | This option toggles the inclusion of the MAXUSB library, which facilitates the use of the native USB peripherals on some microcontrollers. Set to `0` to disable, or `1` to enable. -| `LIB_SDHC` | Include the SDHC library | `LIB_SDHC=1` | This options toggles the Secure Digital High Capacity (SDHC) library, which can be used to interface with SD cards. Additionally, it enables the [FatFS](http://elm-chan.org/fsw/ff/00index_e.html) library, which implements a generic FAT filesystem. - - -## Project Creation - -### Option 1. Copying a Pre-Made Project - -Copying a pre-made example project is a great way to get rolling quickly, and is currently the recommended method for creating new projects. - -The release package for this project (Located at Tools/VSCode-Maxim in the MaximSDK) contains a `New_Project` folder designed for such purposes. Additionally, any of the VS Code-enabled Example projects can be copied from the SDK. - -1. Copy the existing project folder to an accessible location. This will be the location of your new project. - -2. (Optional) Rename the folder. For example, I might rename the folder to `MyProject`. - -3. Open the project in VS Code (`File -> Open Folder...`) - -4. Set your target microcontroller and board correctly. See [Basic Config Options](#basic-config-options) - -5. `CTRL+SHIFT+P -> Reload Window` to re-parse the project settings. - -6. That's it! The existing project is ready to build, debug, and modify. - -### Option 2 - Creating a Project from Scratch - -If you want to start from scratch, take this option. - -1. Create your project folder. For example, I might create a new project in a workspace folder with the path: `C:\Users\Jake.Carter\workspace\MyNewProject`. - -2. Copy the **contents** of the `Inject` folder into the project folder created in step 2. This includes a `.vscode` folder and a `Makefile`. In the example above, the contents of the 'MyProject' folder would be the following : - - ```shell - C:\Users\Jake.Carter\workspace\MyNewProject - +-- \.vscode - +-- Makefile - ``` - -3. Open the project in VS Code (`File -> Open Folder...`) - -4. Set your target microcontroller correctly. See [Basic Config Options](#basic-config-options). - -5. `CTRL+SHIFT+P -> Reload Window` to re-parse the project settings. - -6. Fundamentally, that's it. Your new empty project can now be opened with `File > Open Folder` from within VS Code. - -## Issue Tracker - -Bug reports, feature requests, and contributions are welcome via the [issues](https://github.com/MaximIntegratedTechSupport/VSCode-Maxim/issues) tracker on Github. - -New issues should contain _at minimum_ the following information: - -* Visual Studio Code version #s (see `Help -> About`) -* C/C++ Extension version # -* Target microcontroller and evaluation platform -* The projects `.vscode` folder and `Makefile` (where applicable). Standard compression formats such as `.zip`, `.rar`, `.tar.gz`, etc. are all acceptable. From d8adab1e1cacd2c5c27de10d58249806ab80df61 Mon Sep 17 00:00:00 2001 From: Jake Carter Date: Tue, 4 Oct 2022 12:17:24 -0500 Subject: [PATCH 45/55] Use 'make' instead of 'make all' in test function --- maintain.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maintain.py b/maintain.py index 96f8c9d..ecc74ef 100644 --- a/maintain.py +++ b/maintain.py @@ -249,7 +249,7 @@ def test(maxim_path, targets=None, boards=None, projects=None): success = True # Test build (make all) - build_cmd = f"make -r -j 8 all TARGET={target} MAXIM_PATH={maxim_path.as_posix()} BOARD={board} MAKE=make" + build_cmd = f"make -r -j 8 TARGET={target} MAXIM_PATH={maxim_path.as_posix()} BOARD={board} MAKE=make" res = run_cmd(build_cmd, env=env, cwd=project, shell=True, capture_output=True, encoding="utf-8") # Run build command # Error check build command From 10ace6f29780ba32be40c6ce72c5392a5e8d6894 Mon Sep 17 00:00:00 2001 From: Jake Carter Date: Tue, 4 Oct 2022 12:19:18 -0500 Subject: [PATCH 46/55] Use 'make' instead of 'make all' --- MaximSDK/Inject/.vscode/tasks.json | 2 +- MaximSDK/New_Project/.vscode/tasks.json | 2 +- MaximSDK/Template/.vscode/tasks.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/MaximSDK/Inject/.vscode/tasks.json b/MaximSDK/Inject/.vscode/tasks.json index 3951f35..81917f6 100644 --- a/MaximSDK/Inject/.vscode/tasks.json +++ b/MaximSDK/Inject/.vscode/tasks.json @@ -4,7 +4,7 @@ { "label": "build", "type": "shell", - "command": "make -r -j 8 all TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", + "command": "make -r -j 8 TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", "group": "build", "problemMatcher": [] }, diff --git a/MaximSDK/New_Project/.vscode/tasks.json b/MaximSDK/New_Project/.vscode/tasks.json index 3951f35..81917f6 100644 --- a/MaximSDK/New_Project/.vscode/tasks.json +++ b/MaximSDK/New_Project/.vscode/tasks.json @@ -4,7 +4,7 @@ { "label": "build", "type": "shell", - "command": "make -r -j 8 all TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", + "command": "make -r -j 8 TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", "group": "build", "problemMatcher": [] }, diff --git a/MaximSDK/Template/.vscode/tasks.json b/MaximSDK/Template/.vscode/tasks.json index 3951f35..81917f6 100644 --- a/MaximSDK/Template/.vscode/tasks.json +++ b/MaximSDK/Template/.vscode/tasks.json @@ -4,7 +4,7 @@ { "label": "build", "type": "shell", - "command": "make -r -j 8 all TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", + "command": "make -r -j 8 TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", "group": "build", "problemMatcher": [] }, From 5d270e05449352fff78a637154c66b90f3b5ad09 Mon Sep 17 00:00:00 2001 From: Jake Carter Date: Tue, 4 Oct 2022 12:22:26 -0500 Subject: [PATCH 47/55] Update readme --- README.md | 46 ++++++++++++++++++++++++---------------------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index fa3e85c..f57d436 100644 --- a/README.md +++ b/README.md @@ -198,31 +198,33 @@ The following configuration options are available: ### Basic Config Options #### `"target"` - * This sets the target microcontroller for the project. - * It sets the `TARGET` [Build Configuration](#build-configuration) variable. - * Supported values: - * `"MAX32520"` - * `"MAX32570"` - * `"MAX32650"` - * `"MAX32655"` - * `"MAX32660"` - * `"MAX32662"` - * `"MAX32665"` (for MAX32665-MAX32668) - * `"MAX32670"` - * `"MAX32672"` - * `"MAX32675"` - * `"MAX32680"` - * `"MAX32690"` - * `"MAX78000"` - * `"MAX78002"` + +* This sets the target microcontroller for the project. +* It sets the `TARGET` [Build Configuration](#build-configuration) variable. +* Supported values: + * `"MAX32520"` + * `"MAX32570"` + * `"MAX32650"` + * `"MAX32655"` + * `"MAX32660"` + * `"MAX32662"` + * `"MAX32665"` (for MAX32665-MAX32668) + * `"MAX32670"` + * `"MAX32672"` + * `"MAX32675"` + * `"MAX32680"` + * `"MAX32690"` + * `"MAX78000"` + * `"MAX78002"` #### `"board"` - * This sets the target board for the project (ie. Evaluation Kit, Feather board, etc.) - * Supported values: - * ... can be found in the `Libraries/Boards` folder of the MaximSDK - * For example, the supported options for the MAX78000 are `"EvKit_V1"`, `"FTHR_RevA"`, and `"MAXREFDES178"`. - ![MAX78000 Boards](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/78000_boards.JPG) +* This sets the target board for the project (ie. Evaluation Kit, Feather board, etc.) +* Supported values: + * ... can be found in the `Libraries/Boards` folder of the MaximSDK + * For example, the supported options for the MAX78000 are `"EvKit_V1"`, `"FTHR_RevA"`, and `"MAXREFDES178"`. + + ![MAX78000 Boards](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/78000_boards.JPG) ### Advanced Config Options From 3dcc3e649adb824b3d474ee2e8a47c5c7bf37583 Mon Sep 17 00:00:00 2001 From: Jake Carter Date: Mon, 10 Oct 2022 17:11:32 -0500 Subject: [PATCH 48/55] Improve pyinstaller compatibility --- generate.py | 18 ++++++++++++------ maintain.py | 23 ++++++++++++++++------- 2 files changed, 28 insertions(+), 13 deletions(-) diff --git a/generate.py b/generate.py index d2cebb7..40874e5 100644 --- a/generate.py +++ b/generate.py @@ -32,7 +32,7 @@ *******************************************************************************/ """ -import os +import sys, os import shutil import stat # from utils import * @@ -42,10 +42,19 @@ # Get location of this file. # Need to use this so that template look-ups are decoupled from the caller's working directory -here = Path(__file__).parent +if getattr(sys, 'frozen', False): + # https://pyinstaller.org/en/stable/runtime-information.html#run-time-information + # Use sys.executable if app is bundled by pyinstaller + here = Path(sys.executable).parent + _defaults = here.joinpath("VSCode/MaximSDK/Inject/.vscode/settings.json") + template_dir = here.joinpath("VSCode/MaximSDK/Template").resolve() +else: + here = Path(__file__).parent + _defaults = here.joinpath("MaximSDK/Inject/.vscode/settings.json") + template_dir = here.joinpath("MaximSDK/Template").resolve() # Load default values for template from master "inject" folder so that we don't have to maintain multiple copies of the settings -defaults = utils.parse_json(here.joinpath("MaximSDK/Inject/.vscode/settings.json")) +defaults = utils.parse_json(_defaults) synced=False @@ -97,9 +106,6 @@ def create_project( out_path = Path(out_root).joinpath(out_stem) - template_dir = here.joinpath("MaximSDK/Template").resolve() - # Where to find the VS Code template directory relative to this script - template_prefix = "template" # Filenames beginning with this will have substitution diff --git a/maintain.py b/maintain.py index ecc74ef..de12444 100644 --- a/maintain.py +++ b/maintain.py @@ -32,7 +32,7 @@ *******************************************************************************/ """ -import os +import os, sys from subprocess import run import platform import time @@ -41,7 +41,16 @@ from pathlib import Path from datetime import date -here = Path(__file__).parent +# Get location of this file. +# Need to use this so that template look-ups are decoupled from the caller's working directory +if getattr(sys, 'frozen', False): + # https://pyinstaller.org/en/stable/runtime-information.html#run-time-information + # Use sys.executable if app is bundled by pyinstaller + here = Path(sys.executable).parent + _vscode_dir = here.joinpath("VSCode") +else: + here = Path(__file__).parent + _vscode_dir = here curplatform = platform.system() # Get OS @@ -76,11 +85,11 @@ def run_cmd(*args, **kwargs): def sync(): # Inject .vscode folder into example projects - inject_dir = here.joinpath("MaximSDK", "Inject", ".vscode") - new_proj_dir = here.joinpath("MaximSDK", "New_Project", ".vscode") - template_dir = here.joinpath("MaximSDK", "Template", ".vscode") + inject_dir = _vscode_dir.joinpath("MaximSDK", "Inject", ".vscode") + new_proj_dir = _vscode_dir.joinpath("MaximSDK", "New_Project", ".vscode") + template_dir = _vscode_dir.joinpath("MaximSDK", "Template", ".vscode") - print("Syncing VSCode template...") + # print("Syncing VSCode template...") for f in os.scandir(inject_dir): shutil.copy(f, new_proj_dir) @@ -89,7 +98,7 @@ def sync(): shutil.copy(inject_dir.joinpath("c_cpp_properties.json"), template_dir) shutil.copy(inject_dir.joinpath("tasks.json"), template_dir) shutil.copy(inject_dir.joinpath("flash.gdb"), template_dir) - shutil.copy(here.joinpath("README.md"), template_dir) + shutil.copy(_vscode_dir.joinpath("README.md"), template_dir) def release(version): sync() From ec40b4f99b18da2a396cefdb47b9184cc186d882 Mon Sep 17 00:00:00 2001 From: Jake Carter Date: Mon, 10 Oct 2022 17:51:11 -0500 Subject: [PATCH 49/55] Add backup option --- generate.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/generate.py b/generate.py index 40874e5..e018d2f 100644 --- a/generate.py +++ b/generate.py @@ -79,6 +79,7 @@ def create_project( target: str, board: str, overwrite = False, + backup = False, program_file: str = defaults["PROGRAM_FILE"], symbol_file: str = defaults["SYMBOL_FILE"], m4_ocd_interface_file: str = defaults["M4_OCD_INTERFACE_FILE"], @@ -207,6 +208,8 @@ def create_project( write = False if write: + if backup and out_file.exists(): + shutil.copy(out_file, out_path.joinpath(f"{out_file.name}.backup")) shutil.copy(in_file, out_path) os.chmod(out_file, stat.S_IRWXU | stat.S_IRGRP | stat.S_IWGRP | stat.S_IROTH) if out_file not in updated: From 30040c3af7e49a7d33e4cd76feccba7abe04a410 Mon Sep 17 00:00:00 2001 From: Jake Carter Date: Tue, 11 Oct 2022 13:01:25 -0500 Subject: [PATCH 50/55] Sync core Makefiles --- MaximSDK/Inject/Makefile | 164 +++++++++++++++++++++++++------- MaximSDK/Inject/project.mk | 18 ++-- MaximSDK/New_Project/Makefile | 164 +++++++++++++++++++++++++------- MaximSDK/New_Project/project.mk | 18 ++-- 4 files changed, 280 insertions(+), 84 deletions(-) diff --git a/MaximSDK/Inject/Makefile b/MaximSDK/Inject/Makefile index 786f356..f16fc0e 100644 --- a/MaximSDK/Inject/Makefile +++ b/MaximSDK/Inject/Makefile @@ -1,5 +1,5 @@ # /******************************************************************************* -# * Copyright (C) 2021 Maxim Integrated Products, Inc., All Rights Reserved. +# * Copyright (C) 2022 Maxim Integrated Products, Inc., All Rights Reserved. # * # * Permission is hereby granted, free of charge, to any person obtaining a # * copy of this software and associated documentation files (the "Software"), @@ -29,33 +29,29 @@ # * property whatsoever. Maxim Integrated Products, Inc. retains all # * ownership rights. # ******************************************************************************* +# */ # ** Readme! ** -# Don't edit this file! Edit "project.mk" instead... +# Don't edit this file! This is the core Makefile for a MaximSDK +# project. The available configuration options can be overridden +# in "project.mk", on the command-line, or with system environment +# variables. -# This is the core Makefile for a MaximSDK project. The configuration below -# is made to be suitable for most use-cases, and you normally shouldn't ever -# need to edit this file directly. Instead, if you do need to modify the build system -# for your project use the "project.mk" file to override and/or add to the -# various "API"-like configuration variables that are available. +# See https://github.com/Analog-Devices-MSDK/VSCode-Maxim/tree/develop#build-configuration +# for more detailed instructions on how to use this system. -# You can also set most configuration variables on the command-line or in your -# system's environment variables. If you're using a supported IDE, it will -# offer its own options for overriding the available configuration variables. - -# For more details on what configuration variables are available, see the sections -# of this Makefile below. Each section contains a description and a list of -# options. - -# For a more comprehensive overview of Make itself, see https://www.gnu.org/software/make/manual/ +# The detailed instructions mentioned above are easier to read than +# this file, but the comments found in this file also outline the +# available configuration variables. This file is organized into +# sub-sections, some of which expose config variables. # ******************************************************************************* # Set the target microcontroller and board to compile for. -# Every TARGET microcontroller has some Board Support Packages (BSPs) that are available -# for it under the MaximSDK/Libraries/Boards/TARGET folder. The BSP that gets -# selected is MaximSDK/Libraries/Boards/TARGET/BOARD. +# Every TARGET microcontroller has some Board Support Packages (BSPs) that are +# available for it under the MaximSDK/Libraries/Boards/TARGET folder. The BSP +# that gets selected is MaximSDK/Libraries/Boards/TARGET/BOARD. # Configuration Variables: # - TARGET : Override the default target microcontroller. Ex: TARGET=MAX78000 @@ -117,7 +113,7 @@ ifeq "$(MAXIM_PATH)" "" # MAXIM_PATH is still not defined... DEPTH := ../../../ MAXIM_PATH := $(abspath $(DEPTH)) -$(warning Warning: MAXIM_PATH is not set! It's recommended to set MAXIM_PATH in your environment or in project.mk) +$(warning Warning: MAXIM_PATH is not set! Set MAXIM_PATH in your environment or in project.mk to clear this warning.) $(warning Warning: Attempting to use $(MAXIM_PATH) calculated from relative path) else # Sanitize MAXIM_PATH for backslashes @@ -143,12 +139,12 @@ export CMSIS_ROOT # The following paths are searched by default, where "./" is the project directory. # ./ -# ├─ *.h -# ├─ *.c -# ├─include (optional) -# └─ *.h -# ├─src (optional) -# └─ *.c +# |- *.h +# |- *.c +# |-include (optional) +# |- *.h +# |-src (optional) +# |- *.c # Configuration Variables: # - VPATH : Tell this Makefile to search additional locations for source (.c) files. @@ -171,10 +167,12 @@ export CMSIS_ROOT # Where to find source files for this project. VPATH += . +VPATH += src VPATH := $(VPATH) # Where to find header files for this project IPATH += . +IPATH += include IPATH := $(IPATH) AUTOSEARCH ?= 1 @@ -194,7 +192,7 @@ SRCS := $(SRCS) # The default value creates a file named after the target micro. Ex: MAX78000.elf -PROJECT ?= $(TARGET_UC) +PROJECT ?= $(TARGET_LC) # ******************************************************************************* # Compiler options @@ -217,15 +215,26 @@ ifeq "$(COMPILER)" "" COMPILER := GCC endif -# Set compiler optimization level +# Set default compiler optimization levels ifeq "$(MAKECMDGOALS)" "release" -# Optimization level for "release" builds -MXC_OPTIMIZE_CFLAGS := -O2 -else -# Optimization level for default builds +# Default optimization level for "release" builds (make release) +MXC_OPTIMIZE_CFLAGS ?= -O2 +DEBUG = 0 +endif + +ifeq ($(DEBUG),1) +# Default optimization level for debug builds (make DEBUG=1 ...) +# gcc.mk checks for this flag to add some additional debug +# info to the build, and should be used when you really need to +# debug. MXC_OPTIMIZE_CFLAGS := -Og endif +# Fallback default optimizes for debugging as recommended +# by GNU for code-edit-debug cycles +# https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#Optimize-Options +MXC_OPTIMIZE_CFLAGS ?= -Og + # Set compiler flags PROJ_CFLAGS += -Wall # Enable warnings PROJ_CFLAGS += -DMXC_ASSERT_ENABLE @@ -249,12 +258,82 @@ export MFLOAT_ABI ifeq "$(RISCV_CORE)" "" # Default linkerfile is only specified for standard Arm-core projects. # Otherwise, gcc_riscv.mk sets the appropriate riscv linkerfile. -LINKERFILE ?= $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/GCC/$(TARGET_LC).ld +LINKER = $(TARGET_LC).ld +LINKERFILE ?= $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/GCC/$(LINKER) endif # This path contains system-level intialization files for the target micro. Add to the build. VPATH += $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source +# ******************************************************************************* +# Secure Boot Tools (SBT) + +# This section integrates the Secure Boot Tools. It's intended for use with +# microcontrollers that have a secure bootloader. + +# Enabling SBT integration will add some special rules, such as "make sla", "make scpa", etc. + +# Configuration variables: +# SBT : Toggle SBT integration. Set to 1 to enable, or 0 +# to disable +# MAXIM_SBT_DIR : Specify the location of the SBT tool binaries. This defaults to +# Tools/SBT in the MaximSDK. The standalone SBT installer will override +# this via an environment variable. +# TARGET_SEC : Specify the part number to be passed into the SBT. This should match +# the secure variant part #. The default value will depend on TARGET. +# For example, TARGET=MAX32650 will result in TARGET_SEC=MAX32651, and +# the default selection happens in Tools/SBT/SBT-config. +# However, if there are multiple secure part #s for the target +# microcontroller this variable may need to be changed. + +SBT ?= 0 +ifeq ($(SBT), 1) +MAXIM_SBT_DIR ?= $(MAXIM_PATH)/Tools/SBT +MAXIM_SBT_DIR := $(subst \,/,$(MAXIM_SBT_DIR)) +# ^ Must sanitize path for \ on Windows, since this may come from an environment +# variable. + +export MAXIM_SBT_DIR # SBTs must have this environment variable defined to work + +# SBT-config.mk and SBT-rules.mk are included further down this Makefile. + +endif # SBT + +# ******************************************************************************* +# Default goal selection. This section allows you to override the default goal +# that will run if no targets are specified on the command-line. +# (ie. just running 'make' instead of 'make all') + +# Configuration variables: +# .DEFAULT_GOAL : Set the default goal if no targets were specified on the +# command-line +# ** "override" must be used with this variable. ** +# Ex: "override .DEFAULT_GOAL = mygoal" + +ifeq "$(.DEFAULT_GOAL)" "" +ifeq ($(SBT),1) +override .DEFAULT_GOAL := sla +else +override .DEFAULT_GOAL := all +endif +endif + +# Developer note: 'override' is used above for legacy Makefile compatibility. +# gcc.mk/gcc_riscv.mk need to hard-set 'all' internally, so this new system +# uses 'override' to come in over the top without breaking old projects. + +# It's also necessary to explicitly set MAKECMDGOALS... +ifeq "$(MAKECMDGOALS)" "" +MAKECMDGOALS:=$(.DEFAULT_GOAL) +endif + +# ******************************************************************************* +# Include SBT config. We need to do this here because it needs to know +# the current MAKECMDGOAL. +ifeq ($(SBT),1) +include $(MAXIM_PATH)/Tools/SBT/SBT-config.mk +endif + # ******************************************************************************* # Libraries @@ -273,20 +352,37 @@ VPATH += $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source # - LIB_FCL : Include the Free Cryptographic Library (FCL) # - LIB_FREERTOS : Include the FreeRTOS and FreeRTOS-Plus-CLI libraries # - LIB_LC3 : Include the Low Complexity Communication Codec (LC3) library -# - LIB_LTTLEFS : Include the "little file system" (littleFS) library +# - LIB_LITTLEFS : Include the "little file system" (littleFS) library # - LIB_LWIP : Include the lwIP library # - LIB_MAXUSB : Include the MAXUSB library # - LIB_SDHC : Include the SDHC library include $(LIBS_DIR)/libs.mk + # ******************************************************************************* +# Rules + # Include the rules for building for this target. All other makefiles should be # included before this one. include $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/$(COMPILER)/$(TARGET_LC).mk +# Include the rules that integrate the SBTs. SBTs are a special case that must be +# include after the core gcc rules to extend them. +ifeq ($(SBT), 1) +include $(MAXIM_PATH)/Tools/SBT/SBT-rules.mk +endif + + +# Get .DEFAULT_GOAL working. +ifeq "$(MAKECMDGOALS)" "" +MAKECMDGOALS:=$(.DEFAULT_GOAL) +endif + + all: # Extend the functionality of the "all" recipe here + arm-none-eabi-size --format=berkeley $(BUILD_DIR)/$(PROJECT).elf libclean: $(MAKE) -f ${PERIPH_DRIVER_DIR}/periphdriver.mk clean.periph diff --git a/MaximSDK/Inject/project.mk b/MaximSDK/Inject/project.mk index 45184da..250f70c 100644 --- a/MaximSDK/Inject/project.mk +++ b/MaximSDK/Inject/project.mk @@ -1,11 +1,13 @@ -# This file can be used for project configuration. -# It's a sibling to the core "Makefile", which offers -# various configuration variables that you can set here -# if the default setup isn't suitable. - -# See the comments in the "Makefile" for a detailed -# description of the default behavior and the full list of -# available options. +# This file can be used to set build configuration +# variables. These variables are defined in a file called +# "Makefile" that is located next to this one. + +# For instructions on how to use this system, see +# https://github.com/Analog-Devices-MSDK/VSCode-Maxim/tree/develop#build-configuration + +# ********************************************************** + +# Add your config here! diff --git a/MaximSDK/New_Project/Makefile b/MaximSDK/New_Project/Makefile index 786f356..f16fc0e 100644 --- a/MaximSDK/New_Project/Makefile +++ b/MaximSDK/New_Project/Makefile @@ -1,5 +1,5 @@ # /******************************************************************************* -# * Copyright (C) 2021 Maxim Integrated Products, Inc., All Rights Reserved. +# * Copyright (C) 2022 Maxim Integrated Products, Inc., All Rights Reserved. # * # * Permission is hereby granted, free of charge, to any person obtaining a # * copy of this software and associated documentation files (the "Software"), @@ -29,33 +29,29 @@ # * property whatsoever. Maxim Integrated Products, Inc. retains all # * ownership rights. # ******************************************************************************* +# */ # ** Readme! ** -# Don't edit this file! Edit "project.mk" instead... +# Don't edit this file! This is the core Makefile for a MaximSDK +# project. The available configuration options can be overridden +# in "project.mk", on the command-line, or with system environment +# variables. -# This is the core Makefile for a MaximSDK project. The configuration below -# is made to be suitable for most use-cases, and you normally shouldn't ever -# need to edit this file directly. Instead, if you do need to modify the build system -# for your project use the "project.mk" file to override and/or add to the -# various "API"-like configuration variables that are available. +# See https://github.com/Analog-Devices-MSDK/VSCode-Maxim/tree/develop#build-configuration +# for more detailed instructions on how to use this system. -# You can also set most configuration variables on the command-line or in your -# system's environment variables. If you're using a supported IDE, it will -# offer its own options for overriding the available configuration variables. - -# For more details on what configuration variables are available, see the sections -# of this Makefile below. Each section contains a description and a list of -# options. - -# For a more comprehensive overview of Make itself, see https://www.gnu.org/software/make/manual/ +# The detailed instructions mentioned above are easier to read than +# this file, but the comments found in this file also outline the +# available configuration variables. This file is organized into +# sub-sections, some of which expose config variables. # ******************************************************************************* # Set the target microcontroller and board to compile for. -# Every TARGET microcontroller has some Board Support Packages (BSPs) that are available -# for it under the MaximSDK/Libraries/Boards/TARGET folder. The BSP that gets -# selected is MaximSDK/Libraries/Boards/TARGET/BOARD. +# Every TARGET microcontroller has some Board Support Packages (BSPs) that are +# available for it under the MaximSDK/Libraries/Boards/TARGET folder. The BSP +# that gets selected is MaximSDK/Libraries/Boards/TARGET/BOARD. # Configuration Variables: # - TARGET : Override the default target microcontroller. Ex: TARGET=MAX78000 @@ -117,7 +113,7 @@ ifeq "$(MAXIM_PATH)" "" # MAXIM_PATH is still not defined... DEPTH := ../../../ MAXIM_PATH := $(abspath $(DEPTH)) -$(warning Warning: MAXIM_PATH is not set! It's recommended to set MAXIM_PATH in your environment or in project.mk) +$(warning Warning: MAXIM_PATH is not set! Set MAXIM_PATH in your environment or in project.mk to clear this warning.) $(warning Warning: Attempting to use $(MAXIM_PATH) calculated from relative path) else # Sanitize MAXIM_PATH for backslashes @@ -143,12 +139,12 @@ export CMSIS_ROOT # The following paths are searched by default, where "./" is the project directory. # ./ -# ├─ *.h -# ├─ *.c -# ├─include (optional) -# └─ *.h -# ├─src (optional) -# └─ *.c +# |- *.h +# |- *.c +# |-include (optional) +# |- *.h +# |-src (optional) +# |- *.c # Configuration Variables: # - VPATH : Tell this Makefile to search additional locations for source (.c) files. @@ -171,10 +167,12 @@ export CMSIS_ROOT # Where to find source files for this project. VPATH += . +VPATH += src VPATH := $(VPATH) # Where to find header files for this project IPATH += . +IPATH += include IPATH := $(IPATH) AUTOSEARCH ?= 1 @@ -194,7 +192,7 @@ SRCS := $(SRCS) # The default value creates a file named after the target micro. Ex: MAX78000.elf -PROJECT ?= $(TARGET_UC) +PROJECT ?= $(TARGET_LC) # ******************************************************************************* # Compiler options @@ -217,15 +215,26 @@ ifeq "$(COMPILER)" "" COMPILER := GCC endif -# Set compiler optimization level +# Set default compiler optimization levels ifeq "$(MAKECMDGOALS)" "release" -# Optimization level for "release" builds -MXC_OPTIMIZE_CFLAGS := -O2 -else -# Optimization level for default builds +# Default optimization level for "release" builds (make release) +MXC_OPTIMIZE_CFLAGS ?= -O2 +DEBUG = 0 +endif + +ifeq ($(DEBUG),1) +# Default optimization level for debug builds (make DEBUG=1 ...) +# gcc.mk checks for this flag to add some additional debug +# info to the build, and should be used when you really need to +# debug. MXC_OPTIMIZE_CFLAGS := -Og endif +# Fallback default optimizes for debugging as recommended +# by GNU for code-edit-debug cycles +# https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#Optimize-Options +MXC_OPTIMIZE_CFLAGS ?= -Og + # Set compiler flags PROJ_CFLAGS += -Wall # Enable warnings PROJ_CFLAGS += -DMXC_ASSERT_ENABLE @@ -249,12 +258,82 @@ export MFLOAT_ABI ifeq "$(RISCV_CORE)" "" # Default linkerfile is only specified for standard Arm-core projects. # Otherwise, gcc_riscv.mk sets the appropriate riscv linkerfile. -LINKERFILE ?= $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/GCC/$(TARGET_LC).ld +LINKER = $(TARGET_LC).ld +LINKERFILE ?= $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/GCC/$(LINKER) endif # This path contains system-level intialization files for the target micro. Add to the build. VPATH += $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source +# ******************************************************************************* +# Secure Boot Tools (SBT) + +# This section integrates the Secure Boot Tools. It's intended for use with +# microcontrollers that have a secure bootloader. + +# Enabling SBT integration will add some special rules, such as "make sla", "make scpa", etc. + +# Configuration variables: +# SBT : Toggle SBT integration. Set to 1 to enable, or 0 +# to disable +# MAXIM_SBT_DIR : Specify the location of the SBT tool binaries. This defaults to +# Tools/SBT in the MaximSDK. The standalone SBT installer will override +# this via an environment variable. +# TARGET_SEC : Specify the part number to be passed into the SBT. This should match +# the secure variant part #. The default value will depend on TARGET. +# For example, TARGET=MAX32650 will result in TARGET_SEC=MAX32651, and +# the default selection happens in Tools/SBT/SBT-config. +# However, if there are multiple secure part #s for the target +# microcontroller this variable may need to be changed. + +SBT ?= 0 +ifeq ($(SBT), 1) +MAXIM_SBT_DIR ?= $(MAXIM_PATH)/Tools/SBT +MAXIM_SBT_DIR := $(subst \,/,$(MAXIM_SBT_DIR)) +# ^ Must sanitize path for \ on Windows, since this may come from an environment +# variable. + +export MAXIM_SBT_DIR # SBTs must have this environment variable defined to work + +# SBT-config.mk and SBT-rules.mk are included further down this Makefile. + +endif # SBT + +# ******************************************************************************* +# Default goal selection. This section allows you to override the default goal +# that will run if no targets are specified on the command-line. +# (ie. just running 'make' instead of 'make all') + +# Configuration variables: +# .DEFAULT_GOAL : Set the default goal if no targets were specified on the +# command-line +# ** "override" must be used with this variable. ** +# Ex: "override .DEFAULT_GOAL = mygoal" + +ifeq "$(.DEFAULT_GOAL)" "" +ifeq ($(SBT),1) +override .DEFAULT_GOAL := sla +else +override .DEFAULT_GOAL := all +endif +endif + +# Developer note: 'override' is used above for legacy Makefile compatibility. +# gcc.mk/gcc_riscv.mk need to hard-set 'all' internally, so this new system +# uses 'override' to come in over the top without breaking old projects. + +# It's also necessary to explicitly set MAKECMDGOALS... +ifeq "$(MAKECMDGOALS)" "" +MAKECMDGOALS:=$(.DEFAULT_GOAL) +endif + +# ******************************************************************************* +# Include SBT config. We need to do this here because it needs to know +# the current MAKECMDGOAL. +ifeq ($(SBT),1) +include $(MAXIM_PATH)/Tools/SBT/SBT-config.mk +endif + # ******************************************************************************* # Libraries @@ -273,20 +352,37 @@ VPATH += $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source # - LIB_FCL : Include the Free Cryptographic Library (FCL) # - LIB_FREERTOS : Include the FreeRTOS and FreeRTOS-Plus-CLI libraries # - LIB_LC3 : Include the Low Complexity Communication Codec (LC3) library -# - LIB_LTTLEFS : Include the "little file system" (littleFS) library +# - LIB_LITTLEFS : Include the "little file system" (littleFS) library # - LIB_LWIP : Include the lwIP library # - LIB_MAXUSB : Include the MAXUSB library # - LIB_SDHC : Include the SDHC library include $(LIBS_DIR)/libs.mk + # ******************************************************************************* +# Rules + # Include the rules for building for this target. All other makefiles should be # included before this one. include $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/$(COMPILER)/$(TARGET_LC).mk +# Include the rules that integrate the SBTs. SBTs are a special case that must be +# include after the core gcc rules to extend them. +ifeq ($(SBT), 1) +include $(MAXIM_PATH)/Tools/SBT/SBT-rules.mk +endif + + +# Get .DEFAULT_GOAL working. +ifeq "$(MAKECMDGOALS)" "" +MAKECMDGOALS:=$(.DEFAULT_GOAL) +endif + + all: # Extend the functionality of the "all" recipe here + arm-none-eabi-size --format=berkeley $(BUILD_DIR)/$(PROJECT).elf libclean: $(MAKE) -f ${PERIPH_DRIVER_DIR}/periphdriver.mk clean.periph diff --git a/MaximSDK/New_Project/project.mk b/MaximSDK/New_Project/project.mk index 45184da..250f70c 100644 --- a/MaximSDK/New_Project/project.mk +++ b/MaximSDK/New_Project/project.mk @@ -1,11 +1,13 @@ -# This file can be used for project configuration. -# It's a sibling to the core "Makefile", which offers -# various configuration variables that you can set here -# if the default setup isn't suitable. - -# See the comments in the "Makefile" for a detailed -# description of the default behavior and the full list of -# available options. +# This file can be used to set build configuration +# variables. These variables are defined in a file called +# "Makefile" that is located next to this one. + +# For instructions on how to use this system, see +# https://github.com/Analog-Devices-MSDK/VSCode-Maxim/tree/develop#build-configuration + +# ********************************************************** + +# Add your config here! From 8f1ada503a7d0cee56832029c34052feb3610502 Mon Sep 17 00:00:00 2001 From: Jake Carter Date: Tue, 11 Oct 2022 13:37:02 -0500 Subject: [PATCH 51/55] Update UG --- img/inject_gpio.JPG | Bin 117155 -> 165730 bytes img/inject_gpio_finished.JPG | Bin 62202 -> 62202 bytes userguide.md | 156 ++++++++++++++--------------------- 3 files changed, 62 insertions(+), 94 deletions(-) diff --git a/img/inject_gpio.JPG b/img/inject_gpio.JPG index 6a62cf2a8e7485c677d0e854faa5e810cedc216f..6a47bf72c1a721edf7ce25f79ebc8384677c4c33 100644 GIT binary patch literal 165730 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%0AWob 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

D*)ELL`EE3cnmrir2XAgH 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 DZ4TjE literal 117155 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 z za;_aaH#K~gqU^{UL%zmB+(Ppw;zlS#DU@0xWtOLb%soBvP=z~`^>x{8M|KH3VrCn* zu9#<}%Os|C?H)jkY8>74sTZ(o5yQ6;IXBMFUDkuO)8Uy~f6RMrK7NC;GQNAtCWa>X zZEd?I)9@SFt*j-VodfOro(xBJSJL>B&2xQ@!c;Im`?4bUtenwHizyV~iGv71F4?&| z)E<^VVDK{JPrwx2#Z0Tl1X%{iVgdw2xG>52dyZO*+Ot3qJbBn-CK_c+hetr1n2aub z>qDsAONuC&PaX`>4-hE=YwC(QUa1GX89$21xty(bXpPV9L*X~#S1neSNjo~5yO(d! zmYLVzDWwv$yAG_Tur{e`kg}auy4M}-@4T;m?9b@%sI2lV ztm1SV@)&6@ZGH%_lv;zlV&Wv;s&|C%^o{WqH>l;SrO@rKMY5-W90yaK3P$2*S%27U zx{RfSl=UbQwa^l^9TL}~8=sFj6(y&`Wp@_GCvv0?4mL&ig7q|lR%3G@L!Lj{Z3hqq zZIDQ|O66B0S@jAQzI1Lb{^&s?z`p&U*FT+d>pe5i_w4fM=~W4jr(V{ngsOqV=LiHagjTf*w+qmfa?4|@=X5M>eW+#Ej=;g7YpSd zKVVuDdUtHUcW}5jNkSF6A4-xv=e(MfWUgAkC=|j{b7+A)t*!JhfLqmacAEWWJ@%+1 zvsyBN&SFc9h?e|*!80p`gbZcZPm_G+ZuDew$j7@4(isysqD!Rb;p?yLVBK~}^fEbD z?jyj&caN>fv=yjsB7nRqe%1!YpUGrGHR(~V-THum!73Qz{L~o!gwpH?4C#=JeAS1R zxNCd<^2J1jch%D2KjnCsS=5f4bp;2Dr;eVc5bL>pWLWcKPTMvf7A52rb^1P9sa1NQ z6>40}9vKjXGb&5&zWC7|(1!JS#eoM7JkC$`gxwq{8`jk&V=*R6=hT~3=kgAV=y45{ z>$)UF$8fEl1jwcU89DaEGi7<+$nnn0+WEIfoJ$V3K1MwADeHJ>R(HH}XgQPCV)YT? z)c4ZX%;ImixrcZ<4F^{rwV=3KOTBjCR#pyFp-D$Nx872+X_C5$3mwN)Q5f92Qjpa_ z8M*N)>MCuz?eXHYCG+gaD9$AU<}5lM1a~Y}!ZSK6{XHi@4255qJ+C)kSftJpge3{m zM?UtooHV`hkc*c*SxV1cV23bOp*&AGuZm#l@=%LauD$^BB6Pn;6BqQCtZ12rAoAmy)9&DFWpgvrpAr0n8@4Vt(4U z)9P{Y$QvpCfqg@Aybs~wrPfJS10Mn^Z^9-0V6PP`D_tVjMbq{;7*&H)JeR)bDvtPk zEVSRlcUYD&!CSy|MGc5rG(i+a%4A6S)bp^P^3*w1yu_Uu(6%?CC;#!Z-{}38z`a$?H1Y#fp(ebB!H3>Low z$v)iB|A* zPSd_m)eKWigUwcn`{i#WW@$dj`pDOOiw+_(GFDR#`|d`v4kllO4a*$aS)aU^&5ojV zM$@DUQ$+hVkd+n4{g$oW?&E%IzS7l{xN6uIKI7pF{|J(XZHI7szsPySdNgvx51KpY zErl@6U;8<0ZK3?%#KYe1X%ZT~Ov_}uPO4(pLzm6oN8_)Mpl-5@6DEvfYxveP)Ah#1 ztW@2GRu9nVIUzkl0i0USuXpp?31o3GMa~KZ@H&4-O6W4_xZ3jq?a2(YjKwSa6a`zb|QD!8d2s+O)lzlVwsgs z!#|?b?qzz~G}P1>_csq;_At)y1u8~%vqQ^lkE$1ykc%?{I*$*jxmay*AOYM7@WgiQ z3?WB^w+$oJPd`t*pr!8$AnI~5U%$FES8Eo3Kc@*9X#Dox%n^N498+1Ya-ztYoa4MSG_n{{CS>EpPcso><7cZr8I@# zc7!HbRAO6_tL7ZAtpAb#CL!KL2eyxQJ1sU_Bkk2V^Q8=X0MIi)O8mX6(jq^rR868sS6_o*tZ?as+01%kUCs` zB7gNvgc1XoeyTrvCIZ>?7fHdO!2dU%u%xW9>|k#J;^CCjyUB(E8f_1*Sid(oWo?%{ z4noCrQsT_=#_S~r0YEEJ=&(KTPKIwrpZozLZ1*ETZdjM)EeOAL0gzuLzsTr=Rr`*h zSU6g$5H3YOzlXvXAA?m*`jK2zGHDB|ME>P4i93RaYx3&{02QY5t(GG9-#z6+_itVo zC=jDUcl6E|pv&h^?9jijZL*IRHvOL`C;#hTIDi!W|Ff?`&yark?x}(1=`$@X=EdvV zBcbD4V3r7tG;h}dvEB9q062h=e?)uo2)}=VcBMql^~{9HZWFZ)$X^z!K8JR1KraXX z040sUdPV)&E^{3kDylZ95s(0jfy|aBq*be^4J{D51W;oaU}3C(ep>%JlK)?QqW?e5 zj{okxARiiY|2_1vAM|b>!U3huxfbZVy%j#@GB8_0p8${k6X{jb3C0eAc0Gyy_UB8) z2AQycGC@+nlUmaZw5#s_vt2b2(5_lS{z~u8_RmDTSNv0Q@1M;`{58H+vNJsX^D(&z zfH*z_nt!aS0ax<}=De{k)iV-nUtRsdnFz|3#4gQ$OYKig_FD(}8g zR0gy!j!Uek@K5ApYBDmeQ5MVnQm{4};rW+>em|Tz@Ft50YAUpKJ1W{K51kBJabfx` zep2&#r;}Fhq*2#9_gdss_VdtCJsvBMS36It%a*?|O~?Bt%h-$mwra56XBbYfJ-n@0 z0Y*W}akEFcC$W4{nPTEX0f9j#fQ=o!0t->4t`%;nWWuhkEFUdOs-I;~R!SI`!)ia3 zca|A)Fn7dmyPPF){fT8#{U*%5J6k4K-r3PGT2C8IQzwdYv94e{Q(yYi zbNNHB(Z}?Ap@T*T*Q0YTGr}&GW8oK^t}-4b&-$poR8rVgFi#O3h^aIJB1hoPHw^^@ z864u~Wb1NK+%?CnQCuV#RKpiVEZ7d;xr^tZk#;Ug*2AWSckG4CDV!v062oLgl8?v* zxpF^++5!Ct6gWpvp_W)o4QD9HCK^7{22}`x;sPds)5Qfk$_>)aYNo1YBcZ)=a9_$_ z2SA;j6}5?;3DF0Nt=6wXTI7#u)F|BI;ZlU9(VfnD)24cBXS8b*+3SPk6ZyS$!n@UU zn5P7~5HStLa=!iaS>xZE?r?oU)A1T-xNuo|j_v(RvB-X=s>nGBT4X+3WxAFlzkCiE z(Nn?d%$bkA>#C*`97G((XVx~R2??L$M*9qc41?AAVEE~cU=kvGORm=2UvR8661ZRw zyk<6ROf{zV>n9Wr_5Ii#mx95)ou6mhME=c^O@^bhs*rt}a(B~rPeX42`%488Ar>kq z3l@e{Bm+J4b@!NM{G8Y~i&u2jUp0;)ehYRKbLgEvKMe!nBPwE-96zmu_IM;DidK4L9fUtM87H`BiHrY@QVIW`tg?!X^r z0dL2ZQ>3@Ae`OHSJUdM0SudljV%>Sxri})B`!N(7bnns$vQcws%u^hG zrb#s$JIpOuwOn(AJW_J_Vj3@%$b}7-X0!`X5*WNW-z3E z=VpXy?ONCMGP88YNG^(h8ml?4o$EJUZZa8AI$UbPo;Ez6F!H5^i)}c~p6dS!u@&R2 zY=4!`E@hS9JWSfz9haS|DrrLRN;8m~vxbr*b}FWIui{q4*E!~NSwFb=>JnvPrClkcqir4hh+C0*qeiqVFZbCu6wxYTN z3|(uUu5PC->tk7cUCq7DvT00Rd$etHA9Z7DJgEO}Ip)16&&C)wqPT4|GU~gJMjH_YDz%)SZ32B8%&3buWEfdXrp1qi zajSl~EUPy)26s|L5t}00*x%RMtjc?;?*Fx6q+>idytwB+v|iK5408GQ+EV+kXJ}!y z){Fzyr}!0_t`eQ?@lxY5adBFh2~l8U&oLHT->#Rzr&-k$F_dBqKV}L{g%`@^B!5r- zGQ|<8vrg%m(BK#nZm7K>zC*jc=A zpPMJpM=^_f7Z(}SYv>WJT>JMwfMot<=czQIw!9bq=mdR49)YipE$B6S%(TMDIsIxT z!AEUSo`Bc2;(p0JOmy98IccT+5++J2eW)(}(KyQpT=8jE!r-Czl@I-{w`4=z3zy+C zh-{h~CyF4X)gI_@!oALOoHU++j*fwV3p2b=W>QlWA3yB+n3DI2sya17`{#OGBn#-$G}^+*u|?)Ed5x;s`G94I|EOhx!_jOy5;-9Ra+|4;XlVw3Y=7 zjDyn@wa}k_x$~@5_L91$&jX`eU6^rm)-$Ec@B5>?uO8(OG7Q z&1ojk??zKd#!=i56wQ>R{L)W&gx6D5-emcr}MPu|QbNA_I2syuW~-U)Gun`*mq zJ9@3DW#vaG7G@2TT4WypvhPB&5r1$|JJlslSnn9bY16j950-)>KLIOtX3w_UMT=p~ zf>~qv!pV$mydQgpYc0tdajMjwYTnFu+GR0$#znJ9nb@*QY*m_MyQs?gkmz6Pqkzj> z@C=tbfcq3YmPN8{&N*>^o!iS0N=Uzrc{|Cmf}mXe#UN8@AmwXk(!(kS(-8?PbnL$4 zFQbWm_!L;PHnUww9QGGzL=<6M_sVW^y3}0JZUvI9u(I=IUToo(Mo-PK&&ckT>ZhE| zUmJbWuT4~Aii%@M7%dO=quA!5@dY~N%odbcOifK!EVflJj?>~iXNa{1!O+XG`5@Y- zyH`uX{!8infBJhNuxTTY1nz`fPgZL5P0gpbLqu*0|yihMg z2H@X>Tit%}umae0|4R73?6M-`ss_3>=M-Ph=vR9#${CnhAPenHfb5UtSC40>RFA&A zn#`CuFy)N5kEp09QTurR9pkCH+SHs&`cy8wc#)$f-fg=t&zND8cU1(AN1rcJ>q1c& z`4_zfMqH}EQLjV!%>W!+3LdwuO{~lJBsO|$43+2SM)_nhAQ9e$w^VWhA_tbzVya@O zeyF@KGQxz{WRzjcs!xMf3^@&Eia7Mf(t$;v8bCZla!}rx?{GZbf>jELg3TqVOor7J zpBF9FMT@K8E=>hupy`T1E64bYdhZ~%C7GHw?Ht)XI*d1ls3~@YSWwLA3i@n6JOm#K z5(l9nhUcw!CS8fE+QhQr*rWrm-l{~*I~+)W!I_Wda38iG6@c(02*~iE4mWd8BtO;V zo?DL8{{d1F+W!XKd7Ed6e~syB9Do>!ZdtFU=!@naxyLX(0H#yCR=wPTh-EWLJ4oi8 z#Or?_3Xg)$;g#ksi{)5UE-f&I;v(yQmel-0=682NDu=`o-b)Rp*k@r_oJ`&qcj@Wg2bUZuRi6gPhaq|qe1tv*No@)9I3Uc zOSF3kgKS-MbIdykiyH?)60wcPkoA!3ZY|xn zZS$(*HrB7#aOQPIM`ehpY}5$B;K)u78an^iAzEl?ZY7=qh3$@Rb`+K6ww1TjGzOj} z)bttj<$SY}-S1Zjhr^1qYijPvVhePZ3Vn-;3p2d0O-yKyIkdgBR5;@8U`NkB+=uRYq9y7R+-U{9#o48$WlQyGPJ=9H zWyeT6USH4Km{2YV5!idZ3rRTwBmLcUw6=D(74Z+jtsy;n5ABxZkyvyL#Y9Q^7GJ_A z{ou(WG)$Ck!#3qYOUFfy<+&r~526wcwv1i)!e0u@nBQbd&|~UsZN+|rnlx}-rG0m+ znPRZkU2yX`VDxNnd0e--P5z0L4YJ_F3r$q1hkGfZd^o5uTAjdAC?1Dro*gvc*hJ!ye}<5s{uVfq@W zs7D)tp!}`IM{VhM}!o)=;exxMbq^phnI{}ed^&? zodrVGw$|6lFJMS4>lRa@vQpCA_2HgNoXTaKX(C@b7FrY+%Run6H#?tFZEB*V-NcYx zda_+9KnHhQ+7NlYukCYYUu~S@(->|cOR`iV1d+IG4SC3YX$H<1x%Lhy&syM(Dt?Y- zOfX;E2h9oJd9~Jkp(8Y9Y5Hg#mJo5#&0S;#h0~m05YAPcpdN>q5#Z0g4=0~pi6HG0 z$C7N-reffuU5DG$0Xa?li-1|FVY29;8qJC?-?P4?a?=LM3OkH#od4q6v|8nl31;g< zlk->A-N{v?1#%yU-=B_!YD-m3Rb5y940nR`7_@_3^gXb}qqFAB8{9Q#x@$N#$~RLR z%LRHf&KPIk%lFK<45nkQG=%F!8qb7 zqs<<1G&(&UCywvmEc9kyxcTR>4N`@&pJRu!iu2Hr=E2VYot~el{%5Lwq6!AD_U=1y zN#wvKaWIKNp7MZu3=mh1gvtoxzJ@~cwCDK8#BjeHiP|Xih`(tJ1n2XUq_~@YWg1yt zn4^l4K{pS}kziH~b7%~w@xkPOSW3u}WnxB?Dd@%bEkkFRaVW{n8499wRUDjjFZ191GG2keQAg)-6^HF3Ku&h&(p@;{aS|41Y;}?OdI`bBht2b5UbZ5cqah@XUX?&WXPa zF6;*zX>$l;$)TFIwpGx7WAClQ;%L@=(ZL~T2oRhE2|BpD1PksmxCD2Hzz|4qC%6T7 z2=4A4+}$<7ot(}(`}@AN_FY@f^W1yRzW44w=9!x5>h78Ds_Lru{mF7!>mYe>mZQF* z!#VwzUL@Tmw;oL>#@q4bcBZnK(I3OC+OR1wA5LDyE%8upy0Us2hiLK(ps7$!EHCTG z){$=w(8^XJ4;vV&qS*+5h`%>?03fqWjLfqB1^Gh8G&_5Qk{343ulXy;Y5PI7n*sRu z^=s$q7o~=Be1AW_k4klc8|FU@AVWFT&027av~nRj zABJbL?{ zXkOQ1XCuU#{U9=YRRM2ChbZY&Q+;fCU}G=Zn7^>aRfjcVTr0FB`nk4kFf)KTdxx5@ zSWh3LgW*X1;DFEK%}Z=;T7B>q8j%~Frl~I_JxoU7$RRy`$?F(ytvPA-SdwlRR|Y6r zvaV1$(+!~RQr_J$$;3fo$;T~`NtFpfwlzz}-(;d6NX1Ng_wg*o{e;&z%^UB;s)hft zq*wuMLinWEcN@R#$hDuKKr%2Zgh;Kjxv@Ha2FAAPtzuO#FCtp50{<=n@g@O>XYU}1 z;0U}1^odJ z`s-a4xvG~yjl!@Y=#41vZ^Z*o8d&fw+4&&T{T=isnM(&cM$`6VAILOXYX6&CB=}S_ zM3ViFp+`Q|pvQl@w?(l_gYW#*W~n@e`TzO}{_Ru$SKDIZw;>KU6l56JHbdG?c5<)k znOBGyYyPGlWx*dMfc|=yfxQ`ud<$(czRVHFGCW^fNWoYz_&*mAchT-HJ5a z{~dG_4&^tDQ|2T}^fRF-q@G;K&+;W-22#oVfEaaKJ`f+ucIkUK3w?UZczTojzk6F= zv8@^YeLk5U%u_XJB&-3CbIhm-zQlo1Ds?+QKK z%iNaVjQ>&i-DmXvs`G!mI)X*IG!~2<^@_@XUN@P(W$d4q%!*Cv6d@qNgQR9Eyd~ko zXRL32{F}p3k@XFm)JqrezNjnz{BO+W;=sTrc*QxrATMGbdOj7sr;w`vAba&VW2j7- zrB?Z{M0Bt;GqjO9-?)6MOK*o1Le+1ea`Df|(2=zyu|9X`r4T6R}X$E>g zl7FzV?^MerN7I>*}oW{6tvnXwO z#-ib;bS`nwqowe@@Zt_5uCYbvh2~817q;a-Li&LBo3EhZ*5wM_-(hFu+sdGZB33N5 zR-cpC-mViNytHCt#@~feAUV{ox|9=yET*waCBZJ}-ku>+$DJ+Pb05az%&c7*6Y17Q zDyO5Y(3ECYN9-;0e|$q*V{=tVuBCIHL%x3%TSKke@|g*jUifjhA6}qO z#N%C3np79}5HTWry1e&6DbWizCm(d>&VvmZFRMd~ydcCF?j3a#(j2&G8PkG!OU3F& zm+h7%%SElVI32kCD9=;H*iZ+?FNDsTo*Q!=O}Lg$zhkybF* zbbU-z5k9v|`sF{k=SqD~mHO8}oJ>hs6_^T?Bmii#$1jSAxVu3=z-2WQq)Egx+Qu~L z;tk}=&*YYPCH(9p~)duun1Wg77a*u)-4S?qUJ`Am@h?5S%lDh zs!L#A?DgcYL_qTM%rH>+PPjGpnFAo;P?6Yd#mWcB7~^<;y4p}RsE4w0pkWRTu0?pB zLfn#B8Uw|{jXzUNo?vT)r`E$5o5DyFP+~L7^O}`%W_!aPH6T{x>FP)#)Mi_-Pf#aD z_wiQoLft`*k}bTes*^t$-}p`3EqIiUzKNiXOBQrE2RRB6_V{mP)i zi!ITjeRkE-FN2J)$wu0Vy??A=+BQ#X(?a#$F1H;HJ&c&lu+RHUZd-CjUdcY@TOWK# zHT!XXb|K)6E}m<}YE z@!2~dWeV@+#tFIj#A9rcPIyO~A+ z1BG8LCs}`1|BR}(%%$>BTL+ItZ>&(O&x)nnsrlgfSk(*v@6+EMS?MF{f2N&>LNb;H zcn2KMA(CDkm6$yKh9+UQ+zUwb0R#LR8Wx!IM_)g^3X>$v>v3GSXYuWey%exuFX3y7 z1y~#u&#W%;0Yh7m(%*-+e@hcWu1U}hKJWuBGB(hsE;k_hE%m_423WzghR~FZ{JR15 z-{VK|G9cl%sZJN4?S$Kwuq(Jc-v@uEh=gmrx!pXIg`Ph~8tTC`Z(Rc$h&_zyFc0BI znwE!#nmO2vw`Ns}_a=fj>rn9n1ez$$T2&WBbkGb8K1RwuoBWo}v*{XKM`OSiricJg zbA8!LYla}Dw&(9e$d|Mcz%9ZW2qL%g9=+RR@>wMob*GlerY)C^jXe(d(Qv-_aEDJ>zDR?2m#1>+gNWuv{r| z;UecjOzltP+|;wgs#ED}H6nj-bpGJlsIts2ih;YMg+s0x2;ZX)e*$F-HiPIaX<+%h z+)KgPb+uuV073h?Ck+Ycs_-}0?B9AtKyR*NAG;ok-u+Q3faSaI2Uul0R|X>_)pGQo z2#jz{HU(~qJbmgD>ij0W=!=O0LPsO`q5_9yecx5GF~Nt0?MC;=ltbja)<@pW%yW%! zlvMOKz&YW*LQChJVV_wjy+h5J6da*S3;WiAu$fJeYo8qzrt$tIacb%X$YkPMhQeXR zxQ?EP6(tJakyS8%K>*6qqKt7wD(&IEibndvjl6kQ@Xq&z4SW}lG;qF*;szVWOlKYi z8Mn&ES#$p6$?8S%-7f}ivrcH251zpRIwIgLs7(}pFT#o=PkKATDjH-EWVSj&Yg-` zvlvgDeiPaMOjud;lzOD*8^+R|DP{8N-Q>eB5Nz3K|EcCL(9akE0%62hd<7}5lE!hA zuusV`vnlemy`QHjL!wBp@8-oF6f?dGCpwM~nnhs$!67s*^Nl4V$?xGS^R4t^({_K6 zSf@tSKIhDJqqAe;QHc>P1%>bFaIeU~QJBXG3h_l=R%7dGLD}fRf(Nxa>%xe&1Tz(l zQxxXUiv3h?kppIny6fou1)Gth^<+NxWDR6iDW%x3>x~AmSy#d=*z;AbYqhs1fn4(& z;*n?Vg}#-rfoL!bYnTZU4r(=+=*!Z10*&T%FBhvP?cUqI|EM=A+v-%~S0*Bi=CLl! zjibfk^$Vm<=y~{P=@wldPvtU7AVP4Ruj+cBJVR+1pbCoo01(RT!;i{-GyZ;)9}y&l z9=ryg)&XJEKT4_~op(PW&CwlHT?PFiD2TmWA(hJuU@$%i7WPCOr&chp+lvK;K9zEwjt~Jn7R)aRJW` zW0YpGLdcwjmOB&p?aPl-;N%>o7rvUzR1$)UZuXe4<$DY0(;170~B743;@1~xpPfB*JU_Q5uKdqT^y~5g&h!e3uO${%~iDG6O`w)RapN&z-o6+Jb$w{Y{ zEq9OWf%`ze>28-}C7`{baEx+-><3@x+U=!5V4~X$7@Z)gw3lW)KbWlr8yaTkpcfpd zBpQ09CT2eSydt3}VojGyLqYj5j)1(*pP!E_u*5d21xuhi0X}$>cz_h7b4`LtyvgCE zH*PW=GhxNoWehdu%CO>z99CS^de&%SD_SA~@?XLdWosi)W~{am^%m;6<_tTC8ba8PtB$7hlZF>TGfgcjiZ2`EJmLn=)Fk{Kxdi!{>v|nY7bqe>!gaS}g?!qM1M|2=M!tdTxv)+7S3qEuqKhUP zkQQ6~(irfb4b~k5f+<#CL1^O5xC$sO5qELCD>`5eVi=}zT}Xj~MWTc7`6{I^uFFho z+W^B0ue4;V-zsfF`!6h8d1?sX&T3=a#|NA&z_HIbfty3AI^Xv4NU6rcq#)pjeO#z3 zaY+FyD8yg&Y$Y#nx}4)7J?^aJau55DC%n3P)8N4m^nYxCZOat62k;h>bS4q%Zq(T1Co}N!$cjRSr6yru80xLA+e9*(nibRT$I{UmiN7zj zXKb58*~~!xX`f3}5!Wx?{Gp}4!SI|JbxeEr*oUAe|DZ8#B+K2?q}3}JZq=OJDvr&h zlD|{!oMMRVO97RS?(%`i8oJC8uQN5I4trsVztp)l79~r<#g1-8%wC(a^O&wzTrd&F zf-wQbrD6$)8N(o4Klq;r9mYZ_bZlHTR?jejAY_@`L%2gVjFU8gRVyL;LAGU8qL&d| zrtpuSzaju0+x64C0T!y1rbkc})<6BzVz8y!QMB(`ybAFCW5``ai0rit|u)RCzli1IjN*^FyuEOL=8g`Np* zN?wihU6VgV-h4+~{-@PJ|NpMdfm6&Q)ICoYMK)2qIbery>@y*`T1zES6?HEg81Eb^IOqJ~S{ z%hyy_x?u7&zsxq z>XN2Br0}A)KYY1Ue1|LRgo1ibgBH3j;CS5|-%3YjAX99`O-|^g)6{-OFW1Jj?Z;dh z9$EKlm)>9HLG)*D-9{)!)x>U)wzL&Ln;6x@)mN!C_^8A$Noo>5jg4?l21XGWKV~Py zXC&OFfqUz6wJqcCOjq*F5FY!7@nUqyhiG==L>-qgMHaI3vG)|f7Z#-!$8S<|%N2EB zbAB~@Ba#ti@41<4Vv+o&BKs!b_IRVB;oH=(vV#3J6G=}K13l@K5)qPq6!XvB^q}(6t zF?F(Fq3y*dq(^$kZx6uJh;j9&(7rIf+IM&86aO~w;PSuI5Yj~o1l0dW_3!qCazWPP z;^Iy$ek6ODbCm_~YbM`FJTCL%mZMTCo2ar1M!X#0=my|T6R~0W8rpk3Uti+FSsC#a zfOoLEz+JeX-$!qrF{PceUG9*vr z3G`2iw+R=aIBMS48Rwmt0HyFIglh#lhWt0$;Rek%bP~h#k-P_2|L^t+|En&K{zX?3 zRI1|NIY)%XBlC{_1cQ>=_1_)%AAeHZFOV$HfB%j@Z_$7Hda$a2QH##rMG4V`{`U<6 zzySa01}hsUBYMyrlY=>!^^Z;Q?=IsXEm!r;#M}yazAk8~$iv9U-(6?d_N0Ey()NDr zb{z=_Rtr6d6a5g{{q#2y^C^yF+kPPHQ#2ibu9v2C$l}jo4=aLkM1-Mk17UV%{J*Ie zsIt@y*i!{i>1~@*K0(BBlD|zhaQrrC7ROE7pf4=>z*Mxn(3T+3k~-0QgJeaAje&_2 zt%l#g9?cpPrjsEi5pqhg3B{q?0_N&#{DA#;{`iB%MrgR3e8{GT$Lr)X{4Fs% zxy^MJF&t+mQE4H2(!&PcCztA7y@-S8qL{cI7T){ge_BxM;U@(llJS z3w@Mmv%!EigvSNmQ|m9#8E+#!_G-_9`1W>9X=;MXh!a-aTUWNq-h5a78I+(1wE)0E zj{H}lm=>lEp4#D7@)XT)>4K0RQJ-*6 z(Nbw{#D!IMhr?*b33=TDL=!VmWi3CCFG;t`ycsQC9$t;QY+w;TTXy|sLq^Xg_xbJk z$?D5QjrXV3X$=F!z9NXe=UhOF1;}$()U;vGTVTnyI!e2So^|r@1#JQxC6I+av|n)Z zse$W^qjy%)tWdCcy^t}t&dbd_5!XOih)L-H-RaAJydEmk1ClM?WA|eZBQCf@tF%_3 zaU?R|9_7r`xa6f>O(mtt7dgy+pgV91wLF5J45k8hRDOXNVxOMKeil$@U<|KIcpB{9 z1V7cRt?kVQkTWV-SlyDunIg&M40^^Fu@5!j)`yD&DdQJQFWW!Y#_NPR^GS_Laue@V zlzz~663jP-zjJAcYuO?gI1LyH{m7A5p0?y6Bn?|I7_b{z5L6ADjQS?b!eUf83aYi2hsq z#DR^&nV&zd7A=@VWwMbcqx4=d>}a5nC2|@uyU}u+wT}_t=L*tKsfCB`{rm;8_Aa$i zhw+qa7?#j|vP)>PZHI2ByP+8qPjCH<2q(#%E?OM6v2A^9(j7JqJ6S?Ahdjqx^808n z+$SRDE-7KdbtDJB&422!OEl2@3&f6wbY6FxQv1-beC@vfH~TQ}#jveoeg|moelhC) zEMY*l6Vzu#+9LP4B+j<$NeC?@d@y?(HDc4(``HY%dO=Jmfl|-f@=2$-CYFMmqJlIo z?8D1U?-*3~Y9>im2v=ZL=N*n`6-~;a&udwLyS99e)JK}(RVQzG6p?_fJH&t1XNC8gROhoB zmSeZgF3)TCT|Xr4I`F3#OOouF^Vz-A=aBc3VpV+7q&a41d9_J)R3X{}JFFClOO!M{ zRcZ4&#JkDxVV@&5#35dxp^0h+$?gEryJL3umWz1nSg%jOV?@Dr%*D-^pH*R(wIo4o z*ba=-ckTMP6eF^qe(7@I#Y3*St!09m`m#Pc(SKS7Z$RbaS-L>sK<+}Hvn|DW^n6`Z z9X32Q{(VaA1zZhCJoh%#p+J)1Y;1c8RQj3#)Eh_)0u2ZtNMy!pOksO9e2BFn+D?VR z0>5zxGyXVRPGTj&O%Wok$I&IbxU^f?PS*b{#0%9bgKspfE(1SAmW4o38qU8@Wx|(c zUIv`wIH+!HWWrGHKnun(WYs(w!qOzg344FM11)2O6w z!f&R#A45(p;=ecB^6#22dJ@=D##(fcbt@QIN?T_p<-W%#r7LOzfcRKB(fxopa4yIs zcPg;+E~SrhbKnKCo^q!!h|(k@g<>_GXQ%MpEZKaWzH#~;ksIehjQj)=HUY@7>B-t4 z(zgDGE`CKF9=Zv|W7lg5-M%Q#t;>Od-BMmFO*3CHI@>VZS0)jvenN^gfCv*JVrHSv z(t#47&$Y#%!^f>e@k-z ze!)FMKf4LJ{-9CG;P_QTCZ+U<^ z2kq1$FV}Cc>pjYpUPVZA7WqG`80ctUONZGh7Ae!wUWB)@U}Q9{ujfN?ohyFB@benD>ixz`|N*PvykN(vUnc`yvixQAy&_p&4CwK3*9t|fR4a;r49>(yv z7y*Ifv%$w(r=fOqG_HOpH;!6r6?MeMZv0mdWi^rrC7dG^Z*$l`y=3SK#e(%8xPZ;E z1mz2fseE7uf@*qIfLKKEFHnps+XV+#m(VT3q0kk6#x0cvS%3uKOg0b1!+$HiIjr!V z>gBFCTpwCte+>;Gr4V^4 zmZ7{LdmjsEPRwepG2vPIyh%`!Q|42>XYDrTJgwaIdDvxu*3(zELV_~orjph5%n->q zJ2&WxR2Q4h_~_`vr#@H}X&w-6ihb>J$u(CdUmhbleMu!NP0uQ7ys)TtM*zbo&(kjO zeD=a+8hkM`ZLR*aBgBa+X78t^0)L`9D%DQ?%9Ug1qT!$g{TY2)LT{sL9ig=+$98&A zLUQ07Rm{XOF{CbzGJ|vJ{JzW%)8*eSJrxm0G+KbntqZUa9f$7q6yxe$ zKMBk}H351U*?2`{*l(bytRIw$r8DPs4ivj~0pjzrd^FU(tP|#{jK24D#BE(yx<;L?ixtAjjb;hVE3F*a7{OCmQaL-h9!cHdot%}xuU3Sqyo`a~MY;@; z2;t2M*bD}EbRn9)C~(}QHA7>kj57;-`3YTj8=-tI&8hfC2w;dSbw}*UL+Kf`1fS>K z0f#p$iPhWIiIe2Fepf3p9)zrL2rhI|l+RPi#I)*Gu)a+RRX6XKY1~W7=rZbtWm}64 zcQFlh`CK;e5M$7%0Fv==*>XZIWJ+O|B_rMZ|NjfiGg$Zf~t zt0B=2%kdaNNkJ>soc7+;IXI%OFv~*8((R?7EKGKt(dKY0T5-KKWf3g25d(vR;wLy& z`|Lov-~dK_+xDriRfux<^_g2ntj8@&?~z#)0_*DfRh&(Zj>Uk3yJ7wKq@*ij$|w3A z!@wZ`E#tX#vF4y41J#3;wu-7BZr>i>_`IpDD2MD_)t-5Vyr||rYK5q(s%4Xf&le#W}tRjoJhyMb-5O_y0vBQ_5 zHK7K6zmFezE%K#6U3W3=i=S?!4`=DCn1xZA_l@xK|Ud`FojK06Ou1folHi?*e`fGnjGuJ8y8F1rpbCANJ{McUMoHydE!$v9R5m%5n)E zYL=>FhyW>EidpES?xx@Jt3MQ&d>*GXPx|7!hX@z|`>|ajR)MQ2{m%G;8S@$)UdOH2 zH>F)2shs(KMd)uQIllx2c-WS5q;U7Z8phn5Sj5-W}JjG2*M`x3B zM;48G>D^DjoAUw4Zf9OGiz0AK7!Ac4bH>MYY(zlzX#ZNya{q-S_25g3LEBzLmc~r| zXBPH)k6D8=sJgvEEaV?mnME~Wd|Bcb6m*VZeP1_vzgqzF*JkZpX@n7p2XhX@Bg#HB zeJfIU6=q;Yc}|jhl_}6uUFz8>Aif(+&XNbdI-wbKh_TP-3x-c;<}RhZ2#i&=+H;|A zGILfn-+YcsmlGvuLg^xau947%H&L=@Th{H!5K3&AfaMX$sIon(AmruBD%}3{8SBb{ z)q0EG&Y1GK`l1&^PY#w%DioiZNVM>_63!rkm$YVFmO5tmF@e{C51OfO>`ffE0U$lQY$%X_YZ4)yoqJ-$h0 zF<5F4^D&X|c^)|8wP_hh(g}Ohyy;9iMaZZ+xgnYikFf8?Tk|KC7<U=W=)&JFh}>DC9HY2Ihsb!BNy^SHX1 zRX*FOp9?&8Ku(&M_>Pm-UbYRFKhxNBkAF#|Uo|>fxI>vF3Ny%UIJ+$V(v?L|#)`6J zZDC~h%>)mhmd8~Wq5kX^2^s{DhyEav)0H>eW)$7GfKMa%{$@E^mePD9 zK$${O8oNOpF1>+xD(aBbd%Z5AcQ5fOG;r9V;>_Y3=1G+h-$@(UO#oP;)9Uf{@i3QzRF7Hkw3uf z+t(-D!}{aP1^Vf9hu~BX-O@exsWVwB9;f2fsjgGO&t9eIth%gEs6?f_7rMRIczNqY z*LI{6ncpv>QcsRGliRw2F4Jh$pUxJ}m3e)qsFLqG%xdFB$l|^&#*;N6+h_Z%2~!0R z2(;jC0g>k=uLS7q*uyC2Z2L9mLSC!``b?}Lt{*}idm8wd&;T`qiQKVO9l}STpBg2? zg9D_;1K2D`p9_*ry5z{%Ey<(Rnx4Ag1U(r%uJI8K5kv~ei($m=;V3d4p75YFzx3wJ zbcSetc7A-ff!ZQEZyj;_CR~w>QGxB+d_~#xT>}{>zRB~9^+>dXs^#XpwAJYRg~Php zZ}S`}lw~^>qAXup(M$x_U`MalmAk+qV$;_Dg_5Zgu&$ezIFbh8nJSv%E4` zNG_Gd5$?$U&6CqJ_7>CU5gi9{>t!~fOFJ%PKs5 z-ZTjO!$)7d`bRzP&3or!Vz1d@gC3aO*yJPns9AY%&5Nh*w*K!3#pP(dwN*q~I~IN{ z;qS!#=GMH&w1;bgUa)JZXYss>HN+^a56}F_Cr!|W5qP$*>rX1@#7ca~oB#NM`YAZV zmqvSapDVfaB*l7MU^`%}T6`Nz#q&f@s-yp6 z^%U*y%d1r}+#ybcBD@5fCd$Z0aXR~U*zWYi+=(ash>RUR(oaQ-Qf2`W!Hp=Zxo1-Y8=C~9P(wTy;zX?=sn%4F(Y|$*qs%$yiiL}BOeOHOk z3%{{lMRWSzuKzhK7fH= z!?J=LeTR%c+{e{bgiSKcD|Mf9c#NbCzTyc8!|}r?-?(s; z-^iD3P5<~2-8yccHCz(UZLNDVCF)*VbJUL-`tY_>W5~_ZJu0j(4_JccXhxQGWO1m z6lt`vD39V?5O z31&s}mpi?B{y99u+M_d-W&nT4;ZQi5;($;Yk~93$_+%dryUE?Ci$IYtHq5OMy*Hf+ zZ!Rkse_bKQ^+nj4Am=XeCQnIEPsIyy^yN-z_=*^tG_BnC=!4O5NYt_IecJKkbIaNb z%ekG8VRRA*)t^ng6B+f1fN7!G>cnRtSUj_4zA%)(5{&*eK#Az+y&C=~%;BmZuM%3L zchB(5PY+fZ4E`SAdF;rNp0suPQ@I=pL8B>J#lC{Cj(yyqnIwM*3(mP%(Pxf|hTGf`Dd59gIVfKe+Kgsg?S06reWuy3f)7{b z$hJ^mvEVWs%buW6i*H9APxB$GMEX5U=!^a?Y-S{-5!FfO`+}oVhGZm&RpNy7HJXR1 z@KO%6=JV#`fi7HOi_H~ZlO`~I4&R6qqwsL=7gADw{G)f31rl|AotLCz1x#>xry(*x#Tep9+(c?UeAel zaH14?N?}JL0H7DmL|*!V4P?RF4hOP4U&Fjs&dkUxY$b&D zGXZeXZ$Je3PcZf9->@3Z=NoC^$AHzujJk$~kF3fz_^SsBRc8CG2xyIE>*HsE8^J(v zyTG!amui|P5!ULY+{uhzYRyJZ_ZJQY_xV{$e}UFsXyiR`Pue=)m#US4cY{qd)nva( z;~kgMYi z##uLUO#Q>b_7wHHOW;ql4e{${T9&U5EsJSaO&HWCRSzK_gL6GHqm@rFOx}lMpnR}d zuxA?>MY38?qk9_MRGZ>(KYrCXRfeZtSM_CpSj1SfZ?yk&;_(2Vq~Rj9XNcQVi#21$ zED-U+@%_D`rE9rsnv;!QEFI!KK1=dNPv;R#JqILGG0cR2MvY%eGn%^ZkZL|B$*1Z2 zVJwt+IHG+@{m=w${{_mm{SzZVvm~wAS?1pbP-}OY9-YZ18t(S^g@8B{fG(I7d88qz zl8vWKXN`eXjdG_X_K)tr#<`=J<6^aY9i=Z~W5Fi5BTgAMF+l$~;SWM0TPZn~*f^Im z->x@ntX&vkii-97YFr=fyA~V!@$B-4_N*k~W&WclK()*4QMBqKC7x%Ei0x^bIT#8qr2_0nD(~>qMX~4pP(~ZdizKE2^ zsL54B<+~pdyhb{-Q?~#!n9w%Xw2)341$$ywA>F+08)u#Z2RYX5N49E@a7Gj~&I^vu z>pyU02qOD>g3(5GD!U9*PT%5>ZY@-K1E2(_mab{Rkj_@ehqxP zMtgftV#4!qSUE|})3$(eTfq9D5Z}fHRB2JCe(k_pEbQ7GYDYHgwsx%6uG))YG=I3^ zZ7cA`+XqEmPTmgP!j5C8KrKvQxKmpGx!-5yk+d*GR#jgSo?ILK%ko>C!k)Z|r*h*t zpPrZ30GgvcSg1F$Lj3U-0GE?1oR+C{^40}0T|l%bn!Z1XkS*v^xB6>h<3!R)ps5eW za3j<&;#b>GF!hT<(>uCm_N$b?#DV0y4Xv$gYn#@e@9ZmV;y3@bGc!wjy! zbJB&D@86-uaJICSLi>-qlZ`Dh7U+G@Bja|x3-s#Zwm12%PkNV}Qa4J#sTi5@(n(VN zOr!swdIH!FK?NMjHq?zk4o657mYydWSIm0GjAWY-l){QRw|SFoM0!*i@$}+)c3G ziZp7Q%X$JJ_BYR|Z^o}^+S-Jk;H94c6HK1%B_4{o@;|>~|GVR8W<_|oVMtxkKmHrX z&Q90uiV+9_0_lIAQ1Y+yOo!0?S3h^jOcZ&%#~U@J7`Y)|q{mCOV=}q6k9ifX_p(y< z6JnmDUpKiaIka1)OeV{e5A@&Q1%HacgENXA7+5p#oaL}`y`G7+aJ_C@z^jt4{kgm@ zXkLr>#T2CC`^*nX9dz+OuTOZv&ct>jM6(9LD?o(2yRJm1kN^$wXp?v+UlXin_L(|5 zHw<=uS$mWMu1`1R<4IKRqW;F%e+P$zl59cq6 zSclLQVXjb?Q`dUM_Tc|GI>wtXdsf}(r90r0h!Blpd=5A1ghRnSrswxR+Y2vu-o$Q& zRlf^D%rsl0bBj@EM1u{Gk{QLy4U0v9qkIH(Wp0XgY{et8*L6LAjD2fO*4#>qUlC6- zFvOb%{Q|io9QLW`%0`K~m~Aa}$G#opq6{HW@CgXyq4El(bpGxu`F9)=dKa0MD~;F=gm5vZaZ{J&UKh;cJLH@Na1|hC;+!jVgt%RZq5lx|7C< z>DSyNeKM}CR@@;djpM52%HZLlMk+k8_nfgU&enMcjz7%`@D@`&cU`P7{rtJ9C`yWe zN3na&NhV$Q7pN32hI4LzD`b>_Ji;n4e233iz0n?64*>U1HRG=?r;{SbSzKy<7dHh) z74x`K4G-X~4-um!&9+DV1p-}{O=Pf_);mhv<39b6W z^Ays?=G$t{_G)o|^J*0)bvZSlO_5xJxivcwI!trc$8`7wLIwvQBJMXrXU)o9^!gwR zk|mX26ol?ia19r+&TL%?4BnA0V_NQgKwlHDFux49M7TFw@k7+V6guX*hYlT1E)*3! zO0cNRU(J@K+@^!6A%_#TL}ho*vvw3-J&k#V`L*FTSu$qmy}1Rb>hWjGc~Y|jF`};Y znba&FubZZ2mStv82zLcxK-J<3VB58%Vv09y|3n1$kaO& zlTDCq^Xom7Z+Yp^(o!Q8MpP(!J#5Bm6ZwsPUe=NuON zcOI`ho(GM7hubp19(KyWh3W@BkevzC*$4=cK-UPL-%JX}D#Tpcoua8v=t^l5;Kpz- zT5Z2OK`ZT$wM7C&h=YHD!Y)YIC9jG%WJ?KqzjaWSQb>rkLPOa$f&;iXeok)Au#c+v(oyzA6+t1j_)VNwV7_G(hx zf&mqIH+JX~Be*kJ$7uV7edK*u>ODtAyYR7oDGuLv%SmYM_|Xdw8olRcIEEmh`x|}; z?iU;JJ2YD>%2Kj9{lqcEcA#<)hGQd;;rhvkJ~s^|-a|FCa%S8yZS=sVnHhcm1%H%s z8B1;t>t~NIYIF=MUH<20JG)W~UZzF(K$R)$tj1_C!%hr-ou9-mOgyt|E!VeEy7;7@ zPuF6#6;IvMM@J{%m%6q z_-00&79v0QmVdDQVX7KUsYKY@K&mM~Bq03|*yez;nrSDb`)~>vB?R7#KPLSK3qw!WpE$lN{r9&2zApdYZxfRcSs>DqE_4In{|NUA%O`w! zXfGC<$(Es;T@Mx+=wI?uO6k#XXQ<(QP;_zo#59F4+cswb;N-XIzBBC!A+)gVQ;M>z z5PCM@tdN0I(n!IIJp2+D)D+Z$C-d9@Ghu~n1b+WJ*Xx3utytGLa=FfB9(7lv`M*G@ zaQ#mcEoac$4{h|vOjTwJEOoXHVGa?A<@)8YPovXq>#v{2&TNHhnvafG+|hc_{q9y8;vT8>?=%10Two+NaS_nb|GT>u~#>4fuQBw`*eC z$M5+tP-5ZiDT!?u8h^gea{)`tjI-}dxbO`@8W>HZdwS|(Dj2)NUTgdUDKq!X+HQ9A z3G(hknQnw;AK>O)_gtSJxMEk6(=WQQWlJM#sosXvqYaI{GBJrr!qs@f_J%wDt_8KV zXtSz+C1!V3|1cn}*iN@gy=}@5NI%Y!dHpa?MgQc?GN+QhS50BJp%0A@8^?( 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 z zED1^LQG}4Si=7amG_}s}NQzqV7m3x9KGL0T2J-y_q3WRRK{oRbn8cn{CB=7p%a42o ziF2T7oBc~#r-sh0g#=F*aBp*`-KunQvaaeN6XOG1%7gY7*Uw#E4z`R& z&q}>_$kdU=j{M4ahfI}&u539c_kJOuBl<#w*mjX4%;3A~Bg%198B_z#v{zXrZ zp$ZHO#d+Q^r=J>t|64cph(@e;`A$AekZ~67?Cr$LYOliX-#tv1|AINIK8p+KJ#$@c zJxy2?DR}yFl)h|m5IIR1WLBVse0okX}36_m54VjQp8PA`Vl9-))tj z8CaC1)_7YIKemx|LAIEGoB5tgiCW_!#&O2Jq`|o@KWy1FIu`mHFgplkK9$J z7M7vLFhM64de~{7oR_jbE4%x)T!4ZCQC`_W$K;ATN@!mox*bs2@ZT)3chcmm(cfvU zlr>Bg6N?_c6_Psn`bdr{53b#Vao+=%^7I=K$*4On{YgT39HIs$6^0ZCyRN9u)5frK zS)aFwZKb5X)0!J|z&~o{+T^k*(VG!@P#AQVD_PB#i{^WB{IWmCb+G4ndtNy;$r+@& z?%OCIX3^fBXoVXcoc|!-&X@QJsY86(Jr{fJVvyPh5iXEJfh?0YlWvAyJ-q(QD>KT# z-w9&>qsU^vP7qVT975P2aj*rTR)3j9^1_-rVp>8A1DUhg{yTi$iE~|w*Q=aZ*TRbFo=jr$we*#+Rar2ofQF&xI%r7_MgynyrMZVPcwG3B}t8lh>uZsiWv0 zWN!4$-$m})sbyzDxAvfUSFKinFX*x_AQT6B(fn1XH4<3la!nfoQu|$r^@>;wA$1uD zs`!UaeE+5a>(4HSYA3(?LOdn`!V3^9{+UvBP`j2w5>;hIWodP^#%b8sh!kvx;9wi; z#EL3S;XdE$+EE0TIccobN{Y?H)t=1x{6}4C&y8N&-g)Q-3Rc7r$vR&&rN0uJ2|*Tk z@y#aR5A70sN1#1z*~r$BhTR>UXg3{>wa7`Edak^?*E~8lb}xZ$E@N0RMeezyA)yRa zFznTJE?F>@536-^la_ZJ-v{`ftzH|}g7WU2xHazD&^4+O<31@2rqC}vNegXB529lo zDGGDUEFD*dvNRZjy)qfmIj&Qh@p`*<`fTk5lX2LWv`snjYR2b!aqm5~amkhnSZ-u{ z_aYCqv48Gm)RWr_ut#=Zmv-EjWJk+8B;XZz^nKbQIT_JSog9?*Wbl|7qBunx%gA!~ z2(3d`j@}cdO6{%noy=&KT}$Gj&dTUVDY~U`?b9#)US|QOg+hZh16DRpL0(cz9E2LW1w{A;nB$V}JtR13n%X7nfCGnsg1 z-t}kS*3l;{H)9y?gjXN&cBTZHzH#NC`f7X_L-R6}r_w&%pLS+LrG4qj&~8P?G`6BB z%7r>%sw;e_Jo-uMqZK2O_cl*IPv2gMSJv_rEv~3I1P@oRetuOED#4dZ^UC?qEh5z~ z7}vyC1{`{^T5j#hWaxDI1H`TU?(}M$(|EG`uvT2}yWmw;m(ChfWXCp&oZR`xR0|rm zxW}d86+QCw7)L4hXL&yAvk67nz3--fABxq{uc8sF@9!U$BQF-3=M8s|1GmfDuq3NH zRDF6N@yIy9(xy#ziArteuR7QNy>3*;1&kaqy;>-}Jv%dXH>Jk-8o1BG`s!vElt- z;QEcB3+cy-@!Ii;G&ipt&F zO~A&{n9eMQ&>~wk>b@839#hUdoV5rdD?*Q3f!nRJL<9*bH~N4}cG_Iq0Sd)De8h&M z0_Q5k{YYhy{5lTBi3reBIGmtNvIU5i-^DQX8ZSJmg8px{0J!2Is!A*ca_yh z#%BZ36>vu~RF=5p@vWa#2LD0Vus?SX{SO=4t80vI^Rhmx9L{jm1QSR_JUNnOO$>}k zW@`t{PbJBnTFKm7Q4tESTyc7jH!>9ba3Ie7k2s(M7N&5HX{ zgmMcfsa%q66zOTg+|jj8E_+Mo__btXzhS4VM^o%TMc^sxNy!M?3A;RQOf>G6sEQ5= z+g)Kp5rU{vDG{o%F^eLgZI@f&DCBYrDXr*fl8WQSztmsJKN;ILI!52-fHm8w;uy!@ zCQAoefzVf7g?+NhGM)5K%XU*ZHBmX-rmKibT(HVK9NyDy1l@AEm$hd-&yt(9Aj0d; zrfd#JU}a2cJqdHj3;;{{%C9UKKDd7*i09MdBeYmc>GoZildHG@Jbh(@|G=L0!u7}87=dDgfALF`AOcv zxm*ju7D5K1}?@{e2@N!)@dd;<6wG{^{EOeFKc-JZrRm00QM}-uRqR)8pQyRx5ALeu=q(vUt zb(W6xAF5qL=ffcF$H<7uf}Om6DjWwKdA7G2OZV{l-h+y%+k1pII!ab zDInD54puUH()Ki;_0S9L#Yfhh`>5zf@jv+uE^qpyZuXZPU+wpdpBF_d3%)+5r1*Q~ zlo@s8pQx&S!P{-UseS z%9s}pBhNujpVi~0HpjFWhhx?KCR^D|#sDXv9r=d0{^MR>YVyr9Ts4V&e3nFFSjVdm z`U7+wZzN=gb_!2q(`z*u{TWS{Ne(ePpTS&9D&dg6R$D2`Y|wEa>$|wtS^7Zap&8xK zd`Zc$<@RcY>&%*s*qfOEw4GZN`n$!iMVtgYO^W1_H&GV{`}(v$Ia*w0uO`y#YH>1u zz{R|eW%I?Q;W!z;EpW9~EZ_WSYphzY(lXt3hpskIPB8IN-hEr8_dM2gfE^c4QZ*}v zyrR>(C-aJ)7|r40%@W<~CT|N{>CCr+XCEhh#P9>>dGFja53yPpg-y1<9JH}~a~O?- z;Rt&x^#E)fc^8DbWFPL1mdLX2dTN(xI;Os3Va@3%dqNql@%1_j!b+*){9L(#_)^DA_D%T3-Lhl}3jLF-5AG^PwL<0#b3A-TQ zy}Wa3nB|4#kyiiv95%rqYsm7DHDxoO8&5b;{y~02!JkoI!~?$!eb8NmQATFpgbnY{(mlFCYk_iq;afa3&(bS)S1ct zlo@1I-pqfL(_!h9ms}@mo0^XL4_>` zB``zqTR4~Y5?6)FQfLR6-PibFa%YuPX(il){|@@nd-Xya_U-NT+Ui6>tJJ3qJ=>_c z?_jdWt)M5>QnBIXELoHJFW0wyZ((cle*hci?=NeN?njV2hoJ9wDb*uI2dakms5 ziVH9??8f7Uenc&u2h^5!=#g$QwqP4NCXX;vd`(%bk+N~qntkgc)NAYG}^ z!_D2M_bO{~g3`H;-j+r{V5Qw>98#1`a8dk_I1(Z9NGD zbtg4z5%;Lu>8w{f4$O8iR?D&zeApG{@f9}^Q!tHe)*^!2YRRQ;^jq0*Cg8H0`q6u? zxfed7jO;21gWD|)j)1vMOB21&oe9HEHj31Hz6cHBVe6*- zu%ncwa}lX`zZ+=lmb@?4FM3S8c^LvT*U}vcPXDx<;;Iqa`1$?yR(I<8Q>gjc_Rx4S z#z$wb7U&!k@uu+>R$hykyR&FK;09{^QOjx9k@n8F`(Z>=eBX-0CpKSYA?tfZ zW6#wA7%e0pa1^*@JvFvSZ^zjbj_QCT1WH3!5@!!V2a5hzdjS?T<2T_l zhQ9ci&6E__sgBe`0u2xXVaOIinYLHkGjF!Y$CbnEo)%7T>kUJ(MlVM(LWS;`;hN(< zPx$Oup&&#Do?%icSz4(8^<8K%UgUPc87NV#cIJdCFC4O-@^* zywWDhW;>Hpq!v~bEfayOap)r?^-#8BiTI)C)4@VV!OSZ;4SjjQiPyALEPjl|JWeM% zJQ5=0CcD*JM^2M@&z=sbz8TQ_J?vy0WCe?z;$s0G+ znD%c~l?@lL6;aI29zBt#;4|&IkrZ#YFoHy~M6S%AH#iK-)*t=x``&_hzL}Sp?=P4;PM$)^!73pO6p5y7J8q|)U z{=7?J+KGo9{((21u*AN_9))VO)juG^%tc*Y`0ZB{6R{{|4GSPeadykb;Yd*7Fk0p z9Jm8!XZPH+vF@z;Ju#S+#BkMly_TW%u_ab@U+>d;eu75Mm^8&sP4A}@X)g2q>s<@&;oq9bon@tckCZ#`j>^9AZ{!2l4s)`p z9f$_W8fwzN9*;EZk4{ga<*|L?Yu}yluzkP(J#>MbOJWK+vb;fZX)T)Y^)Oay?kr57 zC(F`Fs36dK>^t!D581wEm|A~ScK4y%q=UP$_#!;W& z11MRwtT#KAZC+*PWAX<~jc4Ah@L~_bs_ls*lKG5gt91yK)s00!&_X8S-U6@R<<}*q zqZz$bY=7)mRe5r=UX&GK7}SAnO$bIZan%vl=~D~VDKDuu${Hc`@Sb-AA8nbG56~zp98_QbTb^$tVE+x>B!Yw z%RgF`TtOK4kJ<)i@f0=m)X!Jw-{zm=%?xtncxN7Kt~N{uxp3tab{ zG{tOLu z3L+?mlAp111Jy>}?tgyctiNUxVbhEh9Cji*mP;^v>f6+_e$%eTRb5FOjN78jO5xIbq)fJL%k#U$?-q)%x4xTw zqaCV!Ty05GjhZKAxl7|*6Asu3@}CcNgSZ4K0|b{rF5Jxv+nwp>P=#TN@u_iBgs{`N z-xq5)&!Vq_RNgzG3ivXaJ1#eXzx-l;5g;E3{dT1@=-9CffWC4fyzp0MlZy)s1Q=iz z14tJZI_^oUCcMh`bd)ttD6JCl6|I#`ft*^VH`zKk3mNpXWK?L2FY^u=2~EO4C*j0Rm4BvKGFVYECS3#hc6~X zVRplzpR2ju)AWF#sS8bPr$z1Hwkr3F1yZ&r*`2$xAa@um|6J=VWesdlME|atir5zS zWWGyDNqkNtCd$PpQ7RK+?G_{ja$+B58a+kB7dsr`!65fdFf(MFhkw;T6|>s}eCRPM z4_K91TZ6~a5myxA8F}M#P3?5Kjmy^4Pxj}kJq^XA8JO@i>!1boy*JJ4j{5tN>$Dct z70Br!?*Wsr^5)aZvql(^jn0Z2ox}7yWk}v*gyK^hJA;+NZ@rIT>kJHT#;3VHF5-`z zsq0yoL|^Y8y0W&Eo%^0C)p&^?q$6r8LJIeG8AG2X487)G@vQWvpU*XMLu2pc%QBpw zdD0E}Zi%}uM-!4;*FOo42u5&`W$5l59&wp@8^-hF7@3&ra*iSIoZQfPc|)UJFJ5JWH=JZvHvu3Sh-GG8!ZtghQzaMSu% ze;Hs0ENP0vr8762tuwylQCdW@#S^c*pt_^d2y#$0_JHa_=Ow^byL|#v^WXJ;W zFv42ZjNVeItPN-hZOPB4Mdxa|D~HR8fl|pfA_kBz&*^qLoA|iq#hLse!lmY|SdGqt##PduRbzPb{t=yf0 zGLl}7Jc*WqyOq#;#r4RHfb8GzMxpyQgvu0VDV2ECe}v1XYwJx1xmgv8_c|LBc9rxL zu6r)h+F{#L9krWpt>==jUZ!8dt7CgcE%IhIY%4;BNyfD7;1NclOFhwoQA;6n%g-4^ zssPgnmA$2^u?mkJy|$(cD=poJvs`v2U~U>!Yz7QS$oi}@s0cd zO@Q4p-fw?GL$5eY_$)&ViF)5Igi^Leq=@mg*?3XteqC(a50F}QRmFG0D`9|vFe=0$ zr@%e%V!D#@HW+*}Dmp(p*Ic=qHdN?0o06@&>-aim(rcycne!n^b;QI`*n(AZC5BK|(&>Q`?O0tCW|<@4 zhco7ct)^p-G$s`eT1=euG?kjdDQ%y)(0+#A?O^YhOf5D(DD=CXK^;7%0`4fve zN)nD5z!t~fvJ>&azTgO7h)C;v>T%uZ?XOnud-m4giq%Oa+60=N12;cs8%o)!_=pbl zyQX(|-2V!V{lOUw=PU?KA4N63(rS6YMO#-4tNEDS!7vqkLR|D0Olyo`Q6F={HKr4$ z39hIPS|)u&CGyPGwLhD#crDWl3mwfw{u_KaC3LgRIPtc99=+G-!&ZemcHwU89;y>F zQEj6Pq3zQn?EGz0FX4!?V!zjjkJu4Kk9jT=mlI`I3#Os@w2)0xG?KYilCwnmIO!5n z0d8#$Ym;C!T#TfsFG+Q6k5Km3$K%wh5+#_rW1sbH@7VJUmL1pQLf>q~kP6Gs0Ubv@ z2RAa=k|VDU;zJTD8>#DS;In}4mkm0vKj_2aRlSGw23ptG`-dTP0X53-+}Zvxks|sJ zkaZ29<;|(zTS(g(gC3m-++6eBB0`avD*ORj+qAhlH@$M2yS@P?L@1u*a}eYd=vaCg zheT3{&j4PZ5-QNSW<{mPgg5{H`2SZOAN$$Ujlxts2d-NUbRBN1h}w4KmA6x`79jOm zmN*%JCOA5R_P79<##{moAocUA7q%k$e{+TEuuVp3N%YE_%4#l-y$5r*rKnGRr635E zDW<>@RVT8-wX+n-SN~JWI=@x&QwQUKeaTJ_`>J%eE$UTF`tGxA*<@kMU1+={ZYL= zB#Q|R?g5j{*$-8V9&3&36cLqoOdCfJjZqZ49mt%C@|?Kcb+6Su#(!-nZRp;}x8X9L zxK9%Y#hG0G`g^gHA>?D(InB<7dbN*^XSCuNN>Xe6kj$9;yAxIHj6Q5em zoby=S=X^3dD%;%z!BcJB30Ft)CCK^0t_y2=KLKSkO}BV5&ncWwxj8Dgz`6JA!MVV`=??u~ZPgO(t1s8% z?08LB#xDu0RD>8n@$bgR;s)1pk9nC3o%Ja;l&8%~*8f*~=N;74x~}m+5R?)GLy;mN zkrso3bcuj$Ac%lLdZb7Xk={WCK~aiQIcJ}{_nmY0 z%(-)C&fJ;v*P3rlCTnFS`QEj@_j#V*NQ`%mu`QQrjG7wW$$m;Z;_0|c?*<7oUSKmw z^qI}qYYIz8k5wmi4~)Y)-r1YG;Z&czYGg!Qh!Cl>gnvJ)ec`v?n4(=@8R(_FX zpz8Iw08P*>L=>vZvN%=n7LsXymZFFNaB3(S47%CfHYjHChM(r27Mi7F3}Up~RwM;^ z|CZDLn>6+hK130chXFE}?+~#gQCfw&`hrx|^w%80pz>biIF(d=KIYf3&$iJc8br}H z!J; zECV$sg2gqrh8bndIbFtw3s%`gZG%HOT7?|hvv>!=gO5WXrN!<+^UCT?)&V1OhMi1W z(K1ep4oQ0?%JkiA?OZ0Y^!UO|aJHBl#m!9v!=4iO+sT5IjM0pPOn1)tKm+2t zVX>A&59%hea`}b`HIPWejjskOk8M8xq6&;?E#J>e@bYMhMVPnkp+(It$D8Kogvq*0VurbB(j7oS%qDCTubfA>J!ZZEHuO1#mt< zXp^qY**)AqS$fXSq*=u9NDJm%)J!gv#<=@Sk zy0N(6pBq*_o$;W3?WvIi=i9X@ejiSTJo~fGTkYO-mC{O1MS9x3v{Kv`6*!9xMLh#l zf;Xo6OHd4M9$X1__Vy1{WoE+L$~!^yyy9*2RI7b9>kf|(psZHayD5mmA-+<7)~f1C z-efUQtrX+MEWZd9=ld0sFH5S~?3kg-cmj5+hu!Y(-0fBee4b4me?&inpC*VCHNtJ` z=iq75?ClY>H|~{R0Mk8Cv)SM;#4cJyOvv~H$^2#Zxvlb+$9l*2>C8sjc1TTVVP?AV z-EZF@ky5Q(zN||hF*J?OL1lf@jTWak<=BjFYnO!u2izE62k||xKvQHubk_l_|9l?YMabYQ6yj&mYlPGTwMVZN^cfT2((D)2+PIt6nzDqY7K+ zuXwQ0Mb!~k?-D@;EX#F1N>T8KX7dg2eV;EjB?uony&$`;O(p$9V@3sD&(x@}HLr!2 zG4Nd99N-k5YWYT%J82;FE)F}pD9D&S^;{1b>Jwk>J9GPotNvAjC)>AaRN2r=w3m2J zR}sGKp_rogO#>?KD|#FO@qmr>4W3GpA#2!X$zPkEqwuq(8!xxN6gPJNnzaox)&0Kw zys=4Gyts6b@IpDYD&*`y{_^n>#0qcocaiv?SZ4tRdUYBNJxjDIo2c4qH=Xt)nlsrA z-__z@BgSNZt<K~RVVvCTc!i$5%W{wo0c7L1oWHWldT-0K zk)(&%IjTU`ARPG3Hd+_)y*@f-l1vMvK*ezplMsg5wjdZjPlDw~zg--7RN3wZ zQvTZIqp!lzMd=aE+Xa`jKDuw{8~jw!!@*i~>}${Q$5`>jB>cUO{*Hv3p=(Eu9{UaE ztcUs1D<#{{@6;}IMGNUw1fO7gFesnbuQs@`x-W=raeX3hx0Dxq6$5#B3-6SuX>EOb zou|CLax9VZGy-wWvZ6#)QOYRojj8k9?c}n#gxU4GMk;EeMjDZiRG=!tohqeY8*`%E z&2g(`0YgrP);Xsb=KQn@4}q^XhRRVLW5%(T7P>s-2|li24F3AuV^p0H8Zs8~uss;x zpe8eOg;A7*nSuZTJIM^638cf*k`fW0$>;8Op}pM_&#p)64Lq4ICHxY9c_SP!G7$SH z606UneA#{pD}D7#h=qehf?20bNm4nB=ml%aYp1Jz0IT^3@=yFH?+0EDK0)ee^-Stm zNm5hX14Kor?VU6gLiQJqN0@S^Z5`&CN(U^92OBU>jnEJ)tMcw-Vtc95BvzR|-Pa@f zj>tAm0pS^CEX#p?GT}{x%tuB9(6smhp>(d+qw^6Zmq?4c^D>DDZ-VkTbvRS;QF0{I zK(>|AZEs`44O`WX9?V@pSlr&FpXLa=ezseq(gw8}G#G+xE8uH(@}DfJ4b;|c&u zW>b#Oaugs>1VEGuSFy?@G5GNgizun;i2nqDT*dUR<$5L{``ze}o9RJzcIz3*9c1>+ z1x-$Y{JkI@M`wv5;0qkiAV6z)Goz1hBrk@GZECL%# zxqfs;m3qZ{@G1Um?o6j1JteVyuEqbjc`BM#*8|Ejdd)6`LmiUiCvA|Fq`VfPD_5aR z>DgEAd$E3Aoss>m?f@cwcyS5KF34+e7jM#FB`3iO&~Vyybn%;D^Zs#0J=^^Zi&qXv zzp;1^si{M?0`(iLLeD{~FO;C(N=(t93eOiOKk%1|SJeSH7vGj*-%-^+TV}mHZ_+^L zI5raWYHfIT0=8$ngA&v>gUy{Ws+xS%fZHtC9+GkifW*c)PPv$r36qX6m|R(HG}M)- z1XED_%V*K{LZ3Dhvxgo4|1+FB`*&Rpo#s4MXfI@Uy106=$@cR^H&L_MnSiqP-AhP` zv24n7X6am!nTNK+1&a)RNOnpdxJ9vVn*IbJUKK;)%0h{armI6cUi+)424}lRi`g0? z8k3+JpH4L|Vyr5gd|F%ZzUPCRl}ensKZnflw7(V2(0y9dL<<_rT!_Fc&Ste zlF<>nf5_=0Cds@k#$zabQ6{OZjrVG~+{^4DE>`ojZTKkHVUx}P>G!@vUPx-5l0pdg z7#>YG=uOgxY!mPBS8^S#x%Jq4p9AY%o2OB8^03UVep}3rNpL*;UN@<5ve>}Q{WQOl zZWkCR2X)N}u0*JhK3cUcnMyE!-ZnC+6nsEL|B^Nt3xGF7 z)fuA>6O#kd$^_8@mA;z9prm{>^wW{Uu8i-IitGKQlPisK`ztB4x-hYEcJgm6JyT!X z04}um5(*Qofr%DpR^<$Hnhf18ERmVEpZoZEUeT6)r$x{WOJg_wAKZ)iB$YS z`|qtW@HRYw5WM1pIcdUsg^Rg(VO}y)%GX^g+obm1?tU1p3YC5i5qKC-5v;p&R(UI5 z=2-%)4}&;Q>Nkdkn{n0txJx8HofZHlH-hUk&~=D&ud*0rDqm0&yHbTBTOsEFSL*2R z5fCzj;X(LO){sD^A-E-2G{A#Yl`I#e^-(%=a!Q5{ek zB_{N=EzpVGse{gC`+Bkc*jzEIXOVfAdiHN+c;~2X*84kkpA$V5xR{cUfoCqaLMP<%qlga3@UP^|>`Gvb0R>8bk9hzq$x56=BF*u#Gg{g22Q|MCU@ z2e5}^bUNWpyKE2`^JUTxNO-83N?yMCIxADNtRvuLczx684>UY^&ey*y?J~gthd&P6 zwy&=Bvv$6D&CHw@0qI9Z;IWd72p6dJ(Jbb>YG{!#2OfOQA(C`nWo(8s^kZ zSI-bz?^oD-P^h(X{Yf=0o?EX0Sdg#K>K;_AB)&f|jxTxBSrS^vQ%GA@FK42$ACh?v zgsD7!PB;aX4MnEF@Ml%n&sPJ&Q@I{1!I)l@>G-V6bZVDKj3p&iFIHZ>ug7rx4dT0_ z0;yTVFm7{fnVfk1EIA47V99NI&@Z3MPC2tEU*GGk(vL6ai${x%tHjK4UA49W<8eO$ zPFQIZ^JehFN}3Di>1ab!g^$ZI?*8!cbJZ0p1b0buVCedz;~DRVDJp}IQZ+BJRTa{W zAUG&hE0^8enJo02)MZW(NtEu+&N!-1qCN*6kf|cY4aEE&_XQfC{P|mnD-t0}g zgGVZT&GVO|xB1-dCMKiw(s>FB>&!2rOq84gIqd?c;Wija7=318^H4N0LmhT@Qhi;sO-^nR@#FeE&@MRJ>Am_2emDIF^8VkDFf*ix8yE z4_DBYWta+v5@^)5wL-&gv+HUnT5|56p4%nf8N7bT;_cSlQ0OH4iNR5gdFEgtvRQnw zpKgNQ^w_I1{$SeW?!zwM=`^@B{FV~a#OEz+)~>P82mCXQ;d#yCig5Us50|7^=^&5a zT#37yYR67WBull+JUuemN)O(qf6s`Bk!ny*Ln6zzI|{^rcOs3?&bWJvO-& z$Xjy`8QaK4dvMUFo{k<+M5h$D9N?l~^Yfdwu<$1fq{rJmf$}|KdltVojs}cEHQv2> zTEwx~${{i_3irBGVr&FdN%pi(Q7w$nhoH@H>*08Nl#?aIQOy~#B-^jVVm{GFQh@`0 zTdw}!ZvTfE0QooX?Yr$uYQA%DxnFKgDq>)HhtBzl>lB0Ux@-%Bz}d(+QO6DqK+mm+ zU_fK>wl=dw>D$MdwuA3XYpp^a3>hqjD#%>Vl1DS^vSWuKiNd#bFB!^Aht(D;F(0V>LGk?$cZoQ zktAlY=k@%GI}GNbrA`br|9D}&@^^6@|LhC?>tfZM zc#I(U{rdu)sL+cFD(2))!pSoQjVSO@}p?TbcU-lBD^{m#PP@nDZZ0XLSbhc87cck?}fG zw8Q~+Nt2hizO6{M+SKNmN?1sf##>*H9FqjL2u~|1i$KW%T|uXBSKs;9NMGjMHcV#1 z@O^O@xsP$NkJ$piI@TZ7n5l4p%854V_tYS>Vhs(~GI;9mH+&y8C*Zs6nJAR-{Rd5eUIgoK!gn3$A|@-`_M z1sO5%ZJOH@cc`eTsY%H1($Y}TQc_V<{Xyg!9o0e% zeu5}&fvT?6Rl*p1t^t@E*!IzuO=jCGkgqnHxO~NN(yoQ- z-caX^q@SJE>HJPVEcSv9V0R5Py_RT~UVHelEh_QXLeM+d&2*OPUCOw~{gy@7g(*)r z3?2g5@4Es8F#oyXF%gEe?GQZ{<*Ye~s8A}=X~KjK6(I~`c8~D0U%E2S^A2Xf@Q&{(OWB6C-yE#%Wt|R6!qw|^vT9?#M_SxxIR~C76t9?Gfr_oh7LDr>WtJr+7+dTc z#^eSlbmv5Z^^#oW3iREl408@X$og}mXiUSgwDtc-G)=OMMdePCYs|Y6V%U$TEoW;$ zThyO^m#G2rT)T`zb@G2E{ZHel^)(PY-BbIsX8uV{RR29rYMX3-0v8iaWd;WNv(uY2 z!nC5!!lzptjbHK~pS{Q*@cu%D|qR_SLMa6)b+yR zlaMYoGh+ZG>%)-D$CxSSBB?*C$S5J{k4CHV5N zWl8?e4ek7_cvrIjh!NoLT;VwRpJT*{cSv@0hUQV*RJwrl0QdAzwep`Pt)(5zCsZOL zd)Jfci|9Atw?SjvRF7+~1KGxGbj{1+CZfG_mAO27#Exm(MM6=r{-963PK3aW#m!&8 z-ujNjtn4fQqE0DoJ(CkqWaFyX6>Hjan~~X$kJBRZ?xD!B>)aHnBd*3URQ#s!_~(hHH5Ai&FH=f ztrYXHi=c(hA@J?-DZ)K$#0RfH`U~hNt3?%B9y#8S4G-Wnqme# zE`9Cixr*xcVejBW$-QeA5ut#qlBQ+&*d#i!-RY(5aTS1j$O#?Y;bHqBEa2)qJI>jh zK9Roud0Q6Tvj_aAe1s$SJAIVeL??b&nlE*XmsI&M2{phI$MErA7@0fE9>SgdfS0d7 zy-brf|2e0%vLc+36QM<_+V0R=AWQmr#;2({Ydz<8W9s+M3hNIKzbdpy;`xzjw7h;z z8LRAa1q$Tsm7T_k1xUX9b%v#oAjkU60NCr@I0J5D&$t5pW>CEX{nWVvwbj<3a*8`y ztts8@C$W?*2&&PMK^FnL6lYSvVI7mzOGYIZ6|=fG%m0aN`zS0u_yU`{IB0Jcx`>MF zLrQc|&f1K4XuX_SlNadUp-u3BI@jN!-j%QEGr~VC9=|qy2U4 zDAcQCsS7;oD-ep98KwP28j0`CKe8Tr_NJw2tORg26os_FwUeXM^iv9qBM80*^e%id zd|O9a#clW2^|&QWZ?BFl)!KTAAWFaP@=XOCY@ljRBuyAj$7+p;)qZRd&S4cz$^7{G zCxe1Mk(!#8MN9gS?D<64av26ln*V1>{FNIm0-)9K<&G9gaft!G6H;2nK587RTgt}A z`a>;tK#}coy+JRjJ61&^g5^BcLiI0JhKm{hWZ|}IZ=bUNMGw>7?3uS_BN$W(2(X6l z(A*|TA{RK5b^d+R@*lK-znkoTMC`>qK-QIciiY{9{R+ekMP^-IZ^ya=D+sL6CdPy* zN^JXR&%-t2;0n}!0Sj^=B|1`8ig<*z=H=y?n+=Lt6?l5{m&X2cT2`hXYJBYgd2Zdk z(i+FGskJ+$yz7UbGo?5b*Py`R+3vX;q?bwA6Lxwd2#urG4M$sHf0kc?(wI?~Km@aH z)K?!PsMDbH!p+SK)l=2!$LO-%BFoB3%nmI6&hBhudWxi;qoeyyZ}C1#6U(SM>K&$E zL^Fy=_(k~Gg(1cAP`a-R!5BKiA?~-j!ag=xas_&?0}PR)eOkJJs9j?6^Q9|L6bvmZ3JN@7gpr|ojGeC6DEJ$+#Qa!jWHjMuR!8b$kQtj z{h$7M;=z<;ndAoZ|3Q9&|4sq;*Gc?K6oCJsdHi>o0RCMR|6LOQ8ihaX`QP;M;Z$l{ zA6wsh1ww`Zz;$F{y(!x{JVx%F91=WatZMq?8~|`Vl?N$ zkpGPEs9h;}93ku@v}})$W}Y>o_g1nz1?SJ6H+WT+&!{Kl>D%cuNx1yJdl9*OSOC0S zB=D=WH$P0IY)JcWo6TsKLkwm)CTjJof`gEvftIf&HlJs+S|9#0fDnqx` z8P?3*9y5LTxw!E$GBPyf$9~HR?3}NT(I3rzFp$i5YN}@_2)4buU?UpQ+j#kc;Z=*x zkvL+>_s#yVg~UDNo1jHpl!6>Dl*?x?PxdsyI8T!zO&i`%vOYXIiYIv9vx^Hc8t>K< zfgNbicc=S})clR++PP5Kxid)c*bT6gT@yNpAoSMW#=D=I4q44yoDzGxEP-3BHz z(wlB|OwQ@8j8%M4o37UsyX5A_L^8-9-PNkipTO}!pn7UpUa%o7-t{S3>id+t{;MA& zf(<~$*2LRlnuD7bQ=w08>cj#cB$TbxWFNuZO!cfjg>qy+$yLS{T!H2UFU%IU(=nqj z$TLGZK)4H!pktmTMOxDtrZ`Fm8T$0RJ4feWuhwNp`)dcw%+$~4#pJ<7k0+KnOk#DJ zZqf)nRvi!{N?h7?6F#kMmuQTRr1c2aW=EDqM2g+PRG(NZR8Hn5Rs(0SZO>m3QU#Yv zUfssBrl_J0@Ijc>6$pwQ7_0W4g~NRkU&D?zFuT2XlVGf?%9nGMhnf5vv}Nh`Rq2ci z(#s1Z^E;AUzXca=>26DzA|ke)OA4G34QyixUeS)Yn?C&ZKQ5tTaiM&RJiG?WQX@*XZ z88Y((jzb^wn@tU7Eax}A6X}#Neh&mIE|Vi5Y$)mC$V@^0>~q%z>q`r%VUfK{x1`gS z1$t!wI*k9$U zJPW^S53^G&G;X)B2?*=st#vuR5Tiy8Bx?s(M}^N*CLeZpPx^9{BiArp84r)|mMmTR zi0f?=nzG?XRTO$a?Hj(IpNSDh9&&%jL?RlU$Vv*7SJEj^vHKl&ba2cvG)0B$W*d&G~eXjj72# zh`Tl@1UPA3fhf=-9yvC8@ihfZbCK!Ks?%)EJfy#T=88e!_jM1vxNhGI$zl)Pvh5Qp z;l(lx-C2l`+;hK=lnBgN>%0qmfN*sa5k3+Cv4`I6w8YpXuELq+G0sza zC1^;N0m`Miqro_jn|3;lkVZCID#4VWnv59$`pZjqk>MjVs0Hb!F(EGwA$@E15mQR= z5?0ClVfQcG0#C8lEazCe!Kh8R)=@?bAF?(U&f^QdNBng_-NRUm+uVK1Uinb& z2=t-7j}Ek|t#54kA)QL7q2`lpb)3SF5OxmNr^S=zUqoKMFlTd}m9RcmZ8`Ui+|+jh zJb=^|9%Ux(E_z|u(z#GSH)?&v^ay6SSa|J@K#vEWpJv_Wi=LkK!d4`KOzn7y;IPDi zn~1S@U~-rHk}LoDCn=$5_N4MVYkRX#9G?kwTc2uc)3X`TC(!XMXiiph?$O9{Etu#} zo4d9$7W;K2?LES$2ZDtjAuYr5M)nXuwJpc-7F(2x#_-+@Ls*dC_gb$Q<}dk~+HV_z zSREulfyedW$&(DN@!X4+A=UnOxfQ64r9rugQ!m?wkdbk9xmV@20*X!e`){8(8TlBO0^7;r z^cDq>C4?5IU!YtTX8dDx%<`8Lkcy^hyB53Zr$9vbY*DjBTd#W9d9t}qAjPHowlv#_ zumb3@RnFIM$8VM2qhD3~C@oor@a*#BCMZSRTjD{C&>YcLJ*K{H>bmy=9=;K-Wf?3k z?Xu)?;?b)}hxUNRhDPp<6REs`Nk>B|T~@Q#Wr* zZyD?5H=NyyNLJ-ZAtB&^f0U9NBFAL-C_%g0E1xH5nwL6hoQZ6<++dHf;%F*;z2){5 zh#h5TuZvbVSUaAfda`XZvh&IGeF;^lIlt+^yLbjVr%z@6-@?r(v{#Y#apa-j58(6p z6YJHsW0gdmjq&eudb>cq-R$h&oQ2jrafb@{rH^)d!UXi;UIqZQEwo|Rc=C0b-hWnK zC3}TM$dcr`S!zn4>Z4M3ZTWF%Gpm&(_n3205qF77|67lhWC7pKdl0R80^{hCYPy<@ zeZjB$Dx&a>3;5w>gCQQarA)QEDGK~gOOFDRgtZ>H$w<&41N0BlFg5>lo?RP6i6~`dj{l$>osSQj(4Ix^}F4^Z_`|XOzUIf zO#*j&uZPJ;*L#@wq*<(S)>6D}+AwcHi=3A=(M#NYI&~7tJ%H9lj<)NGq4E?(ONN4~ zo0wlWj?L`o9qeVCsy>?2=of#Lt>hlF|FR#-$@XN`jNa}FR0a46UV*6j0s-FY-pC4= zRs@_81Cif3a5GBpv}r=rmYMWn1y!> z5D>BiU4Lcv{?-uJ&)Yu1J@{EZez9?HIiCZz{F-c}9VClxWlvE6^5v01kWT%C#VBcN zK&;WMM5riWsqiMvJbNv*^0AFytnfV#*}gR}uycWJ$e2z`mGvmCD?#l|%8ZmD_MI7& z=A@SbCAe0UlC>#&rf1CWDz-gRx}APF*uwWdl!~v`l_)Ta~d_qe7M=EV`Zv4risx-Qp|FsZW@H2XSL+T&L}L z{qUxg$PF0Isg0tdZLQqjIll(O9Yp)q;ql*F~a;euVJyqH>iuJ}XLyrkVC zRkb#FV&~}1y=19vI2KrS8`FNU1Q<<= zfkNRQ4FZ`tdWJ-dkv8iKo%D^O9W&0NnxBjmT_8}Bz-f`d|3XiJSGu8 z1rb+l75UCSwk6jymAY$3@3bKc)gtGom}ju%ncA+O6Z&Eqq50l}9x5^b%)Brs((b37 zZ;|{!X4y6rOrIBC#+TUw5p@Zj=bW|f*|vM+`r*`R&vlOL1|6&M#utN9*|HN1pa=af zA%ycfluxw;P3U3M-DSRD3nXJ7XqH{OipM4JIfrOEtHA&z<5`d;lH{zZ2)*Fd6{3^bccJYHG0c zSD-ivqtFdWMpWp2=RDqTp`z75vHr_vdykYpyfRLbejv@ZBAGoYulcZV#;oM!KThbQ zTX8@kaHjkq>fg4XpHL}FkB|XbQ%w=*9`Cx0hVoc|+RG!$q_2IzWz~mNX30mYqrmNb zecQr(m79^1p+QcuLNJTVPn|Ur#m8dW)*gitCEamM-zIrr4*V4$sr_8)*Q1@TM?1{Z zajiV5aNbqj(A(%cT@w-?i#8JZ_++Fk@A>-XT6U@iU4afN#aRTUU{@fE6}8b5a;e@U zU}XY0WJpbMk>zz}X`0>JBJ)liy4YzULspqY3 z+0{Lis+{QX&^eNXKHZh_ifD$)!G|h`U+D+bdFmgyfrFn5@1YkKY_ST5s<*vakv{89 zIqvCikb~hyyrU1tN){W(otdkqQ-$};zUWCbYTxF!YD{@wNq9|CpXOallr~IPYo3>1 zEIaPTwRu5~;;GdDwnfVt)v>WJ>U!MH*p?;qd_&0g-W8~9=Rl9=dML+t={V%irvSdT z){cj*Ajv=&mjF%pk{>G_!H+WGN|b7W+{Ep9Tbjul*MrtP57*Pc-zgmF12cT;b#BgVdV+Iea(hvxwB_>_cZQe3_j1Xw2JR{;bte6z%{ zmrHvMUQESB%cPR+YD$XE)8;=$^qwgf#ow2|qXK7BPUlWAr+Y3V7j(1! z)0=9vh7uWAQ{sHuKBkb3Q)K3PzzsLk{#FYUIThRA9C;W3>~*=|%C~cI2_()oFh=1L zN`yO-6cxgrfd#oXZy~d0m7{DmX}XajgHNkF(oA9M9|$EbwZsA96EEGMX>nzyVl9h9 zWr0_t{;K#e5+%W3Bh+874+cyni7C;r3T=+PJHiW!YNcOxFVYxG(I3sN93xNId6dWw zXMs)K?G0Tt0EI<^G2nR<;DfT_Vi{=O-Qt2F457#LLeF|DXF8`Oar)EG?Azv;mGh{d zt9EKf#&Ro$IaG-auoH|SX7^sh6$m_@IO`}$in7jjmpsxKW38%4)EVR5D}6XNG00lW zDcGgTnV#^zPOZ0fhK%5K@4|&cWE3-z38`Lv!J7 z@2PrQ#-%QE)8C|E-d%y}tw9$YnSMmLOQ4j2zRDk)#CIel^A?UN$P&J}Umf$!37f0e zRA|MQZ%DX22JAm(uxP8Ld4Z_(fSAdaJ_kV z`ped4fWwDd(@?^0&Du`weG(O>-kM$0gYD%$#7@93_rz{uZ3yvTB?SnSq#qZT$kLg$ zxyLq{b+8_j)oW4Wk@K}=-Q&ixs+TQeWy>^H=T*5KWhuSMOIxPum4#euAOW~ zS+d=Z&3;3t5G{`utAy2XnP#gWg8iX~u8i3!qgjc|v0#@{@2F+lbUK@R&yi>0*!w7; zZPGI;u$embB_FA+=lyz`!@4ob7j#gI2>kU0fkK+OJMt8cCIXVbvXE{a>15ujE1d^G zLKs=bGC7s|=S{uBHbMgX> zuXhxyM&(1Rip93HapAsXZ(`f>Yd>SO?w;bkm%8y&0S`iYOq#giHW6Jxx%2u9(hhku zLpN{>nNKGhSHHvIXUrli`C(z%^Tlg30oi33`}8g2W7`Y3Q@@~?J0HzTYYqSXVX#ph z9N&XN)|4ROuV}829OfY6WA4+TuY{d*Ci=GEI0MxypFDM_N63eLkeGBMP$Q!Fh zD7}F}`NJ|9rqR73-%|T2d*C6xTmp_Z5Yu*1Z!AaTe%pm?Q^|f%JEll0g4!Uy$~?4J ze_!Au+Z*jY(09iLx8bY-ePY0Y*0q!_2fd?$q^vgX=vEs;^~PCv$5id?WbvX zM@&c6ij7-Fg`i}5v)jTBU2NFldXH%Rs^AZ7v0B#BmX~l}(}13lu|_W#&YFZ&)e_0quGK_*rMqv*dk8PIf&{gpKUxOhVU+Ha*K60CEV@8WJBpzi_BFWG{lXU zFk+p)_eV+|A5U2#0n!xRIi;eChzm%4f6J|nbyB`WmK!SHW6`FPA0MSy3xAvOPAG5k zmt7Sqk|U85hfHbH!Xx=dspAU0r4E|w3La$@xI-1jgl@HcZm2I0)z#peyEd&zix{Hv zDLS8(>@zGw!O@Y#%lE>hLeT7YgRAMhxeH4_@$KE4*c+Ii0)7<^P?_~K8-)HqSUjlt z0VIZN$qweMwM14KssQBmHlDeaBom&$(^$65CUC{IToDgH4ob?8-pwL=b4EWr76CFF zDbq`E&~ZcAkG>|b04}`f1S-yRmg&wWb^c5^ zZPPVt(5!qP(0B*UI`YM58jP#+CFTuA8XdyQRnYs;5e> z_b@Q~4Iw6;zqStU&@`*ipu%t_{dKoXRE@0BmkF(egawzG$3g`3zdq)B$)}spM#wWo z)|oO8HJ1~v4J(PLSddtTckr=An0Wd5516UHF0co(uMfP~6k*m2sq&FXUW$nLVH=|E z@wKfk;T8M`JW|*75#cI?c9T`Cy-VVsm zKhOY3(teVSv;8f-tO+0Xy(P1m8Tx`sO%`OfK)60eFW8toP4mRH<4&yN$vfQ`1Dkqi zFpp{M>b&)&@*26Am9tOyG=ql2;aNd-gp=xsOQ1e{$5!B=K+Qp*J5BXXGA;r5IZA0< zsDy@rN9ETZv^s$wKFeAop5*aULiFA37Jycg%Nl&cmw8+A$pivgCJ3kFS&3y57K(L! zs>;Y+t^0*hFjQ6IT9+z;*fO*mO5)A^+ncAzM%gW250$7!S>1cq=(R7m zeu^c9EIQ*y6H8f<-`Z{#K{*OG(T^fv3vfM&>7apEm@)eJsv}{8kB8k1HBaNhNr2cJ z?p;ln5~#ivrKVBeZm3tTJ5*z2w~-lNgrm6r{Wyfr-mv{PRVNky&q76$8na0AR?f?j z*WiJc17_DNkPlX`IiRY}9)>N(8hUN|u&$KR>Y^nNRD;FU@;k+6e8ci)ZL}$73ad&O z`K!Wj^Mig6eIUe>=(N?Df0SVk1zc#&Bi$!7Nyl!2!Y_}&RPO$ZJd zHLDC|+c6{4ZzbrZ&m^bV$D6uV^{hTA`B|%56A&v0`AA*35q1T#1n9THq>y9o1u`RB z(Qo%2z{bRt3aulu8?ii9hmREeLa#sre$|!Y%$sLi57cfwsdG5W=QXIoh( z4G+I_*p$9oB2gNKyuO3WxwHMY@l0%&LdhQ&rFsZ{8COP%Aipvp7e zk~-XVv7FeUG!djwddP3Ece~Gd z=*CIHD&+clYX|Fnie@ca`K~Jha9@E|f4H94j2wF%U*0QkbXft2rGn-Okp!Vaw0SA2 z!_Joxub0I%wc@h^g=0S5yifB$<=TDA+ERigsdgsqc3+xJmnd0!&XmOWgVIWx z(Ef=Rfu^?ht*>t?7eEE%iWqIHj6a@Vfn+hM;=0W3gKkO{C^y_zdJ?CBC4%u|WhaA6 zmn6xjV;i5@-t7aCCWrnk{d}qJEY3%McpGtc{qk(};FEJ_L(eU@@03K^{#PKn5?yo;jAo_?tVEfxj@2(ADO@ha!oK3S`Kx0 z8RFEL{5fdp2l8gMaOKhtLZr)5tx7G=dSYanA>~1{ngBP%ikIy$ONJ`Vei@F{yQHkL z*4t^gEN;P-6=ZG+FPAkXo?yIpaRI?XCr;Y!PTX5J{Qu|zK;f-am5dy8Y?Ite#)X_Y>(SsyS3~=EwRUYL9>|N$8PAshM^eZAt!nkrU zdb!qp6Jf{ca~Y?I=i&gAtU7PHCMn-1=&b`&X=wpnb+Qb_7mjP_c}@NG!_!q$p{_?k z#arA^z$?pLRSk2R>XN5uoo}Rv$*_!70dby^X&Sp$*eas_bI8q%UIr{cs zq9}jH>TOPGoCDOsq6XlpmHDugM|mFpCRp+fSK3WQLFdVfaclytERJ9e1A$IplkFpi z+M5Loy)+s}Ek;~O=`ZFv_QX@AO$MSHM2kZK)0m%hatu0wOkSgwktRKxE zbxSE{F3hB%&cB~2CI~Q=b9FO|=G##=_zha3MGUp{!}<|kFUAEC_In(I<8!+;5rpv6 z@)r-1`nm#UBYxhgja3xt99;CVR~mdf>#hZnQ)F$qJ8zN0=$ib+v1W6*TJ3?Ys|hPF z0B7x$sqOhNc9DH4wR3TP^U@7hb~%#Zz3dv^@@1(W<*h1_Blarr9U{x`zdM}<=E%CGILHLJ6@SUDClKao@adywha%@?h-^y)K-PCYE*pE-$@l+P_NbT9hB&}(cabY&{EwS#_GxOK-HHEN`}@L7FPrgE}*on zr@?}?xRS4F+LK37@7W48+3Z>IK`L(KdL0My?P4j)FE`XD%J{OM?9fM?1Sag0PiF`W zKI-l2nAhpr2y(^qIG65v(s=iv!DwXHn?KK>mAX0ZVNOX`wY|Cej+@PQxh(4k{xM_< z&pKJuVTNB88h{=aRaWZDkr{`LeTSDRxKx| z3l}Ul6Ui!irB|Ssc)2m>Lv&xFCt@x9Bd^KGqN4zfvh>Gp%thvqQNtM1$bCZo%jMtk_?iCoci5e#o)kW58!WNbK2*LltNbh&^G(3JStH1n)AZL1 zbiq;gx%LXyWDQ6>l4?gs1|jH&&?p?tY!QdyMJ7uQ7hi#f0-~@tTdqKK#Xu-CrQpKn zdD2=WZ;377VS1ypq*5kV|NM;PXja}n#k7a#s4x3toZkn+pW+XP5YLUxp(JZVb@7U`zf+wOGbCFW5<80BO~`@T#|l_2(YvWsPN)+~A}W z#IWJgC|$uZ>d63=o!` zceTF};u;6=R8cRKcK)Zv@x9uQ#Gb7gm!th1Z?Xz;>k;d_ZKv!{gGbdw9YZ0# zTg@}hhy_(c5y?-Na+OygNg65CAL&_(s482jqa_>+_+!}>sLQsynay`ZyI#c4m&JDe z_JLgWG6O(7WkX6+zhJ5?px^(t|FM@@LnN>?@tnH7qU#!k0!31d|D-LL?)w3>je(B| zmDqmq>stlGv-Ob&p$sWgtF^U}_}3o94`Z!0%Okt37irF|IlEqO6X*FhxNM84DCP{D z)NhSUZmqZ6>$W_Nu*7;l1`dR9ki9`>s|jGEt@{du2fhM@PsYHp<9g6j{~4QmHvnW{ z)Tx9KTxNp3=~GW<)|^4r%Q2PVIpLE;#O>%)td-jR`M0a;Xc83MWhKJW=m0TdWIL0a zzD#N}vv)DUK?#3d6Nq&$VfnTv)3g$PLqpr~uG8WZ3y0W*VQ^I3{&e0ZyNa5&qgT#o z3A!=)L<0I(O9TFDY9*qaPJgpZ<6gdXAn2Sf{V%K!|7BX%!}8)lysy+cV=UGZ1;ix% z<*$F8^h7Gve@GaI-TRwR{^u$G*9Zgu4W9pNl>cjlf&V*V{y($)uPX3AraT!h64Iy$ zWeygEry4!y8w!R97J0#KUxh$26Bs;bGlkLRSI)wK#J3V( zH=HGHg8vhEWOo(_QtVrODn@X#3 z%-MasJY9EwBmU}~S$}oiqd5Yt$@JcuadAyH&O$5OVjS{*8WFuUP@Lx2^~TG)siJh0 z!x1;%$_|nG$zWhfpSRFk$-_4PaUy3 zR$mFkLj6P8e(RR@>Py^V^^>Rkf3g_p0C!wSp|4R6#oMBq$Mp7jmZm(TuP5e#*^sZF zZ}<`1e_w9Aom+%z?@TOznQRzpq+?`YpaUmW`~L3s9iWcP6Rt+YTUZ#UU1)uFdguK!FIpqGf zKm^exs|$o_lQ4AWQXJ{5-&+%Diz^-Mm_Rz#j*BoB&>hyV?e1lpadgv0jB1Y#GF^fG6FC@(-R-ynQR*r#rqq@BPG&1& zvL0gE^)nfEI7(SU8Jel=?ipm7!fc`myPj|t26fHUWFRX5(ns@4+U?xtE_dWu)h!x= zfBsrRrWUem{FHK+^dz!Tb3N07?T>C?_#Ktb)0ePdDVf^83LuqnCWZelO+t)J)t=Q} z($ohBKU2Dm`6}zb7hl<*!I!{M=MgWpQMm4ZWNCWFxS!%qY0-hW<3AXHT!Atlm53Jk zB=a%c6V!dBLkVS!-__CVC-6GZVE88H;eC_2s0n7#A}E!ipcI`;hM5H1K#TQ(#cf-^xa*(At(<^llHkk7Aq8Ge5)a zK%TT%?c;4PP&88yWmv@woE_QBytyn{S1^m@aAB~{iP7!37W-^2sK5ZEaxF|2lXe^- zdZ{wDe}ZrVPeNRlmN}~Qfl`j&43C_dINLP`t;Hr~mY z-7#XBl>3;a7w~kOKDY8=b))`QuKk!*qB;wZ*`Wf{&bRdC^tOI50UT8U4ZdJBqN%MF zj^2rNFVO1J4czUhOgg=LuD?bg#d(~=Y{@XA>V??aSPfe*9Iw-?-dQVC>6R+;z6(2G zS{n)xbU}i{N=k$P?g(4e1E!qu&#o~xcS*324(OABp+WIOyM(2zcdS&({j_?_WPpWN zIw1=D^AL{eHaLh1buJ^F+SIFRX0}xM9p*|ig{7goqg)D>bSsUG( zfKnU5RmQ!QPxV8_zh-`kRP=xHnCKG$8-)tjH=nWjoji@?8ce!T!seSib;X*5B15-{ zGk9}zNz=fzl;xmM2^yS}7gCLCWL*x1W;GrZ3gu0i#2zqLDG{eQeFz^oRD}KFpqG2V z@5k(MKr;#G4rh+Kq|>@*=>N#?8un#rrIzu=pt;t@0RUw8SG5yv)Qjn3NzJ44^ z4hz_`NIb0))H{FS~`47p~Ny&<^K&VjEIcF#F2>5 zN1X-*zhO2B)#AJ}*sQizRL+%CP8&`#V)RScMio%fSDAzvC0~IQyvNN>!GM?KoL!Tz zIg{<8mVX)0rg<9Hq$st-Hc^Fe-S1D}ukhllI9Iy&c8Ppyd6rCZ7R4PCEKYGiAdPZa z?q9fVMITsT>{ehjzhLu&`=!a)%(4eN@w3BOSE9@{@*Ja~5iE(`#O8`0A zY@k_dT8<_zuRu5NGNTQ-|K?r~JX3+hg)0zfG_z7_i3zuUq`?+YPin6~%QzU{XV*!r z=K`?UwsHju%N)CGX~5nx`nx|0ZWa%rx7 zQc>=wSPD4!de}H%3|CQkX!8`CT2)@+xEebHs?<~f1aKoR8-xUo>yZiR^s3V3AdQT%#{L8cV zKfkTscF;@ziy^zDX2XISr60~%d-mh}&-y{&8bm0>{7H{!79tv9Pfn1=Q7!gI@R!(S z9LHq}u-C|gystr*5W3LjX(4nGmH$9Jk-0}swD_nP2XO-Y_BG9ypMTOmW4OI3eBd5> zq^BJ{XQsfJo4MMN!NlIJh% z`APD7=)~9+s9aEIURg%R_SQ=9teBzAVHeGlmx&LvY2WI~d71~6FgMif&8Hu{JQ32; z!)0oJ(pfGl*)j}DWYxwh=_|npU&#mr@;Hb!*w69@fQ8@QBs~AJ!95^+1tOoH?4S?K zxf^_9?*F#-Qg$L)eY|8GF+ zp-Yh;e$*wBsE~uw;!S@YY@D8*vY&3CRcbuarx)M?K3Nt|8~Tq#Oc^(*97kvNYZeY< zl5-igdak-`TwN>0Hxbba_)L9%B00uZ}`oTK_(}!A#=vg^A)3u3%b+a`X){jg~66=9_sQ^iR(9MagY6I@%L9h2ZV?EfuNw{|Onm=q9E8h`w~v7))Iu__fm#z24D zN!*chRiHc$pIJ@opThdq;b@fhndkX=`Fj4vAD)@_5B!d;)L$cX>b(f4RhLFAB1vOW z(L*rocckW5|8sSl)GFv7%L3t8bHU%%1$qu3vqI<(+|M(<(BIpMM$||~dO-ozg5JC@ zA5G#+1E06P+ZM%AxB3nx-ea#lNQ)NhSMI*Q{ii@Cq)0fLlSjx|bI78(%d z+Ga=d&cf%F$>eM0=+HLAs<*Z#+&;`^G{)-aQ~_2kY3AzEbTfN$A5`s6>WgetQenWh zV_%ezxqgbdt+V*hX?^4#_|v=GbaCNHM41)KyzSRF!}9E>O=%PE?HMiv`1$5+4z(_2 z>Ea$GQXgHI1Xc`?&_M48D<~|xyib|UOw$i#8m0@LS>Z%ZJcC#LBsB*elGeR<2sL^x z`N7V^I`VVyrYjI_3kHTf6!U1B2Ls?vAzTVnFa17R56Oc|Ts5hxj);q7&3UVb$sR0? z5d@1<^QJO=_8jbiTRSn&lqCjF(0$`lo`+R4JhUsa`(* z-t&!SHXS2(*P~_mP#3QhRdRR#4th8LMwxuW?cT4>rvSz42fAIyeehOB3fQltL!C88 zW#2$GJts*Q$%2J_H=8Q}wmZ{%!0sI5Ud;=;|y@Vc5gQ3XpWKrmN2)qYM& zd)h4+vXPQEERQ30t#kfT_$D4U2pf9qtv9l9-L=!_qpYgd#gzr9{rJ4BmSs6s8G_nj z9>(SCpx_LoRCiS9UEFCvNSRp^IkGwFI?r}cztxPVuOl_OyV@|iZi^TQTtYtm1NQZU zFYd>ex<}1ZnW1h5jRh_(i-}vPc><`^)StvHO>qO)iKj_~oqAY2Lc0c7 zqxK~Ur1xxpdJ~rMrdvPultrW!6ewouS-V{52yDUrxnz1LaNRJr!+B7jRFWZeX}`_j3|YDlt+eWPExf z5Mxy$6xZyH3Ohha(2O~4X6yl%17?f<_VhO0#~od_G_KKO1}3Mj`h3`-J(Oki_{fE& zlQ!}>i9@Br^sQX21Z7OL|0g-}Tn*Qn@+r716hh*9isVpO4tbf$K}!T$1c|*H$6;P@ z(8BeHwm1}E3-i;~l`-+>*+9;Mt)9`3TpK;D{B)bj7{I(b`OqsM!B!`j?P)nz;kSn1 zA-X|pD=gQr5b3-23*jHdTl6mbLE?2#NU8nGU07nE%(jOGx4c5L|T_X)Ka4d zsL-WvfIRNu4q11SR@dx>m4#XSvFg+Q@d zlDosPEY-!rB$6D=_wz7Szv~|JB-(>4K}eZ*-iHX8cS%?u!FNL3Zr4Zotb*)!1!k|f zzY27XU2M^1u(-ZL9^z$P=po8fU1N9GYBW{^aIArer;bJ-5+0EEEHtRNc}Y-Z;liPj zvTsYCSCl4n#|zhJPC!DhxqE3NZ|3u6hjxw152KZf=4D+N_s*OelpUDAyz3{X_eF+0 zm`V-%Im9^G9>!38aPQ+{?NUfvtZ%d-rGWNH9>IJ;)+pZ1iXGJxD<<;Kx?;VPr zKRg4J_88nCXK108ZR}Anisd@`!GSv-$T}KCaQUghlcVGzueI>~e|m;P9d9$X*Orp= h?+FFTe|!G=Z+CD1<1W=(JX~r4bTwW1RH3`@e*q$YqdNcq delta 17894 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 Y2RtnFTnV^|+)|T~c)gTYzCGvv0f7FIGynhq diff --git a/userguide.md b/userguide.md index c828d6b..4ae8776 100644 --- a/userguide.md +++ b/userguide.md @@ -1,6 +1,7 @@ # How to Use Visual Studio Code with Maxim's Microcontrollers SDK (Windows & Linux) ## Table of Contents + * [Introduction](#introduction) * [De-Mystifying the SDK Toolchain](#de-mystifying-the-sdk-toolchain) * [Integrating the Toolchain](#integrating-the-toolchain) @@ -8,15 +9,16 @@ * [Referencing Example Code](#referencing-example-code) * [Loading Example Projects](#loading-example-projects) * [Injecting into Existing Source Code](#injecting-into-existing-source-code) -* [Adding Source Code](#adding-source-code) * [Conclusion](#conclusion) ## Introduction + Integrated Development Environments (IDEs) targeted at embedded systems and microcontroller development can come with a lot of overhead. They have a tendency to be bulky, unwieldy programs that can take up a lot of hard drive space, and when something isn't configured properly they can be a pain to troubleshoot. No one likes digging into project settings for hours trying to get their include paths working, troubleshooting five different configuration options just to link a library, or tracking a bug back down to project config option. [Visual Studio Code](https://code.visualstudio.com/) is a lightweight, powerful, and customizable editor that can serve as a great free alternative to the more traditional micro IDEs like Eclipse, Code-Composer Studio, IAR, Keil uVision, etc. This app note outlines step-by-step how to get started with [VSCode-Maxim](https://github.com/MaximIntegratedTechSupport/VSCode-Maxim), which is a collection of project configurations that integrate Maxim's Microcontrollers SDK into Visual Studio Code. ## De-Mystifying the SDK Toolchain + Maxim maintains a Software Development Kits (SDK) for microcontroller development called the "Maxim Micros SDK". The SDK contains a large number of components, such as register files, linker files, board-support packages (BSPs), peripheral drivers, example code, etc. This section will focus on one of the _core_ components of the SDK - the _toolchain_. Understanding the toolchain is important because this VSCode-Maxim project is essentially a "wrapper" around the toolchain. Let's take a look under the hood... @@ -24,13 +26,14 @@ Understanding the toolchain is important because this VSCode-Maxim project is es A [toolchain](https://en.wikipedia.org/wiki/Toolchain) is really just a collection of programs and typically includes compiler, linker, and debugger executables. It also may include utility programs and build systems to make using these lower-level programs more convenient. The main components of the SDK's Toolchain are: -* [Arm GNU Compiler Collection](https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm) (GCC) - located under `~\MaximSDK\Tools\GNUTools\bin` -* [Open On-Chip Debugger](http://openocd.org/) (OpenOCD) - located under `~\MaximSDK\Tools\OpenOCD` -* [GNU Make](https://www.gnu.org/software/make) - made available on Windows via MSYS2 and located under `~\MaximSDK\Tools\MinGW\msys\1.0\bin` + +* [Arm GNU Compiler Collection](https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm) (GCC) - located under `~/MaximSDK/Tools/GNUTools/10.3` +* [Open On-Chip Debugger](http://openocd.org/) (OpenOCD) - located under `~/MaximSDK/Tools/OpenOCD` +* [GNU Make](https://www.gnu.org/software/make) - made available on Windows via [MSYS2](https://www.msys2.org/) and located under `~/MaximSDK/Tools/MSYS2/usr/bin` GCC is used to compile source code but is rarely called directly. Instead, GCC is most frequently invoked in a list of directives collected into a _Makefile_. This list of directives is called a _recipe_. If you are new to Make, think of GCC as the hammer and Make as the builder who knows how to use it. You can tell Make to do a task (such as "make all" the source code) and Make will follow the instructions outlined in the Makefile's recipe to complete it. -The core Makefile for a target microcontroller can be found under `~\MaximSDK\Libraries\CMSIS\Device\Maxim\\Source\GCC` - see `gcc.mk`. This file tells Make exactly how to use GCC to compile code for that microcontroller. All projects can then have their own Makefile that builds off of this one by `include`-ing it. +Detailed documentation on the Makefile system can be found [here](https://github.com/Analog-Devices-MSDK/VSCode-Maxim/tree/develop#build-configuration). The important thing to note now is that every example project comes with a Makefile and project.mk file that manages GCC. They offer convenient configuration variables if needed and manage the source code for the project. Great - so source code is compiled into firmware binaries by Make using GCC. How is it flashed onto the microcontroller? That's where OpenOCD comes in. @@ -39,6 +42,7 @@ OpenOCD handles flashing firmware and opening a debugger _server_. It handles t In general, this is how things work at a low level. Integrated Development Environments (IDEs) such as Visual Studio Code have mechanisms for integrating toolchains so that these low-level steps can be abstracted away in a more convenient way. ## Integrating the Toolchain + Visual Studio Code provides the [Tasks](https://code.visualstudio.com/Docs/editor/tasks) interface for integrating external tools. To use the Maxim SDK toolchain via Tasks, the toolchain binaries must be made accessible from the command line. Additionally, the correct board and peripheral driver files for a target platform must be loaded for compilation and source code development. When those conditions are met, then Tasks can be created to conveniently implement the features that you would expect from an IDE: building, cleaning, flashing, etc. [VSCode-Maxim](https://github.com/MaximIntegratedTechSupport/VSCode-Maxim) handles this for you and offers project files that are configured for Maxim's SDK and toolchain. @@ -48,11 +52,13 @@ Let's get started setting it up and walking through some common use-cases. The ## Getting Started with VSCode-Maxim ### 1 - Install Software Requirements -First, follow the [installation instructions](https://github.com/MaximIntegratedTechSupport/VSCode-Maxim#installation) for your OS from the readme if you haven't already. This include installing software requirements, setting the `MAXIM_PATH` environment variable, and downloading the latest release of VSCode-Maxim to an accessible location. -
+First, follow the [installation instructions](https://github.com/MaximIntegratedTechSupport/VSCode-Maxim#installation) for your OS from the readme if you haven't already. This include installing software requirements and setting the `MAXIM_PATH` environment variable. + +--- ### 2 - Release Package Overview + The VSCode-Maxim release package should contain the following contents. Note: Releases between OS's/versions may differ _slightly_ from the screenshot below, but this should match in general... ![Release Contents](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/Release-contents.jpg) @@ -65,6 +71,7 @@ The VSCode-Maxim release package should contain the following contents. Note: R * `"userguide.md"` is this User Guide. ### 3 - Starter Project + In this section, we'll get hands on with the VSCode-Maxim starter project to see how it works. First, copy the "New_Project" folder from the VSCode-Maxim release package into an accessible location. You can also rename the folder if you'd like. For example, I've copied the folder to a `workspace` directory I created in my User folder below. I've also renamed the project to "MyProject". @@ -96,9 +103,10 @@ Now, VS Code should look something like this, where the template project has bee ![File opened](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/myproject_opened.jpg) -
+--- ### 4 - Verify Toolchain Access + At this point, the project is opened and ready to use and configure. Let's take a few steps on the integrated terminal to verify that things _are_ actually working correctly. First, launch a terminal with `Terminal > New Terminal`. @@ -112,15 +120,17 @@ For example, running `make -v` in the terminal should output a version # for Mak ![Make Test](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/make_test.JPG) Run the other commands for OpenOCD, GCC, and GDB to verify that the integrated terminal has been configured correctly and the toolchain is in the right place. These should all run without error. + * `openocd -v` * `arm-none-eabi-gcc -v` * `arm-none-eabi-gdb -v` -If there _are_ any errors thrown by any of the commands above, first verify that you've followed the [installation instructions](https://github.com/MaximIntegratedTechSupport/VSCode-Maxim#installation) correctly. Problems are usually related to a missing or incorrect `MAXIM_PATH` environment variable and/or missing SDK components. Otherwise, see the [troubleshooting section](https://github.com/MaximIntegratedTechSupport/VSCode-Maxim/issues) of the readme. +If there _are_ any errors thrown by any of the commands above, first verify that you've followed the [installation instructions](https://github.com/MaximIntegratedTechSupport/VSCode-Maxim#installation) correctly. Problems are usually related to a missing or incorrect `MAXIM_PATH` environment variable and/or missing SDK components. Otherwise, see the [troubleshooting section](https://github.com/Analog-Devices-MSDK/VSCode-Maxim/wiki/Troubleshooting) of the wiki. -
+--- ### 4 - Set the Target Platform + With the tools verified as accessible from within VS Code, we can now start to configure the project for a specific microcontroller. In this case, we'll do some basic configuration of the project for the MAX32670EVKIT, but the same steps apply to any micro. @@ -131,10 +141,11 @@ Open `.vscode/settings.json`. This is the main configuration file, and you shou Set the `"target"` and `"board"` variables for your target platform. For example, for the MAX32670EVKIT I would set... + * `"target":"MAX32670"` * `"board":"EvKit_V1"` -The [Configuration](https://github.com/MaximIntegratedTechSupport/VSCode-Maxim#configuration) section of the readme will tell you the values that can be set here. In this case, we've changed the two most basic options: `"target"` and `"board"`. +The [Project Configuration](https://github.com/Analog-Devices-MSDK/VSCode-Maxim/tree/develop#project-configuration) section of the readme will tell you the values that can be set here. In this case, we've changed the two most basic options: `"target"` and `"board"`. ![Basic Config Options](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/readme_basicconfig.jpg) @@ -148,16 +159,18 @@ Next, reload the VS Code window. A reload is necessary after changing any optio Now VS Code is ready to edit, build, and debug source code for the target platform. -
+--- ### 5 - Opening main.c + Open `main.c`, which can be found in the `src` folder. Here we can see the source code for a simple "Hello world" program. -![main.c](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/main.JPG) +![main.c](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/main.JPG) -
+--- ### 6 - Clean the Program + First, let's ensure that we're starting from a clean slate. Open the build tasks menu with `Ctrl+Shift+B` or `Terminal > Run Build Task...` and select the "clean-periph" option. This cleans out the build products from the current project as well as the peripheral drivers in the SDK. With everything cleaned out, the next step will build everything from scratch. ![Cleaning the program](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/clean-periph.jpg) @@ -166,9 +179,10 @@ Selecting the `clean-periph` build task will launch the task in the integrated t ![Clean-periph Complete](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/clean-periph_complete.jpg) -
+--- ### 7 - Build the Program + Next, we'll build the source code. Open the build tasks menu again with `Ctrl+Shift+B` or `Terminal > Run Build Task...` @@ -193,9 +207,10 @@ This is a good time to (once again) re-iterate an important point: _All configu For now, take note of the fact that the example project comes pre-configured for a single `main.c` source file, and looks for all `.c` and `.h` files inside of the `src` directory. -
+--- ### 8 - Flash and Debug the Program + Now that we've seen the program build successfully, let's flash it onto the microcontroller and debug it. First, ensure that your microcontroller is powered on and connected to your PC through your debug adapter. The specifics of this will vary based on the platform you're using, but documentation can be found in the datasheet. On a platform with an integrated debugger, such as the [MAX32670EVKIT](https://datasheets.maximintegrated.com/en/ds/MAX32670EVKIT.pdf), this is as simple as plugging it in with a micro-usb cable. On platforms where the debug adapter is not integrated, you'll need to connect your debug adapter to the right debugger port and power the platform separately. @@ -212,12 +227,14 @@ Once the debugger connects it will break the program execution on entry into the ![Breakpoint Hit](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/breakpoint_hit.JPG) -
+--- ### 9 (optional) - Open a Serial Port to the Micro + Before we continue the program execution, you can optionally open up a serial port to the microcontroller to see the "Hello world!" message and count printed. Default serial communication settings are: + * BAUD : 115200 * Data : 8-bit * Parity : none @@ -232,9 +249,10 @@ From there, steps will be program-specific to the serial terminal you're using. ![TeraTerm](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/TeraTerm.JPG) -
+--- ### 10 - Continue the Program + Press `F5` or hit the continue button in the debugger menu to continue the program past the breakpoint. ![Continue button](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/continue_button.JPG) @@ -245,16 +263,17 @@ You should see the LED on your microcontroller blinking. If you have a terminal Feel free to play around in the debugger here (setting different breakpoints, watch variables, stepping into and out of functions, etc.) to get familiar. When you're ready, you can hit the stop button to quit debugging. -
+--- ### 11 - Wrapping Up + Here, we've gotten started with a basic project configuration, the available build tasks, and have flashed/debugged the template Hello World program. The `New_Project` project template is designed as a good re-usable starting point, and you can freely copy this project around and re-configure it for different target platforms. You should now have a good basic understanding of how VS Code works and how Maxim's toolchain is integrated. The next sections cover more advanced subjects. -
+--- ## Referencing Example Code @@ -269,6 +288,7 @@ Opening the GPIO example reveals the following contents: ![GPIO Contents](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/gpio_contents.JPG) There are a couple components inside the project: + * A `main.c` file with the example code * A project `Makefile` for building the example code * Eclipse configuration files and debugger profile (`.cproject`, `.project`, `GPIO.launch`) @@ -303,6 +323,7 @@ Using this method, you can quickly and easily reference example code for your ow Note: It's recommended to only use this method for _browsing/referencing_ example code. If you'd like to work with the example projects directly, it's recommended to copy them to an external location to keep the SDK's reference copy untouched. See the next section for more details. ## Loading Example Projects + Following the [installation procedure](https://github.com/MaximIntegratedTechSupport/VSCode-Maxim#installation) from the VSCode-Maxim readme will populate the MaximSDK's example projects with `.vscode` project folders. As such, they're ready to use "out of the box" with `File -> Open Folder`. However, it's recommended to copy the example projects to a location _outside_ of the SDK before using them. Keeping a copy of the original examples intact and untouched is always a good idea in case you need to go back and reference them later. @@ -310,20 +331,23 @@ However, it's recommended to copy the example projects to a location _outside_ o By default, the example projects are configured for the "EVKIT" evaluation platform for each target microcontroller. See [Project Settings](https://github.com/MaximIntegratedTechSupport/VSCode-Maxim#project-settings) in the readme if you need to change this. ## Injecting into Existing Source Code + Using example code as a reference is great, but what if we want to inject the VS Code setup into an existing project that's not in the MaximSDK? That's where the `Inject` folder in the VSCode-Maxim release package comes in. In the example below, we'll use the GPIO example _without_ any pre-existing VS Code project settings. The same procedure applies to any existing source code. ### 1 - Locate the Existing Project + For the sake of this example, a working copy of the GPIO example has been copied over into a separate folder. The contents of this GPIO example are as follows: ![GPIO Contents](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/gpio_contents.JPG) -
+--- ### 2 - Inject the VSCode-Maxim Files + Copy the _contents_ of the `Inject` folder from the VSCode-Maxim release package into the example project. ![GPIO Inject](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/inject_gpio.JPG) @@ -332,9 +356,10 @@ The contents of the project should now look something like this, with our `.vsco ![GPIO Injected](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/inject_gpio_finished.JPG) -
+--- ### 3 - Open the Project + The GPIO is now ready to be opened from within VS Code, and from here we'll follow a similar process as the one outlined in the "Getting Started" section of this User Guide. You'll open the project folder and configure `settings.json` for your target platform. However, since we're injecting into existing source code, we'll need to configure the Makefile as well. First things first... Launch VS Code. Open the project folder with `File > Open Folder...` and browse to the root directory of the project. @@ -345,57 +370,31 @@ VS Code should prompt for workspace trust. Select _Trust folder and enable all ![Workspace Trust Prompt](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/workspaceTrustPrompt.JPG) -
+--- ### 4 - Set the Target Platform & Reload + Open `settings.json` inside of the `.vscode` folder and configure the project settings for your target platform. See the [readme](https://github.com/MaximIntegratedTechSupport/VSCode-Maxim/blob/main/readme.md) if you are unsure what to set here. For example, settings for the MAX32670EVKIT would be... + * `"target":"MAX32670"` * `"board":"EvKit_V1"` -The rest of the settings should be suitable for most use-cases. The only other setting that might need a deeper look here is the `M4_OCD_interface_file`. The default `cmsis-dap.cfg` setting is suitable for use with a target platform that MAX32625PICO debugger. If your target platform has an integrated debugger (such as the MAX32670EVKIT), that's it. Additionally, most evaluation kits will usually come with an _external_ MAX32625PICO debugger, so this setting can be left at its default. In other cases, see [Advanced Config Options](https://github.com/MaximIntegratedTechSupport/VSCode-Maxim#advanced-config-options) in the readme. +The rest of the settings should be suitable for most use-cases. The only other setting that might need a deeper look here is the `M4_OCD_interface_file`. The default `cmsis-dap.cfg` setting is suitable for use with a target platform that MAX32625PICO debugger. If your target platform has an integrated debugger (such as the MAX32670EVKIT), that's it. Additionally, most evaluation kits will usually come with an _external_ MAX32625PICO debugger, so this setting can be left at its default. In other cases, see [Advanced Config Options](https://github.com/MaximIntegratedTechSupport/VSCode-Maxim#advanced-config-options) in the readme. ![Reload Window](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/settings.JPG) `CTRL+S` to save the changes to the file, and then reload the VS Code window with `CTRL + SHIFT + P` > `Developer: Reload Window`. This is necessary so that VS Code re-parses all file-paths for our new target platform. -
+--- ### 5 - Configure the Build System -With the project settings configured, everything should be working in the editor. The `main.c` file can be opened and Intellisense will work properly. -However, in order to actually build this project, we'll need to configure the build system to match the existing source code. This involves editing the core project `Makefile`. - -Open the `Makefile` in the editor. - -![Open Makefile](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/gpio_open_makefile.JPG) - -Here, we can see a "Main Configuration" section highlighting some common options that, collectively, handle the configuration needed for most projects. The first thing to check is that all the source files have been added to the `SRCS` variable. The GPIO project only has a single `main.c` file, and the Makefile comes pre-configured for a `main.c` file by default. So, we're good to go there. - -However, if we look at the `VPATH` and `IPATH` options we can see some modifications are required. `VPATH` controls where Make will look for the source files (.c) specified by the `SRCS` variable, and `IPATH` controls where it will look for header files (.h). The GPIO example has placed the `main.c` file right in the root directory of the project but the Makefile is only configured to look inside of a `src` folder by default. So we have two options: -1. Re-organize the existing source code to match the Makefile. - * Create a new folder inside of the project called `src` - * Drag `main.c` inside of that folder - - ![GPIO Reorganized](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/gpio_reorganized.JPG) - -or... - -2. Re-configure the Makefile to match the existing source code. - * Set `VPATH` and `IPATH` to `.` to search the root directory for source and header files. - - ![Makefile Edited](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/gpio_makefile_edited.JPG) - -
- -Take option 1 or 2. - -In this case, that's all the Makefile configuration that's needed for the project. See [Editing the Makefile](https://github.com/MaximIntegratedTechSupport/VSCode-Maxim#editing-the-makefile) in the readme for more details on other scenarios, such as adding additional source files, changing compiler flags, linking libraries, etc. +By default, the build system will look in the root directory of the project for source (.c) and header (.h) files. It will also search in the optional "src" (.c) and "include" (.h) directories. If the project follows a non-standard structure with additional folders and files, they will need to be added to the build using the `IPATH` and `VPATH` [Build Configuration](https://github.com/Analog-Devices-MSDK/VSCode-Maxim/tree/develop#build-configuration) Variables. ### 6 - Clean & Build the GPIO Example -With the Makefile configured, we're ready to build the project. -As always, with a new project it's best to run a `clean-periph` first to ensure we're starting from scratch. +As always, with a new project it's best to run a `clean-periph` first to ensure we're starting from scratch. Then, run a `build` task to compile the GPIO example. Remember - build tasks can be accessed via `Terminal > Run Build Task...` or `Ctrl+Shift+B`. @@ -409,53 +408,22 @@ Monitor the terminal for any errors as the Makefile builds the periphal drivers ![GPIO Build Products](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/gpio_build_products.JPG) -
+--- + +### 6 - Wrapping Up -### 7 - Wrapping Up From here, the example is ready to be flashed to the target microcontroller, debugged, edited, and explored further. This same process can be applied to injecting the VS Code setup into any example project or existing source code. To summarize, you will... + 1. Copy the contents of the `Inject` folder into the root directory of the existing project (optionally renaming any existing Makefile for later reference). 2. Open the root directory of the project folder from within VS Code 3. Configure `settings.json` to match your target platform -4. Configure the Build system by editing the Makefile and/or re-organizing the source code. - -
+4. Configure the Build system with project.mk if needed. +5. Clean-periph and rebuild. -## Adding Source Code -In the example below, we'll walk through adding in additional source code files. This program will have a more advanced project structure with sub-folders. This example will assume you've worked through the basics of project configuration and setup, and already have the project open in VS Code. - -Adding and editing additional source code in the VS Code editor is straightforward. Files can be created from within VS Code or dragged and dropped into the project explorer. However, the `Makefile` must be configured to add additional source code files to the build. - -There are some general rules that can be followed for configuring the `Makefile`: -* Make sure the any implementation files added (.c) are added to the list of files to compile with the `SRCS` variable. -* Make sure the `Makefile` knows where to find these implementation files. You control where it looks with the `VPATH` variable. -* Header files (.h) don't need to be explicitly added to the build like source files (.c) do, but the `Makefile` needs to know where to look for them. You control where it looks with the `IPATH` variable. - -These rules cover basic scenarios. See [Editing the Makefile](https://github.com/MaximIntegratedTechSupport/VSCode-Maxim#editing-the-makefile) in the readme for a more thorough list. - -Let's say I add the following source code in its own folder called `mylibrary`, with a `hellolibrary` header (.h) and implementation (.c) file. - -![Hello Library h](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/myproject_hellolibrary_h.JPG) - -![Hello Library c](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/myproject_hellolibrary_c.JPG) - -All this library does is contain a function called `myfunction` that prints a string to the console. Our main file can `#include` the header file and call `myfunction()`, which will print "Hello function!" to the console. - -![Hello Library main](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/myproject_hellolibrary_main.JPG) - -For this source code, we'll then modify the `Makefile` to add it to the build as follows: -* `SRCS += hellolibrary.c` to add the implementation file to the build -* `VPATH += ./src/mylibrary` so the `Makefile` knows where to find the implementation file -* `VPATH += ./src/mylibrary` so the `Makefile` knows where to find the header file. - -![Hello Library Makefile](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/myproject_hellolibrary_makefile.JPG) - -Now, when we run the `Build` task we can see the hellolibrary.c file added to the build successfully and compiled. The program is ready to be flashed to the microcontroller and debugged, where it will print "Hello function!" once to the serial port before exiting. - -![MyProject Build](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/myproject_build.JPG) - -
+--- ## Conclusion + Visual Studio Code is a great free code editor that, with the help of [VSCode-Maxim](https://github.com/MaximIntegratedTechSupport/VSCode-Maxim), can be used for embedded development with Maxim's Microcontroller toolchain. Having worked through this User Guide, you now hopefully have a good understanding of how Maxim's toolchain works, how it's integrated into VS Code, and how to leverage it to develop your own projects. From ca86f0f0b02eb634514d6d1e46e6015d12363b15 Mon Sep 17 00:00:00 2001 From: Jake Carter Date: Tue, 11 Oct 2022 13:38:43 -0500 Subject: [PATCH 52/55] Fix link --- userguide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/userguide.md b/userguide.md index 4ae8776..b6a5041 100644 --- a/userguide.md +++ b/userguide.md @@ -113,7 +113,7 @@ First, launch a terminal with `Terminal > New Terminal`. ![New Terminal](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/myproject_terminal.jpg) -Next, we'll run through the commands in the ["Testing the Setup"](https://github.com/MaximIntegratedTechSupport/VSCode-Maxim/blob/main/readme.md#testing-the-setup) of the readme to see that the toolchain is accessible. This is critical for everything else to work. The project settings in the `.vscode` folder will add the locations of the toolchain to the terminal's `PATH`, which will allow them to be accessed directly. +Next, we'll run through the commands in the ["Testing the Setup"](https://github.com/Analog-Devices-MSDK/VSCode-Maxim/wiki/Troubleshooting#testing-the-setup) of the wiki to see that the toolchain is accessible. This is critical for everything else to work. The project settings in the `.vscode` folder will add the locations of the toolchain to the terminal's `PATH`, which will allow them to be accessed directly. For example, running `make -v` in the terminal should output a version # for Make, as shown below. From 65af7c61800c7039956f3c1971ffd7915008668d Mon Sep 17 00:00:00 2001 From: Jake Carter Date: Mon, 17 Oct 2022 14:03:40 -0500 Subject: [PATCH 53/55] Capitalize filename --- maintain.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maintain.py b/maintain.py index de12444..5fdeadb 100644 --- a/maintain.py +++ b/maintain.py @@ -117,7 +117,7 @@ def release(version): shutil.copytree(Path("MaximSDK/New_Project"), r_dir.joinpath("New_Project"), dirs_exist_ok=True) print("Copying markdown files") - shutil.copy("readme.md", r_dir) + shutil.copy("README.md", r_dir) shutil.copy("userguide.md", r_dir) shutil.copy("LICENSE.md", r_dir) From 98030231237969a1ff0e60d218e18ece148042e8 Mon Sep 17 00:00:00 2001 From: Jake Carter Date: Thu, 10 Nov 2022 11:31:31 -0600 Subject: [PATCH 54/55] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f57d436..b6456f1 100644 --- a/README.md +++ b/README.md @@ -446,7 +446,7 @@ However, there is a precedence hierarchy that should be taken into consideration The precedence hierarchy for the value of a configuration variable is: -* **command-line > project.mk > environment variable > default value** +* **IDE/command-line > project.mk > environment variable > default value** ...meaning if a value is set on the command-line _and_ project.mk, the command-line value will take precedence. However, the ["override" directive](https://www.gnu.org/software/make/manual/make.html#Override-Directive) can be used in project.mk to give it max precedence. From e62f3d2dc95585f096ebce2d01f36cebba3ddf61 Mon Sep 17 00:00:00 2001 From: Jake Carter Date: Mon, 21 Nov 2022 13:30:47 -0600 Subject: [PATCH 55/55] Update installer package for v1.5.0 --- .../Inject/.vscode/c_cpp_properties.json | 2 +- .../VSCode-Maxim/Inject/.vscode/launch.json | 1 + .../VSCode-Maxim/Inject/.vscode/tasks.json | 2 +- .../data/Tools/VSCode-Maxim/Inject/Makefile | 371 ++++++++++-- .../data/Tools/VSCode-Maxim/Inject/project.mk | 13 + .../New_Project/.vscode/c_cpp_properties.json | 2 +- .../New_Project/.vscode/launch.json | 1 + .../New_Project/.vscode/tasks.json | 2 +- .../Tools/VSCode-Maxim/New_Project/Makefile | 371 ++++++++++-- .../Tools/VSCode-Maxim/New_Project/project.mk | 13 + .../data/Tools/VSCode-Maxim/README.md | 547 ++++++++++++++++++ .../data/Tools/VSCode-Maxim/userguide.md | 158 ++--- .../meta/installscript.js | 2 +- .../meta/package.xml | 4 +- 14 files changed, 1285 insertions(+), 204 deletions(-) create mode 100644 installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/Inject/project.mk create mode 100644 installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/New_Project/project.mk create mode 100644 installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/README.md diff --git a/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/Inject/.vscode/c_cpp_properties.json b/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/Inject/.vscode/c_cpp_properties.json index bd9d5ef..dfbed47 100644 --- a/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/Inject/.vscode/c_cpp_properties.json +++ b/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/Inject/.vscode/c_cpp_properties.json @@ -11,7 +11,7 @@ "intelliSenseMode": "gcc-arm", "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc.exe", "browse": { - "path": [ + "path": [ "${default}" ] } diff --git a/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/Inject/.vscode/launch.json b/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/Inject/.vscode/launch.json index 9c45b1d..fb021b9 100755 --- a/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/Inject/.vscode/launch.json +++ b/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/Inject/.vscode/launch.json @@ -46,6 +46,7 @@ { "text":"symbol-file build/${config:symbol_file}" }, { "text":"target remote localhost:3333" }, { "text":"monitor reset halt" }, + { "text":"set $pc=Reset_Handler"}, { "text":"b main" } ] }, diff --git a/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/Inject/.vscode/tasks.json b/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/Inject/.vscode/tasks.json index 3951f35..81917f6 100644 --- a/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/Inject/.vscode/tasks.json +++ b/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/Inject/.vscode/tasks.json @@ -4,7 +4,7 @@ { "label": "build", "type": "shell", - "command": "make -r -j 8 all TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", + "command": "make -r -j 8 TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", "group": "build", "problemMatcher": [] }, diff --git a/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/Inject/Makefile b/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/Inject/Makefile index aa6f3e8..f16fc0e 100644 --- a/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/Inject/Makefile +++ b/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/Inject/Makefile @@ -1,5 +1,5 @@ # /******************************************************************************* -# * Copyright (C) 2021 Maxim Integrated Products, Inc., All Rights Reserved. +# * Copyright (C) 2022 Maxim Integrated Products, Inc., All Rights Reserved. # * # * Permission is hereby granted, free of charge, to any person obtaining a # * copy of this software and associated documentation files (the "Software"), @@ -29,91 +29,360 @@ # * property whatsoever. Maxim Integrated Products, Inc. retains all # * ownership rights. # ******************************************************************************* +# */ - ############################################################################### -# Main configuration -# Below are the most commonly needed configuration options for this Makefile. -# You shouldn't need to touch anything else unless advanced configuration is required. +# ** Readme! ** +# Don't edit this file! This is the core Makefile for a MaximSDK +# project. The available configuration options can be overridden +# in "project.mk", on the command-line, or with system environment +# variables. -# Source files to compile for this project (add path to VPATH below) -SRCS += main.c +# See https://github.com/Analog-Devices-MSDK/VSCode-Maxim/tree/develop#build-configuration +# for more detailed instructions on how to use this system. -# Where to find source files for this project -VPATH += ./src +# The detailed instructions mentioned above are easier to read than +# this file, but the comments found in this file also outline the +# available configuration variables. This file is organized into +# sub-sections, some of which expose config variables. -# Where to find header files for this project -IPATH += ./src -# Set compiler flags -PROJ_CFLAGS+=-Wall # Enable warnings -PROJ_CFLAGS+=-DMXC_ASSERT_ENABLE # Enable assertion checking for development +# ******************************************************************************* +# Set the target microcontroller and board to compile for. -# Set compiler optimization level -MXC_OPTIMIZE_CFLAGS=-Og +# Every TARGET microcontroller has some Board Support Packages (BSPs) that are +# available for it under the MaximSDK/Libraries/Boards/TARGET folder. The BSP +# that gets selected is MaximSDK/Libraries/Boards/TARGET/BOARD. - ############################################################################### +# Configuration Variables: +# - TARGET : Override the default target microcontroller. Ex: TARGET=MAX78000 +# - BOARD : Override the default BSP (case sensitive). Ex: BOARD=EvKit_V1, BOARD=FTHR_RevA -# Set the MAKE variable. This eliminates issues with some setups -MAKE=make ifeq "$(TARGET)" "" -$(error target must be specified! Set the TARGET variable.) +# Default target microcontroller +TARGET := MAX78000 +TARGET_UC := MAX78000 +TARGET_LC := max78000 +else +# "TARGET" has been overridden in the environment or on the command-line. +# We need to calculate an upper and lowercase version of the part number, +# because paths on Linux and MacOS are case-sensitive. +TARGET_UC := $(subst m,M,$(subst a,A,$(subst x,X,$(TARGET)))) +TARGET_LC := $(subst M,m,$(subst A,a,$(subst X,x,$(TARGET)))) endif -# Default board used. This is overridden in settings.json -ifeq "$(BOARD)" "" -$(error board must be specified! Set the BOARD variable.) -endif +# Default board. +BOARD ?= EvKit_V1 + +# ******************************************************************************* +# Locate the MaximSDK + +# This Makefile needs to know where to find the MaximSDK, and the MAXIM_PATH variable +# should point to the root directory of the MaximSDK installation. Setting this manually +# is usually only required if you're working on the command-line. + +# If MAXIM_PATH is not specified, we assume the project still lives inside of the MaximSDK +# and move up from this project's original location. + +# Configuration Variables: +# - MAXIM_PATH : Tell this Makefile where to find the MaximSDK. Ex: MAXIM_PATH=C:/MaximSDK + -# Set output filename -ifeq "$(PROJECT)" "" -PROJECT=$(TARGET) +ifneq "$(MAXIM_PATH)" "" +# Sanitize MAXIM_PATH for backslashes +MAXIM_PATH := $(subst \,/,$(MAXIM_PATH)) +# Locate some other useful paths... +LIBS_DIR := $(abspath $(MAXIM_PATH)/Libraries) +CMSIS_ROOT := $(LIBS_DIR)/CMSIS endif -# Create Target name variables -TARGET_UC:=$(shell echo $(TARGET) | tr a-z A-Z) -TARGET_LC:=$(shell echo $(TARGET) | tr A-Z a-z) +# ******************************************************************************* +# Include project Makefile. We do this after formulating TARGET, BOARD, and MAXIM_PATH +# in case project.mk needs to reference those values. However, we also include +# this as early as possible in the Makefile so that it can append to or override +# the variables below. -# Select 'GCC' or 'IAR' compiler -COMPILER=GCC -# This is the path to the CMSIS root directory +include ./project.mk +$(info Loaded project.mk) + +# ******************************************************************************* +# Final path sanitization and re-calculation. No options here. + ifeq "$(MAXIM_PATH)" "" -LIBS_DIR=../../../Libraries +# MAXIM_PATH is still not defined... +DEPTH := ../../../ +MAXIM_PATH := $(abspath $(DEPTH)) +$(warning Warning: MAXIM_PATH is not set! Set MAXIM_PATH in your environment or in project.mk to clear this warning.) +$(warning Warning: Attempting to use $(MAXIM_PATH) calculated from relative path) else -LIBS_DIR=/$(subst \,/,$(subst :,,$(MAXIM_PATH))/Libraries) +# Sanitize MAXIM_PATH for backslashes +MAXIM_PATH := $(subst \,/,$(MAXIM_PATH)) endif -#LIBS_DIR = ./Libraries -CMSIS_ROOT=$(LIBS_DIR)/CMSIS +# Final recalculation of LIBS_DIR/CMSIS_ROOT +LIBS_DIR := $(abspath $(MAXIM_PATH)/Libraries) +CMSIS_ROOT := $(LIBS_DIR)/CMSIS + +# One final UC/LC check in case user set TARGET in project.mk +TARGET_UC := $(subst m,M,$(subst a,A,$(subst x,X,$(TARGET)))) +TARGET_LC := $(subst M,m,$(subst A,a,$(subst X,x,$(TARGET)))) -#Use this for other library make files so they are all based off the same as root as the project +export TARGET +export TARGET_UC +export TARGET_LC export CMSIS_ROOT +# TODO: Remove dependency on exports for these variables. + +# ******************************************************************************* +# Set up search paths, and auto-detect all source code on those paths. + +# The following paths are searched by default, where "./" is the project directory. +# ./ +# |- *.h +# |- *.c +# |-include (optional) +# |- *.h +# |-src (optional) +# |- *.c + +# Configuration Variables: +# - VPATH : Tell this Makefile to search additional locations for source (.c) files. +# You should use the "+=" operator with this option. +# Ex: VPATH += your/new/path +# - IPATH : Tell this Makefile to search additional locations for header (.h) files. +# You should use the "+=" operator with this option. +# Ex: VPATH += your/new/path +# - SRCS : Tell this Makefile to explicitly add a source (.c) file to the build. +# This is really only useful if you want to add a source file that isn't +# on any VPATH, in which case you can add the full path to the file here. +# You should use the "+=" operator with this option. +# Ex: SRCS += your/specific/source/file.c +# - AUTOSEARCH : Set whether this Makefile should automatically detect .c files on +# VPATH and add them to the build. This is enabled by default. Set +# to 0 to disable. If autosearch is disabled, source files must be +# manually added to SRCS. +# Ex: AUTOSEARCH = 0 + + +# Where to find source files for this project. +VPATH += . +VPATH += src +VPATH := $(VPATH) + +# Where to find header files for this project +IPATH += . +IPATH += include +IPATH := $(IPATH) + +AUTOSEARCH ?= 1 +ifeq ($(AUTOSEARCH), 1) +# Auto-detect all C source files on VPATH +SRCS += $(wildcard $(addsuffix /*.c, $(VPATH))) +endif + +# Collapse SRCS before passing them on to the next stage +SRCS := $(SRCS) + +# ******************************************************************************* +# Set the output filename + +# Configuration Variables: +# - PROJECT : Override the default output filename. Ex: PROJECT=MyProject + + +# The default value creates a file named after the target micro. Ex: MAX78000.elf +PROJECT ?= $(TARGET_LC) + +# ******************************************************************************* +# Compiler options + +# Configuration Variables: +# - MXC_OPTIMIZE_CFLAGS : Override the default compiler optimization level. +# Ex: MXC_OPTIMIZE_CFLAGS = -O2 +# - PROJ_CFLAGS : Add additional compiler flags to the build. +# You should use the "+=" operator with this option. +# Ex: PROJ_CFLAGS += -Wextra +# - MFLOAT_ABI : Set the floating point acceleration level. +# The only options are "hard", "soft", or "softfp". +# Ex: MFLOAT_ABI = hard +# - LINKERFILE : Override the default linkerfile. +# Ex: LINKERFILE = customlinkerfile.ld + + +# Select 'GCC' or 'IAR' compiler +ifeq "$(COMPILER)" "" +COMPILER := GCC +endif + +# Set default compiler optimization levels +ifeq "$(MAKECMDGOALS)" "release" +# Default optimization level for "release" builds (make release) +MXC_OPTIMIZE_CFLAGS ?= -O2 +DEBUG = 0 +endif + +ifeq ($(DEBUG),1) +# Default optimization level for debug builds (make DEBUG=1 ...) +# gcc.mk checks for this flag to add some additional debug +# info to the build, and should be used when you really need to +# debug. +MXC_OPTIMIZE_CFLAGS := -Og +endif + +# Fallback default optimizes for debugging as recommended +# by GNU for code-edit-debug cycles +# https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#Optimize-Options +MXC_OPTIMIZE_CFLAGS ?= -Og + +# Set compiler flags +PROJ_CFLAGS += -Wall # Enable warnings +PROJ_CFLAGS += -DMXC_ASSERT_ENABLE + +# Set hardware floating point acceleration. +# Options are: +# - hard +# - soft +# - softfp (default if MFLOAT_ABI is not set) +MFLOAT_ABI ?= softfp +# MFLOAT_ABI must be exported to other Makefiles, who check this too +export MFLOAT_ABI + +# Set the default linkerfile. Since the core Makefiles later add the location of Maxim's +# linkerfiles to VPATH, and the local project directory has also been added to VPATH, Make +# will search both locations for the specified linkerfile if it can't find it by its path alone. +# The result is that overriding LINKERFILE with the filename of one of Maxim's alternate linkerfiles +# (ex: LINKERFILE=max78000_arm.ld) will work just the same as LINKERFILE=mycustom.ld +# even if mycustom.ld lives locally to this project. + +ifeq "$(RISCV_CORE)" "" +# Default linkerfile is only specified for standard Arm-core projects. +# Otherwise, gcc_riscv.mk sets the appropriate riscv linkerfile. +LINKER = $(TARGET_LC).ld +LINKERFILE ?= $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/GCC/$(LINKER) +endif + +# This path contains system-level intialization files for the target micro. Add to the build. VPATH += $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source -# Point this variable to a linker file to override the default file -LINKER=$(TARGET_LC).ld -LINKERFILE=$(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/GCC/$(LINKER) +# ******************************************************************************* +# Secure Boot Tools (SBT) + +# This section integrates the Secure Boot Tools. It's intended for use with +# microcontrollers that have a secure bootloader. + +# Enabling SBT integration will add some special rules, such as "make sla", "make scpa", etc. + +# Configuration variables: +# SBT : Toggle SBT integration. Set to 1 to enable, or 0 +# to disable +# MAXIM_SBT_DIR : Specify the location of the SBT tool binaries. This defaults to +# Tools/SBT in the MaximSDK. The standalone SBT installer will override +# this via an environment variable. +# TARGET_SEC : Specify the part number to be passed into the SBT. This should match +# the secure variant part #. The default value will depend on TARGET. +# For example, TARGET=MAX32650 will result in TARGET_SEC=MAX32651, and +# the default selection happens in Tools/SBT/SBT-config. +# However, if there are multiple secure part #s for the target +# microcontroller this variable may need to be changed. + +SBT ?= 0 +ifeq ($(SBT), 1) +MAXIM_SBT_DIR ?= $(MAXIM_PATH)/Tools/SBT +MAXIM_SBT_DIR := $(subst \,/,$(MAXIM_SBT_DIR)) +# ^ Must sanitize path for \ on Windows, since this may come from an environment +# variable. + +export MAXIM_SBT_DIR # SBTs must have this environment variable defined to work + +# SBT-config.mk and SBT-rules.mk are included further down this Makefile. + +endif # SBT + +# ******************************************************************************* +# Default goal selection. This section allows you to override the default goal +# that will run if no targets are specified on the command-line. +# (ie. just running 'make' instead of 'make all') + +# Configuration variables: +# .DEFAULT_GOAL : Set the default goal if no targets were specified on the +# command-line +# ** "override" must be used with this variable. ** +# Ex: "override .DEFAULT_GOAL = mygoal" + +ifeq "$(.DEFAULT_GOAL)" "" +ifeq ($(SBT),1) +override .DEFAULT_GOAL := sla +else +override .DEFAULT_GOAL := all +endif +endif + +# Developer note: 'override' is used above for legacy Makefile compatibility. +# gcc.mk/gcc_riscv.mk need to hard-set 'all' internally, so this new system +# uses 'override' to come in over the top without breaking old projects. + +# It's also necessary to explicitly set MAKECMDGOALS... +ifeq "$(MAKECMDGOALS)" "" +MAKECMDGOALS:=$(.DEFAULT_GOAL) +endif + +# ******************************************************************************* +# Include SBT config. We need to do this here because it needs to know +# the current MAKECMDGOAL. +ifeq ($(SBT),1) +include $(MAXIM_PATH)/Tools/SBT/SBT-config.mk +endif + +# ******************************************************************************* +# Libraries -################################################################################ -# Include external library makefiles here +# This section offers "toggle switches" to include or exclude the libraries that +# are available in the MaximSDK. Set a configuration variable to 1 to include the +# library in the build, or 0 to exclude. -# Include the BSP -BOARD_DIR=$(LIBS_DIR)/Boards/$(TARGET_UC)/$(BOARD) -include $(BOARD_DIR)/board.mk +# Each library may also have its own library specific configuration variables. See +# Libraries/libs.mk for more details. -# Include the peripheral driver -PERIPH_DRIVER_DIR=$(LIBS_DIR)/PeriphDrivers -include $(PERIPH_DRIVER_DIR)/periphdriver.mk -export PERIPH_DRIVER_DIR +# Configuration variables: +# - LIB_BOARD : Include the Board-Support Package (BSP) library. (Enabled by default) +# - LIB_PERIPHDRIVERS : Include the peripheral driver library. (Enabled by default) +# - LIB_CMSIS_DSP : Include the CMSIS-DSP library. +# - LIB_CORDIO : Include the Cordio BLE library +# - LIB_FCL : Include the Free Cryptographic Library (FCL) +# - LIB_FREERTOS : Include the FreeRTOS and FreeRTOS-Plus-CLI libraries +# - LIB_LC3 : Include the Low Complexity Communication Codec (LC3) library +# - LIB_LITTLEFS : Include the "little file system" (littleFS) library +# - LIB_LWIP : Include the lwIP library +# - LIB_MAXUSB : Include the MAXUSB library +# - LIB_SDHC : Include the SDHC library + +include $(LIBS_DIR)/libs.mk + + +# ******************************************************************************* +# Rules -################################################################################ # Include the rules for building for this target. All other makefiles should be # included before this one. include $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/$(COMPILER)/$(TARGET_LC).mk +# Include the rules that integrate the SBTs. SBTs are a special case that must be +# include after the core gcc rules to extend them. +ifeq ($(SBT), 1) +include $(MAXIM_PATH)/Tools/SBT/SBT-rules.mk +endif + + +# Get .DEFAULT_GOAL working. +ifeq "$(MAKECMDGOALS)" "" +MAKECMDGOALS:=$(.DEFAULT_GOAL) +endif + + all: # Extend the functionality of the "all" recipe here + arm-none-eabi-size --format=berkeley $(BUILD_DIR)/$(PROJECT).elf libclean: $(MAKE) -f ${PERIPH_DRIVER_DIR}/periphdriver.mk clean.periph diff --git a/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/Inject/project.mk b/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/Inject/project.mk new file mode 100644 index 0000000..250f70c --- /dev/null +++ b/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/Inject/project.mk @@ -0,0 +1,13 @@ +# This file can be used to set build configuration +# variables. These variables are defined in a file called +# "Makefile" that is located next to this one. + +# For instructions on how to use this system, see +# https://github.com/Analog-Devices-MSDK/VSCode-Maxim/tree/develop#build-configuration + +# ********************************************************** + +# Add your config here! + + + diff --git a/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/New_Project/.vscode/c_cpp_properties.json b/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/New_Project/.vscode/c_cpp_properties.json index bd9d5ef..dfbed47 100644 --- a/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/New_Project/.vscode/c_cpp_properties.json +++ b/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/New_Project/.vscode/c_cpp_properties.json @@ -11,7 +11,7 @@ "intelliSenseMode": "gcc-arm", "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc.exe", "browse": { - "path": [ + "path": [ "${default}" ] } diff --git a/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/New_Project/.vscode/launch.json b/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/New_Project/.vscode/launch.json index 9c45b1d..fb021b9 100755 --- a/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/New_Project/.vscode/launch.json +++ b/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/New_Project/.vscode/launch.json @@ -46,6 +46,7 @@ { "text":"symbol-file build/${config:symbol_file}" }, { "text":"target remote localhost:3333" }, { "text":"monitor reset halt" }, + { "text":"set $pc=Reset_Handler"}, { "text":"b main" } ] }, diff --git a/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/New_Project/.vscode/tasks.json b/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/New_Project/.vscode/tasks.json index 3951f35..81917f6 100644 --- a/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/New_Project/.vscode/tasks.json +++ b/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/New_Project/.vscode/tasks.json @@ -4,7 +4,7 @@ { "label": "build", "type": "shell", - "command": "make -r -j 8 all TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", + "command": "make -r -j 8 TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", "group": "build", "problemMatcher": [] }, diff --git a/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/New_Project/Makefile b/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/New_Project/Makefile index aa6f3e8..f16fc0e 100644 --- a/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/New_Project/Makefile +++ b/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/New_Project/Makefile @@ -1,5 +1,5 @@ # /******************************************************************************* -# * Copyright (C) 2021 Maxim Integrated Products, Inc., All Rights Reserved. +# * Copyright (C) 2022 Maxim Integrated Products, Inc., All Rights Reserved. # * # * Permission is hereby granted, free of charge, to any person obtaining a # * copy of this software and associated documentation files (the "Software"), @@ -29,91 +29,360 @@ # * property whatsoever. Maxim Integrated Products, Inc. retains all # * ownership rights. # ******************************************************************************* +# */ - ############################################################################### -# Main configuration -# Below are the most commonly needed configuration options for this Makefile. -# You shouldn't need to touch anything else unless advanced configuration is required. +# ** Readme! ** +# Don't edit this file! This is the core Makefile for a MaximSDK +# project. The available configuration options can be overridden +# in "project.mk", on the command-line, or with system environment +# variables. -# Source files to compile for this project (add path to VPATH below) -SRCS += main.c +# See https://github.com/Analog-Devices-MSDK/VSCode-Maxim/tree/develop#build-configuration +# for more detailed instructions on how to use this system. -# Where to find source files for this project -VPATH += ./src +# The detailed instructions mentioned above are easier to read than +# this file, but the comments found in this file also outline the +# available configuration variables. This file is organized into +# sub-sections, some of which expose config variables. -# Where to find header files for this project -IPATH += ./src -# Set compiler flags -PROJ_CFLAGS+=-Wall # Enable warnings -PROJ_CFLAGS+=-DMXC_ASSERT_ENABLE # Enable assertion checking for development +# ******************************************************************************* +# Set the target microcontroller and board to compile for. -# Set compiler optimization level -MXC_OPTIMIZE_CFLAGS=-Og +# Every TARGET microcontroller has some Board Support Packages (BSPs) that are +# available for it under the MaximSDK/Libraries/Boards/TARGET folder. The BSP +# that gets selected is MaximSDK/Libraries/Boards/TARGET/BOARD. - ############################################################################### +# Configuration Variables: +# - TARGET : Override the default target microcontroller. Ex: TARGET=MAX78000 +# - BOARD : Override the default BSP (case sensitive). Ex: BOARD=EvKit_V1, BOARD=FTHR_RevA -# Set the MAKE variable. This eliminates issues with some setups -MAKE=make ifeq "$(TARGET)" "" -$(error target must be specified! Set the TARGET variable.) +# Default target microcontroller +TARGET := MAX78000 +TARGET_UC := MAX78000 +TARGET_LC := max78000 +else +# "TARGET" has been overridden in the environment or on the command-line. +# We need to calculate an upper and lowercase version of the part number, +# because paths on Linux and MacOS are case-sensitive. +TARGET_UC := $(subst m,M,$(subst a,A,$(subst x,X,$(TARGET)))) +TARGET_LC := $(subst M,m,$(subst A,a,$(subst X,x,$(TARGET)))) endif -# Default board used. This is overridden in settings.json -ifeq "$(BOARD)" "" -$(error board must be specified! Set the BOARD variable.) -endif +# Default board. +BOARD ?= EvKit_V1 + +# ******************************************************************************* +# Locate the MaximSDK + +# This Makefile needs to know where to find the MaximSDK, and the MAXIM_PATH variable +# should point to the root directory of the MaximSDK installation. Setting this manually +# is usually only required if you're working on the command-line. + +# If MAXIM_PATH is not specified, we assume the project still lives inside of the MaximSDK +# and move up from this project's original location. + +# Configuration Variables: +# - MAXIM_PATH : Tell this Makefile where to find the MaximSDK. Ex: MAXIM_PATH=C:/MaximSDK + -# Set output filename -ifeq "$(PROJECT)" "" -PROJECT=$(TARGET) +ifneq "$(MAXIM_PATH)" "" +# Sanitize MAXIM_PATH for backslashes +MAXIM_PATH := $(subst \,/,$(MAXIM_PATH)) +# Locate some other useful paths... +LIBS_DIR := $(abspath $(MAXIM_PATH)/Libraries) +CMSIS_ROOT := $(LIBS_DIR)/CMSIS endif -# Create Target name variables -TARGET_UC:=$(shell echo $(TARGET) | tr a-z A-Z) -TARGET_LC:=$(shell echo $(TARGET) | tr A-Z a-z) +# ******************************************************************************* +# Include project Makefile. We do this after formulating TARGET, BOARD, and MAXIM_PATH +# in case project.mk needs to reference those values. However, we also include +# this as early as possible in the Makefile so that it can append to or override +# the variables below. -# Select 'GCC' or 'IAR' compiler -COMPILER=GCC -# This is the path to the CMSIS root directory +include ./project.mk +$(info Loaded project.mk) + +# ******************************************************************************* +# Final path sanitization and re-calculation. No options here. + ifeq "$(MAXIM_PATH)" "" -LIBS_DIR=../../../Libraries +# MAXIM_PATH is still not defined... +DEPTH := ../../../ +MAXIM_PATH := $(abspath $(DEPTH)) +$(warning Warning: MAXIM_PATH is not set! Set MAXIM_PATH in your environment or in project.mk to clear this warning.) +$(warning Warning: Attempting to use $(MAXIM_PATH) calculated from relative path) else -LIBS_DIR=/$(subst \,/,$(subst :,,$(MAXIM_PATH))/Libraries) +# Sanitize MAXIM_PATH for backslashes +MAXIM_PATH := $(subst \,/,$(MAXIM_PATH)) endif -#LIBS_DIR = ./Libraries -CMSIS_ROOT=$(LIBS_DIR)/CMSIS +# Final recalculation of LIBS_DIR/CMSIS_ROOT +LIBS_DIR := $(abspath $(MAXIM_PATH)/Libraries) +CMSIS_ROOT := $(LIBS_DIR)/CMSIS + +# One final UC/LC check in case user set TARGET in project.mk +TARGET_UC := $(subst m,M,$(subst a,A,$(subst x,X,$(TARGET)))) +TARGET_LC := $(subst M,m,$(subst A,a,$(subst X,x,$(TARGET)))) -#Use this for other library make files so they are all based off the same as root as the project +export TARGET +export TARGET_UC +export TARGET_LC export CMSIS_ROOT +# TODO: Remove dependency on exports for these variables. + +# ******************************************************************************* +# Set up search paths, and auto-detect all source code on those paths. + +# The following paths are searched by default, where "./" is the project directory. +# ./ +# |- *.h +# |- *.c +# |-include (optional) +# |- *.h +# |-src (optional) +# |- *.c + +# Configuration Variables: +# - VPATH : Tell this Makefile to search additional locations for source (.c) files. +# You should use the "+=" operator with this option. +# Ex: VPATH += your/new/path +# - IPATH : Tell this Makefile to search additional locations for header (.h) files. +# You should use the "+=" operator with this option. +# Ex: VPATH += your/new/path +# - SRCS : Tell this Makefile to explicitly add a source (.c) file to the build. +# This is really only useful if you want to add a source file that isn't +# on any VPATH, in which case you can add the full path to the file here. +# You should use the "+=" operator with this option. +# Ex: SRCS += your/specific/source/file.c +# - AUTOSEARCH : Set whether this Makefile should automatically detect .c files on +# VPATH and add them to the build. This is enabled by default. Set +# to 0 to disable. If autosearch is disabled, source files must be +# manually added to SRCS. +# Ex: AUTOSEARCH = 0 + + +# Where to find source files for this project. +VPATH += . +VPATH += src +VPATH := $(VPATH) + +# Where to find header files for this project +IPATH += . +IPATH += include +IPATH := $(IPATH) + +AUTOSEARCH ?= 1 +ifeq ($(AUTOSEARCH), 1) +# Auto-detect all C source files on VPATH +SRCS += $(wildcard $(addsuffix /*.c, $(VPATH))) +endif + +# Collapse SRCS before passing them on to the next stage +SRCS := $(SRCS) + +# ******************************************************************************* +# Set the output filename + +# Configuration Variables: +# - PROJECT : Override the default output filename. Ex: PROJECT=MyProject + + +# The default value creates a file named after the target micro. Ex: MAX78000.elf +PROJECT ?= $(TARGET_LC) + +# ******************************************************************************* +# Compiler options + +# Configuration Variables: +# - MXC_OPTIMIZE_CFLAGS : Override the default compiler optimization level. +# Ex: MXC_OPTIMIZE_CFLAGS = -O2 +# - PROJ_CFLAGS : Add additional compiler flags to the build. +# You should use the "+=" operator with this option. +# Ex: PROJ_CFLAGS += -Wextra +# - MFLOAT_ABI : Set the floating point acceleration level. +# The only options are "hard", "soft", or "softfp". +# Ex: MFLOAT_ABI = hard +# - LINKERFILE : Override the default linkerfile. +# Ex: LINKERFILE = customlinkerfile.ld + + +# Select 'GCC' or 'IAR' compiler +ifeq "$(COMPILER)" "" +COMPILER := GCC +endif + +# Set default compiler optimization levels +ifeq "$(MAKECMDGOALS)" "release" +# Default optimization level for "release" builds (make release) +MXC_OPTIMIZE_CFLAGS ?= -O2 +DEBUG = 0 +endif + +ifeq ($(DEBUG),1) +# Default optimization level for debug builds (make DEBUG=1 ...) +# gcc.mk checks for this flag to add some additional debug +# info to the build, and should be used when you really need to +# debug. +MXC_OPTIMIZE_CFLAGS := -Og +endif + +# Fallback default optimizes for debugging as recommended +# by GNU for code-edit-debug cycles +# https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#Optimize-Options +MXC_OPTIMIZE_CFLAGS ?= -Og + +# Set compiler flags +PROJ_CFLAGS += -Wall # Enable warnings +PROJ_CFLAGS += -DMXC_ASSERT_ENABLE + +# Set hardware floating point acceleration. +# Options are: +# - hard +# - soft +# - softfp (default if MFLOAT_ABI is not set) +MFLOAT_ABI ?= softfp +# MFLOAT_ABI must be exported to other Makefiles, who check this too +export MFLOAT_ABI + +# Set the default linkerfile. Since the core Makefiles later add the location of Maxim's +# linkerfiles to VPATH, and the local project directory has also been added to VPATH, Make +# will search both locations for the specified linkerfile if it can't find it by its path alone. +# The result is that overriding LINKERFILE with the filename of one of Maxim's alternate linkerfiles +# (ex: LINKERFILE=max78000_arm.ld) will work just the same as LINKERFILE=mycustom.ld +# even if mycustom.ld lives locally to this project. + +ifeq "$(RISCV_CORE)" "" +# Default linkerfile is only specified for standard Arm-core projects. +# Otherwise, gcc_riscv.mk sets the appropriate riscv linkerfile. +LINKER = $(TARGET_LC).ld +LINKERFILE ?= $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/GCC/$(LINKER) +endif + +# This path contains system-level intialization files for the target micro. Add to the build. VPATH += $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source -# Point this variable to a linker file to override the default file -LINKER=$(TARGET_LC).ld -LINKERFILE=$(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/GCC/$(LINKER) +# ******************************************************************************* +# Secure Boot Tools (SBT) + +# This section integrates the Secure Boot Tools. It's intended for use with +# microcontrollers that have a secure bootloader. + +# Enabling SBT integration will add some special rules, such as "make sla", "make scpa", etc. + +# Configuration variables: +# SBT : Toggle SBT integration. Set to 1 to enable, or 0 +# to disable +# MAXIM_SBT_DIR : Specify the location of the SBT tool binaries. This defaults to +# Tools/SBT in the MaximSDK. The standalone SBT installer will override +# this via an environment variable. +# TARGET_SEC : Specify the part number to be passed into the SBT. This should match +# the secure variant part #. The default value will depend on TARGET. +# For example, TARGET=MAX32650 will result in TARGET_SEC=MAX32651, and +# the default selection happens in Tools/SBT/SBT-config. +# However, if there are multiple secure part #s for the target +# microcontroller this variable may need to be changed. + +SBT ?= 0 +ifeq ($(SBT), 1) +MAXIM_SBT_DIR ?= $(MAXIM_PATH)/Tools/SBT +MAXIM_SBT_DIR := $(subst \,/,$(MAXIM_SBT_DIR)) +# ^ Must sanitize path for \ on Windows, since this may come from an environment +# variable. + +export MAXIM_SBT_DIR # SBTs must have this environment variable defined to work + +# SBT-config.mk and SBT-rules.mk are included further down this Makefile. + +endif # SBT + +# ******************************************************************************* +# Default goal selection. This section allows you to override the default goal +# that will run if no targets are specified on the command-line. +# (ie. just running 'make' instead of 'make all') + +# Configuration variables: +# .DEFAULT_GOAL : Set the default goal if no targets were specified on the +# command-line +# ** "override" must be used with this variable. ** +# Ex: "override .DEFAULT_GOAL = mygoal" + +ifeq "$(.DEFAULT_GOAL)" "" +ifeq ($(SBT),1) +override .DEFAULT_GOAL := sla +else +override .DEFAULT_GOAL := all +endif +endif + +# Developer note: 'override' is used above for legacy Makefile compatibility. +# gcc.mk/gcc_riscv.mk need to hard-set 'all' internally, so this new system +# uses 'override' to come in over the top without breaking old projects. + +# It's also necessary to explicitly set MAKECMDGOALS... +ifeq "$(MAKECMDGOALS)" "" +MAKECMDGOALS:=$(.DEFAULT_GOAL) +endif + +# ******************************************************************************* +# Include SBT config. We need to do this here because it needs to know +# the current MAKECMDGOAL. +ifeq ($(SBT),1) +include $(MAXIM_PATH)/Tools/SBT/SBT-config.mk +endif + +# ******************************************************************************* +# Libraries -################################################################################ -# Include external library makefiles here +# This section offers "toggle switches" to include or exclude the libraries that +# are available in the MaximSDK. Set a configuration variable to 1 to include the +# library in the build, or 0 to exclude. -# Include the BSP -BOARD_DIR=$(LIBS_DIR)/Boards/$(TARGET_UC)/$(BOARD) -include $(BOARD_DIR)/board.mk +# Each library may also have its own library specific configuration variables. See +# Libraries/libs.mk for more details. -# Include the peripheral driver -PERIPH_DRIVER_DIR=$(LIBS_DIR)/PeriphDrivers -include $(PERIPH_DRIVER_DIR)/periphdriver.mk -export PERIPH_DRIVER_DIR +# Configuration variables: +# - LIB_BOARD : Include the Board-Support Package (BSP) library. (Enabled by default) +# - LIB_PERIPHDRIVERS : Include the peripheral driver library. (Enabled by default) +# - LIB_CMSIS_DSP : Include the CMSIS-DSP library. +# - LIB_CORDIO : Include the Cordio BLE library +# - LIB_FCL : Include the Free Cryptographic Library (FCL) +# - LIB_FREERTOS : Include the FreeRTOS and FreeRTOS-Plus-CLI libraries +# - LIB_LC3 : Include the Low Complexity Communication Codec (LC3) library +# - LIB_LITTLEFS : Include the "little file system" (littleFS) library +# - LIB_LWIP : Include the lwIP library +# - LIB_MAXUSB : Include the MAXUSB library +# - LIB_SDHC : Include the SDHC library + +include $(LIBS_DIR)/libs.mk + + +# ******************************************************************************* +# Rules -################################################################################ # Include the rules for building for this target. All other makefiles should be # included before this one. include $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/$(COMPILER)/$(TARGET_LC).mk +# Include the rules that integrate the SBTs. SBTs are a special case that must be +# include after the core gcc rules to extend them. +ifeq ($(SBT), 1) +include $(MAXIM_PATH)/Tools/SBT/SBT-rules.mk +endif + + +# Get .DEFAULT_GOAL working. +ifeq "$(MAKECMDGOALS)" "" +MAKECMDGOALS:=$(.DEFAULT_GOAL) +endif + + all: # Extend the functionality of the "all" recipe here + arm-none-eabi-size --format=berkeley $(BUILD_DIR)/$(PROJECT).elf libclean: $(MAKE) -f ${PERIPH_DRIVER_DIR}/periphdriver.mk clean.periph diff --git a/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/New_Project/project.mk b/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/New_Project/project.mk new file mode 100644 index 0000000..250f70c --- /dev/null +++ b/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/New_Project/project.mk @@ -0,0 +1,13 @@ +# This file can be used to set build configuration +# variables. These variables are defined in a file called +# "Makefile" that is located next to this one. + +# For instructions on how to use this system, see +# https://github.com/Analog-Devices-MSDK/VSCode-Maxim/tree/develop#build-configuration + +# ********************************************************** + +# Add your config here! + + + diff --git a/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/README.md b/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/README.md new file mode 100644 index 0000000..b6456f1 --- /dev/null +++ b/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/README.md @@ -0,0 +1,547 @@ +# VSCode-Maxim + +_(If you're viewing this document from within Visual Studio Code you can press `CTRL+SHIFT+V` to open a Markdown preview window.)_ + +## Quick Links + +* [VSCode-Maxim Github](https://github.com/Analog-Devices-MSDK/VSCode-Maxim) +* [Wiki](https://github.com/Analog-Devices-MSDK/VSCode-Maxim/wiki) + * If it's not in the readme, check the wiki. + * If it's not in the wiki, open a ticket! + +## Introduction + +VSCode-Maxim is a set of [Visual Studio Code](https://code.visualstudio.com/) project configurations and utilities for enabling embedded development for [Analog Device's MSDK](https://github.com/Analog-Devices-MSDK/msdk) and the [MAX-series](https://www.maximintegrated.com/en/products/microcontrollers.html) microcontrollers. + +The following features are supported: + +* Code editing with intellisense down to the register level +* Code compilation with the ability to easily re-target a project for different microcontrollers and boards +* Flashing programs +* GUI and command-line debugging + +## Dependencies + +* [Visual Studio Code](https://code.visualstudio.com/) +* [C/C++ VSCode Extension](https://github.com/microsoft/vscode-cpptools) +* [Maxim Micros SDK](https://www.maximintegrated.com/content/maximintegrated/en/design/software-description.html/swpart=SFW0010820A) + +## Installation + +The steps below are also available in video form in "Understanding Artificial Intelligence Episode 8.5 - Visual Studio Code" [here](https://www.maximintegrated.com/en/products/microcontrollers/artificial-intelligence.html/tab4/vd_1_2eaktism#.YyDxHaE8U_Y.mailto). + +1. Download & install the Maxim Microcontrollers SDK for your OS from the links below. + * [Windows](https://www.maximintegrated.com/en/design/software-description.html/swpart=SFW0010820A) + * [Linux (Ubuntu)](https://www.maximintegrated.com/en/design/software-description.html/swpart=SFW0018720A) + * [MacOS](https://www.maximintegrated.com/en/design/software-description.html/swpart=SFW0018610A) + +2. Run the installer executable, and ensure that "Visual Studio Code Support" is enabled for your installation. + + ![Selected Components](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/installer_components.JPG) + +3. Finish the MaximSDK installation, taking note of where the MaximSDK was installed. + +4. Download & install Visual Studio Code for your OS [here](https://code.visualstudio.com/Download). + +5. Launch Visual Studio Code. + +6. Install the Microsoft [C/C++ extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools). + +7. Use `CTRL + SHIFT + P` (or `COMMAND + SHIFT + P` on MacOS) to open the developer prompt. + +8. Type "open settings json" and select the "Preferences: Open Settings (JSON)" option (_not_ the "Preferences: Open _Default_ Settings (JSON)"). This will open your user settings.json file in VS Code's editor. + + ![Open Settings JSON Command](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/open_settings_json.jpg) + +9. Add the entries below into your user settings.json file. + + ```json + { + // There may be other settings up here... + + "MAXIM_PATH":"C:/MaximSDK", // Set this to the installed location of the MaximSDK. Only use forward slashes '/' when setting this path! + "update.mode": "manual", + "extensions.autoUpdate": false, + + // There may be other settings down here... + } + ``` + +10. Save your changes to the file with `CTRL + S` and restart VS Code. + +11. That's it! You're ready to start using Visual Studio Code to develop with Maxim's Microcontrollers. The MaximSDK examples come pre-populated with .vscode project folders, and the `Tools/VSCode-Maxim` folder of the SDK contains documentation and templates. See [Usage](#usage) below for more details. + +## Usage + +This section covers basic usage of the VSCode-Maxim project files. For documentation on Visual Studio Code itself, please refer to the official docs [here](https://code.visualstudio.com/Docs). + +### Opening Projects + +Visual Studio Code is built around a "working directory" paradigm. The editor is always rooted in a working directory, and the main mechanism for changing that directory is `File -> Open Folder...`. + +![File -> Open Folder](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/file_openfolder.JPG) + +As a result, you'll notice that there is no "New Project" mechanism. A "project" in VS Code is simply a folder. It will look inside of the opened folder for a `.vscode` _sub_-folder to load project-specific settings from. + +A project that is configured for VS Code will have, at minimum, a .vscode sub-folder and a Makefile in its directory _(Note: You may need to enable viewing of hidden items in your file explorer to see the .vscode sub-folder)_. + +Ex: + +![Example Directory Contents](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/opening_projects_2.jpg) + +### Where to Find Projects + +The [Examples](https://github.com/Analog-Devices-MSDK/msdk/tree/main/Examples) in the MSDK come with with pre-configured .vscode project folders. These projects can be opened "out of the box", but it's good practice to copy example folders _outside_ of the MSDK so that the original copies are kept as clean references. The examples can be freely moved to any location _without a space in its path_. + +Additionally, empty project templates and a drag-and-drop folder for "injecting" a VSCode-Maxim project can be found under `Tools/VSCode-Maxim` in the MaximSDK installation. + +### Build Tasks + +Once a project is opened 4 available build tasks will become available via `Terminal > Run Build task...` or the shortcut `Ctrl+Shift+B`. These tasks are configured by the `.vscode/task.json` file. + +![Build Tasks Image](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/buildtasks.JPG) + +#### Build + +* Compiles the code with a `make all` command. +* Additional options are passed into Make on the command-line based on the project's settings.json file. +* The `./build` directory will be created and will contain the output binary, as well as all intermediary object files. + +#### Clean + +* Cleans the build output, removing the `./build` directory and all of its contents. + +#### Clean-Periph + +* This task is the same as 'clean', but it also removes the build output for Maxim's peripheral drivers. +* Use this if you would like to recompile the peripheral drivers from source on the next build. + +#### Flash + +* Launching this task automatically runs the `Build` task first. Then, it flashes the output binary to the microcontroller. +* It uses the GDB `load` and `compare-sections` commands, and handles launching an OpenOCD internally via a pipe connection. +* The flashed program will be halted until the microcontroller is reset, power cycled, or a debugger is connected. +* A debugger must be connected correctly to use this task. Refer to the datasheet of your microcontroller's evaluation board for instructions. + +#### Flash & Run + +* This is the same as the `Flash` task, but it also will launch execution of the program once flashing is complete. + +#### Erase Flash + +* Completely erases all of the application code in the flash memory bank. +* Once complete, the target microcontroller will be effectively "blank". +* This can be useful for recovering from Low-Power (LP) lockouts, bad firmware, etc. + +### Debugging + +![Debug Window](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/debugger.JPG) + +Debugging is enabled by Visual Studio Code's integrated debugger. Launch configurations can be found in the `.vscode/launch.json` file. + +* Note: **Flashing does not happen automatically when launching the debugger.** Run the "Flash" [build task](#build-tasks) for your program _before_ debugging. + +#### Debugger Limitations + +In general, Maxim's microcontrollers have the following debugger limitations at the hardware level: + +* The debugger can not be connected _while_ the device is in reset. + +* The device can not be debugged while the device is in Sleep, Low Power Mode, Micro Power Mode, Standby, Backup, or Shutdown mode. These modes shut down the SWD clock. + +* These limitations can sometimes make the device difficult or impossible to connect to if firmware has locked out the debugger. In such cases, the ["Erase Flash"](#erase-flash) task can be used to recover the part. + +#### Launching the Debugger + +1. Attach your debugger to the SWD port on the target microcontroller. (Refer to the datasheet of your evaluation board for instructions on connecting a debugger) + +2. Flash the program to the microcontroller with the "Flash" [Build Task](#build-tasks). **Flashing does not happen automatically when launching the debugger.** + +3. Launch the debugger with `Run > Start Debugging`, with the shortcut `F5`, or via the `Run and Debug` window (Ctrl + Shift + D) and the green "launch" arrow. + + ![Debug Tab](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/debugger_window.JPG) + +4. The debugger will launch a GDB client & OpenOCD server, reset the microcontroller, and should break on entry into `main`. + + ![Debugger Break on Main](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/debugger_breakmain.JPG) + +#### Using the Debugger + +* For full usage details, please refer to the [official VS Code debugger documentation](https://code.visualstudio.com/docs/editor/debugging). + +The main interface for the debugger is the debugger control bar: + +![Debugger Control Bar Image](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/debugger_bar.JPG) + +`Continue | Step Over | Step Into | Step Out | Restart | Stop` + +Breakpoints can be set by clicking in the space next to the line number in a source code file. A red dot indicates a line to break on. Breakpoints can be removed by clicking on them again. Ex: + +![Breakpoint](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/breakpoint.JPG) + +## Project Configuration + +### Project Settings + +`.vscode/settings.json` is the main project configuration file. Values set here are parsed into the other .json config files. + +**When a change is made to this file, VS Code should be reloaded with CTRL+SHIFT+P -> Reload Window (or alternatively restarted completely) to force a re-parse.** + +![Reload Window](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/reload_window.JPG) + +The default project configuration should work for most use cases as long as `"target"` and `"board"` are set correctly. + +Any field from `settings.json` can be referenced from any other config file (including itself) with `"${config:[fieldname]}"` + +The following configuration options are available: + +### Basic Config Options + +#### `"target"` + +* This sets the target microcontroller for the project. +* It sets the `TARGET` [Build Configuration](#build-configuration) variable. +* Supported values: + * `"MAX32520"` + * `"MAX32570"` + * `"MAX32650"` + * `"MAX32655"` + * `"MAX32660"` + * `"MAX32662"` + * `"MAX32665"` (for MAX32665-MAX32668) + * `"MAX32670"` + * `"MAX32672"` + * `"MAX32675"` + * `"MAX32680"` + * `"MAX32690"` + * `"MAX78000"` + * `"MAX78002"` + +#### `"board"` + +* This sets the target board for the project (ie. Evaluation Kit, Feather board, etc.) +* Supported values: + * ... can be found in the `Libraries/Boards` folder of the MaximSDK + * For example, the supported options for the MAX78000 are `"EvKit_V1"`, `"FTHR_RevA"`, and `"MAXREFDES178"`. + + ![MAX78000 Boards](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/78000_boards.JPG) + +### Advanced Config Options + +#### `"MAXIM_PATH"` + +* This option must point to the root installation directory of the MaximSDK. +* It should be placed in the _global_ user settings.json file during first-time VSCode-Maxim setup. See [Installation](#installation). + +#### `"terminal.integrated.env.[platform]:Path"` + +* This prepends the location of toolchain binaries to the system `Path` used by VSCode's integrated terminal. +* The Path is not sanitized by default, which means that the terminal inherits the system path. +* Don't touch unless you know what you're doing :) + +#### `"project_name"` + +* Sets the name of project. This is used in other config options such as `program_file`. +* Default value: `"${workspaceFolderBasename}"` + +#### `"program_file"` + +* Sets the name of the file to flash and debug. This is provided in case it's needed, but for most use cases should be left at its default. +* File extension must be included. +* Default value: `"${config:project_name}.elf"` + +#### `"symbol_file"` + +* Sets the name of the file that GDB will load debug symbols from. +* File extension must be included. +* Default value: `"${config:program_file}"` + +#### `"M4_OCD_interface_file"` + +* Sets the OpenOCD interface file to use to connect to the Arm M4 core. This should match the debugger being used for the M4 core. +* The `MaximSDK/Tools/OpenOCD/scripts/interface` folder is searched for the file specified by this setting. +* `.cfg` file extension must be included. +* Default value: `"cmsis-dap.cfg"` + +#### `"M4_OCD_target_file"` + +* Sets the OpenOCD target file to use for the Arm M4 core. This should match the target microcontroller. +* `.cfg` file extension must be included. +* The `MaximSDK/Tools/OpenOCD/scripts/target` folder is searched for the file specified by this setting. +* Default value: `"${config:target}.cfg"` + +#### `"RV_OCD_interface_file"` + +* Sets the OpenOCD interface file to use to connect to the RISC-V core. This should match the debugger being used for the RISC-V core. +* The `MaximSDK/Tools/OpenOCD/scripts/interface` folder is searched for the file specified by this setting. +* `.cfg` file extension must be included. +* Default value: `"ftdi/olimex-arm-usb-ocd-h.cfg"` + +#### `"RV_OCD_target_file"` + +* Sets the OpenOCD target file to use for the RISC-V core. +* The `MaximSDK/Tools/OpenOCD/scripts/target` folder is searched for the file specified by this setting. +* `.cfg` file extension must be included. +* Default value: `"${config:target}_riscv.cfg"` + +#### `"v_Arm_GCC"` + +* Sets the version of the Arm Embedded GCC to use, including toolchain binaries and the standard library version. +* This gets parsed into `ARM_GCC_path`. +* Default value: `"10.3"` + +#### `"v_xPack_GCC"` + +* Sets the version of the xPack RISC-V GCC to use. +* This gets parsed into `xPack_GCC_path`. +* Default value: `"10.2.0-1.2"` + +#### `"OCD_path"` + +* Where to find the OpenOCD. +* Default value: `"${config:MAXIM_PATH}/Tools/OpenOCD"` + +#### `"ARM_GCC_path"` + +* Where to find the Arm Embedded GCC Toolchain. +* Default value: `"${config:MAXIM_PATH}/Tools/GNUTools/${config:v_Arm_GCC}"` + +#### `"xPack_GCC_path"` + +* Where to find the RISC-V GCC Toolchain. +* Default value: `"${config:MAXIM_PATH}/Tools/xPack/riscv-none-embed-gcc/${config:v_xPack_GCC}"` + +#### `"Make_path"` + +* Where to find Make binaries (only used on Windows) +* Default value: `"${config:MAXIM_PATH}/Tools/MSYS2/usr/bin"` + +#### `"C_Cpp.default.includePath"` + +* Which paths to search to find header (.h) files. +* Does not recursively search by default. To recursively search, use `/**`. + +#### `"C_Cpp.default.browse.path"` + +* Which paths to search to find source (.c) files. +* Does not recursively search by default. To recursively search, use `/**`. + +#### `"C_Cpp.default.defines"` + +* Sets the compiler definitions to use for the intellisense engine. +* Most definitions should be defined in header files, but if a definition is missing it can be entered here to get the intellisense engine to recognize it. + +### Setting Search Paths for Intellisense + +VS Code's intellisense engine must be told where to find the header files for your source code. By default, Maxim's perpiheral drivers, the C standard libraries, and all of the sub-directories of the workspace will be searched for header files to use with Intellisense. If VS Code throws an error on an `#include` statement (and the file exists), then a search path is most likely missing. + +To add additional search paths : + +1. Open the `.vscode/settings.json` file. + +2. Add the include path(s) to the `C_Cpp.default.includePath` list. The paths set here should contain header files, and will be searched by the Intellisense engine and when using "Go to Declaration" in the editor. + +3. Add the path(s) to any relevant implementation files to the `C_Cpp.default.browse.path` list. This list contains the paths that will be searched when using "Go to Definition". + +## Build Configuration + +A project's build system is managed by two files found in the project's root directory. These files are used alongside the [GNU Make](https://www.gnu.org/software/make/) program (which is a part of the MaximSDK toolchain) to locate and build a project's source code for the correct microcontroller. + +* `Makefile` +* `project.mk` + +![Files are located in the root directory](img/projectmk.JPG) + +When the command... + +```shell +make +``` + +... is run, the program `make` will load settings from these two files. Then, it will use them to build the project's source code. VSCode-Maxim is a "wrapper" around this Makefile system. + +The file named `Makefile` is the "core" file for the project. It should not be edited directly. Instead, it offers a number of configuration variables that can be overridden in the `project.mk` file, on the command-line, in your system's environment, or via your IDE. It also comes with a default configuration that is suitable for most projects. + +### Default Build Behavior + +By default, the build system will auto-search the root project directory source code (`*.c`) and header files (`*.h`). The optional "include" and "src" directories are also searched if they exist. + +```shell +Root Project Directory +├─ project.mk +├─ Makefile +├─ *.h +├─ *.c +├─include # <-- Optional + └─ *.h +├─src # <-- Optional + └─ *.c +``` + +Additionally, the "core" `Makefile` will come pre-configured for a specific target microcontroller and Board Support Package (BSP). The default BSP will match the main EVKIT for the device. In VSCode-Maxim, the two [Basic Config Options](#basic-config-options) can be used to easily override the target microcontroller and BSP. These options are passed to `make` on the command-line when the ["Build" task](#build-tasks) is run. + +For more advanced build configuration, configuration variables should be used. + +### How to Set a Configuration Variable + +A configuration variable is a [Makefile variable](https://www.gnu.org/software/make/manual/make.html#Using-Variables), and therefore follows the same rules. However, they have been streamlined to be made much easier to use, so most of the official GNU Make documentation is only needed for advanced use-cases. + +To set a configuration variable, use the syntax... + +```Makefile +VARIABLE=VALUE +``` + +The `=` operater is used for _most_ configuration variables with a few exceptions (that are clearly documented) when a variable should contain a _list_ of values. In such cases, use the syntax... + +```Makefile +VARIABLE+=VALUE1 +VARIABLE+=VALUE2 +``` + +... to _add_ values to the list. + +In most cases, you should do this from inside of **project.mk**. + +For example, if I wanted to enable hardware floating-point acceleration for my project, I would use the `MFLOAT_ABI` configuration variable to set its value to `hard`. The contents of **project.mk** might then look as follows: + +(_Inside project.mk_) + +```Makefile +# This file can be used to set build configuration +# variables. These variables are defined in a file called +# "Makefile" that is located next to this one. + +# For instructions on how to use this system, see +# https://github.com/Analog-Devices-MSDK/VSCode-Maxim/tree/develop#build-configuration + +#BOARD=FTHR_RevA +# ^ For example, you can uncomment this line to make the +# project build for the "FTHR_RevA" board. + +# ********************************************************** + +MFLOAT_ABI=hard # Enable hardware floating point acceleration +``` + +It should also be noted that configuration variables can be set on the **command-line** as well. For example... + +```shell +make MFLOAT_ABI=hard +``` + +... will have the same effect. + +Additionally, **environment variables** can be used. For example (on linux)... + +```shell +export TARGET=MAX78000 +``` + +... will set all projects to build for the MAX78000. + +However, there is a precedence hierarchy that should be taken into consideration. + +### Precedence Hierarchy + +The precedence hierarchy for the value of a configuration variable is: + +* **IDE/command-line > project.mk > environment variable > default value** + +...meaning if a value is set on the command-line _and_ project.mk, the command-line value will take precedence. However, the ["override" directive](https://www.gnu.org/software/make/manual/make.html#Override-Directive) can be used in project.mk to give it max precedence. + +### Configuration Variables Table + +The following configuration variables are available. + +| Variable | Description | Example | Details | +|--- | --- | --- | ---| +**Target** +| `TARGET` | Set the target microcontroller | `TARGET=MAX78000` | +| `BOARD` | Set the Board Support Package (BSP) | `BOARD=FTHR_RevA` | Every microcontroller has a number of BSPs available for it that can be found in the `Libraries/Boards/TARGET` folder of the MaximSDK. When you change this option, it's usually a good idea to fully clean your project, then re-build. +**SDK** +| `MAXIM_PATH` | (Optional) Specify the location of the MaximSDK | `MAXIM_PATH=/path/to/MSDK` | This optional variable can be used to change where the Makefile looks for the MaximSDK. By default, the Makefile will attempt to locate the MaximSDK with a relative path moving "up" from its original location. This option is most useful when a project is moved _outside_ of the SDK and you're developing on the command-line, since VS Code and Eclipse will set this via an environment variable. It's also useful for re-targeting a project to point to the development repository. +| `CAMERA` | (Optional) Set the Camera drivers to use | `CAMERA=HM0360_MONO` | This option is only useful for the MAX78000 and MAX78002, and sets the camera drivers to use for the project. Permitted values are `HM01B0`, `HM0360_MONO`, `HM0360_COLOR`, `OV5642`, `OV7692` (default), or `PAG7920`. Camera drivers can be found in the `Libraries/MiscDrivers/Camera` folder of the MaximSDK. Depending on the selected camera, a compiler definition may be added to the build. See the `board.mk` Makefile in the active BSP for more details. +**Source Code** +| `VPATH` | Where to search for source (.c) files | `VPATH+=your/source/path` | **Use the `+=` operator with this option**. This controls where the Makefile will look for **source code** files. If `AUTOSEARCH` is enabled (which it is by default) this controls which paths will be searched. If `AUTOSEARCH` is disabled, this tells the Makefile where to look for the files specified by `SRCS`. +| `IPATH` | Where to search for header (.h) files | `IPATH+=your/include/path` | **Use the `+=` operator with this option**. This controls where the Makefile will look for **header** files. _Unlike_ the `VPATH` option, this is not related to `AUTOSEARCH`. Individual header files are _not_ ever manually added into the build. Instead, you only need to specify the _location_ of your header files. +| `AUTOSEARCH` | Automatically search for source (.c) files | `AUTOSEARCH=0` | Enable or disable the automatic detection of .c files on `VPATH` (enabled by default). Set to `0` to disable, or `1` to enable. If autosearch is disabled, source files must be manually added to `SRCS`. +| `SRCS` | List of source (.c) files to add to the build | `SRCS+=./my/other/source.c` | **Use the `+=` operator with this option**. All of the files in this list will be added to the build. If `AUTOSEARCH` is enabled, this is most useful for adding the full absolute path to a singular source file to selectively add to the build. If `AUTOSEARCH` is disabled, _all_ of the source files for the project must be added to `SRCS`, and they must also all be located on an entry in `VPATH`. Otherwise, a full path relative to the Makefile must be used. +| `PROJECT` | Set the output filename | `PROJECT=MyProject` | This controls the output filename of the build. File extensions should _not_ be set here since the output file format may vary depending on the build recipe. For VSCode-Maxim, you should use the [project_name](#project_name) advanced config option instead, which sets `PROJECT` on the command-line [Build Tasks](#build-tasks). +**Compiler** +| `MXC_OPTIMIZE_CFLAGS` | Set the optimization level | `MXC_OPTIMIZE_CFLAGS=-O2` | See [Optimize Options](https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html) for more details. Normal builds will default to `-Og`, which is good for debugging, while release builds will default to `-O2`. +| `PROJ_CFLAGS` | Add a compiler flag to the build | `PROJ_CFLAGS+=-Wextra`, `PROJ_CFLAGS+=-DMYDEFINE` | Compiler flags can be added with this option, including compiler definitions. For each value, the same syntax should be used as if the compiler flag was passed in via the command-line. These can include standard [GCC options](https://gcc.gnu.org/onlinedocs/gcc-10.4.0/gcc/Option-Summary.html#Option-Summary) and/or [ARM-specific](https://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html) options. +| `MFLOAT_ABI` | Set the floating point acceleration level | `MFLOAT_ABI=hard` | Sets the floating-point acceleration level. Permitted values are `hard`, `soft`, `softfp` (default). To enable full hardware acceleration instructions use `hard`, but keep in mind that _all_ libraries your source code uses must also be compiled with `hard`. If there is any conflict, you'll get a linker error. For more details, see `-mfloat-abi` under [ARM Options](https://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html). +**Linker** +| `LINKERFILE` | Set the linkerfile to use | `LINKERFILE=newlinker.ld` | You can use a different linkerfile with this option. The file should exists in `Libraries/CMSIS/Device/Maxim/TARGET/Source/GCC` in the MaximSDK, or it should be placed inside the root directory of the project. +**Libraries** +| `LIB_BOARD` | Include the BSP library (enabled by default) | `LIB_BOARD=0` | Inclusion of the Board-Support Package (BSP) library, which is enabled by default, can be toggled with this variable. This library contains important startup code specific to a microcontroller's evaluation platform, such as serial port initialization, power sequencing, external peripheral initalization, etc. Set to `0` to disable, or `1` to enable. +| `LIB_PERIPHDRIVERS` | Include the peripheral driver library (enabled by default) | `LIB_PERIPHDRIVERS=0` | The peripheral driver library can be toggled with this option. If disabled, you'll lose access to the higher-level driver functions but still have access to the register-level files. Set to `0` to disable, or `1` to enable. +| `LIB_CMSIS_DSP` | Include the CMSIS-DSP library | `LIB_CMSIS_DSP=1` | The [CMSIS-DSP library](https://www.keil.com/pack/doc/CMSIS/DSP/html/index.html) can be enabled with this option. Set to `0` to disable, or `1` to enable. +| `LIB_CORDIO` | Include the Cordio library | `LIB_CORDIO=1` | The Cordio BLE library can be included with this option. This is only applicable towards microcontrollers with an integrated BLE controller. +| `LIB_FCL` | Include the Free Cryptographic Library (FCL) | `LIB_FCL=1` | This option toggles the Free Cryptographic Library (FCL), which is a collection of software-implemented common cryptographic functions can be included with this option. Set to `0` to disable, or `1` to enable. +| `LIB_FREERTOS` | Include the FreeRTOS library | `LIB_FREERTOS=1` | The [FreeRTOS](https://freertos.org/) library can be enabled with this option, which is an open-source Real-Time Operating System (RTOS). Set to `0` to disable, or `1` to enable. +| `LIB_LC3` | Include the LC3 codec library | `LIB_LC3=1` | This option enables the inclusion of the Low Complexity Communication Codec (LC3), which is an efficient low latency audio codec. Set to `0` to disable, or `1` to enable. +| `LIB_LITTLEFS` | Include the littleFS library | `LIB_LITTLEFS=1` | This option toggles the ["Little File System"](https://github.com/littlefs-project/littlefs) library - a small filesystem library designed for microcontrollers. Set to `0` to disable, or `1` to enable. +| `LIB_LWIP` | Include the lwIP library | `LIB_LWIP=1` | | +| `LIB_MAXUSB` | Include the MaxUSB library | `LIB_MAXUSB=1` | This option toggles the inclusion of the MAXUSB library, which facilitates the use of the native USB peripherals on some microcontrollers. Set to `0` to disable, or `1` to enable. +| `LIB_SDHC` | Include the SDHC library | `LIB_SDHC=1` | This options toggles the Secure Digital High Capacity (SDHC) library, which can be used to interface with SD cards. Additionally, it enables the [FatFS](http://elm-chan.org/fsw/ff/00index_e.html) library, which implements a generic FAT filesystem. +**Secure Boot Tools (SBT)** +| `SBT` | Toggle SBT integration | `SBT=1` | Toggles integration with the [Secure Boot Tools (SBTs)](https://www.maximintegrated.com/en/design/technical-documents/userguides-and-manuals/7/7637.html). These are a suite of applications designed for use with microcontrollers that have secure bootloaders. When this is enabled, some additional rules become available such as `make sla` and `make scpa`. Set to `0` to disable or `1` to enable. +| `MAXIM_SBT_DIR` | Where to find the SBTs | `MAXIM_SBT_DIR=C:/MaximSBT` | This option can be used to manually specify the location of the SBTs. Usually, this is not necessary. By default, the `Tools/SBT` directory of the MaximSDK will be searched. If the [SBT installer](https://www.maximintegrated.com/en/design/software-description.html/swpart=SFW0015360C) is used, it will set the `MAXIM_SBT_DIR` environment variable to point to itself automatically. +| `TARGET_SEC` | Secure part number to use | `TARGET_SEC=MAX32651` | Some secure microcontrollers have multiple secure variants, and this option can be used to specify the variant to use with the SBTs. Defaults are intelligently selected, and can be found in `$(MAXIM_SBT_DIR)/SBT-config.mk` +| `SCP_PACKETS` | Where to build the scp_packets folder | | Defaults to `build/scp_packets` | +| `TEST_KEY` | Which test key to sign applications with | | Defaults to `$(MAXIM_SBT_DIR)/devices/$(TARGET_SEC)/keys/maximtestcrk.key`, which is the Maxim test key that can be used for development. + +## Project Creation + +### Option 1. Copying a Pre-Made Project + +Copying a pre-made example project is a great way to get rolling quickly, and is currently the recommended method for creating new projects. + +The release package for this project (Located at Tools/VSCode-Maxim in the MaximSDK) contains a `New_Project` folder designed for such purposes. Additionally, any of the VS Code-enabled Example projects can be copied from the SDK. + +1. Copy the existing project folder to an accessible location. This will be the location of your new project. + +2. (Optional) Rename the folder. For example, I might rename the folder to `MyProject`. + +3. Open the project in VS Code (`File -> Open Folder...`) + +4. Set your target microcontroller and board correctly. See [Basic Config Options](#basic-config-options) + +5. `CTRL+SHIFT+P -> Reload Window` to re-parse the project settings. + +6. That's it! The existing project is ready to build, debug, and modify. + +### Option 2 - Creating a Project from Scratch + +If you want to start from scratch, take this option. + +1. Create your project folder. For example, I might create a new project in a workspace folder with the path: `C:\Users\Jake.Carter\workspace\MyNewProject`. + +2. Copy the **contents** of the `Inject` folder into the project folder created in step 2. This includes a `.vscode` folder and a `Makefile`. In the example above, the contents of the 'MyProject' folder would be the following : + + ```shell + C:\Users\Jake.Carter\workspace\MyNewProject + +-- \.vscode + +-- Makefile + ``` + +3. Open the project in VS Code (`File -> Open Folder...`) + +4. Set your target microcontroller correctly. See [Basic Config Options](#basic-config-options). + +5. `CTRL+SHIFT+P -> Reload Window` to re-parse the project settings. + +6. Fundamentally, that's it. Your new empty project can now be opened with `File > Open Folder` from within VS Code. + +## Issue Tracker + +Bug reports, feature requests, and contributions are welcome via the [issues](https://github.com/MaximIntegratedTechSupport/VSCode-Maxim/issues) tracker on Github. + +New issues should contain _at minimum_ the following information: + +* Visual Studio Code version #s (see `Help -> About`) +* C/C++ Extension version # +* Target microcontroller and evaluation platform +* The projects `.vscode` folder and `Makefile` (where applicable). Standard compression formats such as `.zip`, `.rar`, `.tar.gz`, etc. are all acceptable. diff --git a/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/userguide.md b/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/userguide.md index c828d6b..b6a5041 100644 --- a/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/userguide.md +++ b/installer/com.maximintegrated.dist.vscodemaxim/data/Tools/VSCode-Maxim/userguide.md @@ -1,6 +1,7 @@ # How to Use Visual Studio Code with Maxim's Microcontrollers SDK (Windows & Linux) ## Table of Contents + * [Introduction](#introduction) * [De-Mystifying the SDK Toolchain](#de-mystifying-the-sdk-toolchain) * [Integrating the Toolchain](#integrating-the-toolchain) @@ -8,15 +9,16 @@ * [Referencing Example Code](#referencing-example-code) * [Loading Example Projects](#loading-example-projects) * [Injecting into Existing Source Code](#injecting-into-existing-source-code) -* [Adding Source Code](#adding-source-code) * [Conclusion](#conclusion) ## Introduction + Integrated Development Environments (IDEs) targeted at embedded systems and microcontroller development can come with a lot of overhead. They have a tendency to be bulky, unwieldy programs that can take up a lot of hard drive space, and when something isn't configured properly they can be a pain to troubleshoot. No one likes digging into project settings for hours trying to get their include paths working, troubleshooting five different configuration options just to link a library, or tracking a bug back down to project config option. [Visual Studio Code](https://code.visualstudio.com/) is a lightweight, powerful, and customizable editor that can serve as a great free alternative to the more traditional micro IDEs like Eclipse, Code-Composer Studio, IAR, Keil uVision, etc. This app note outlines step-by-step how to get started with [VSCode-Maxim](https://github.com/MaximIntegratedTechSupport/VSCode-Maxim), which is a collection of project configurations that integrate Maxim's Microcontrollers SDK into Visual Studio Code. ## De-Mystifying the SDK Toolchain + Maxim maintains a Software Development Kits (SDK) for microcontroller development called the "Maxim Micros SDK". The SDK contains a large number of components, such as register files, linker files, board-support packages (BSPs), peripheral drivers, example code, etc. This section will focus on one of the _core_ components of the SDK - the _toolchain_. Understanding the toolchain is important because this VSCode-Maxim project is essentially a "wrapper" around the toolchain. Let's take a look under the hood... @@ -24,13 +26,14 @@ Understanding the toolchain is important because this VSCode-Maxim project is es A [toolchain](https://en.wikipedia.org/wiki/Toolchain) is really just a collection of programs and typically includes compiler, linker, and debugger executables. It also may include utility programs and build systems to make using these lower-level programs more convenient. The main components of the SDK's Toolchain are: -* [Arm GNU Compiler Collection](https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm) (GCC) - located under `~\MaximSDK\Tools\GNUTools\bin` -* [Open On-Chip Debugger](http://openocd.org/) (OpenOCD) - located under `~\MaximSDK\Tools\OpenOCD` -* [GNU Make](https://www.gnu.org/software/make) - made available on Windows via MSYS2 and located under `~\MaximSDK\Tools\MinGW\msys\1.0\bin` + +* [Arm GNU Compiler Collection](https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm) (GCC) - located under `~/MaximSDK/Tools/GNUTools/10.3` +* [Open On-Chip Debugger](http://openocd.org/) (OpenOCD) - located under `~/MaximSDK/Tools/OpenOCD` +* [GNU Make](https://www.gnu.org/software/make) - made available on Windows via [MSYS2](https://www.msys2.org/) and located under `~/MaximSDK/Tools/MSYS2/usr/bin` GCC is used to compile source code but is rarely called directly. Instead, GCC is most frequently invoked in a list of directives collected into a _Makefile_. This list of directives is called a _recipe_. If you are new to Make, think of GCC as the hammer and Make as the builder who knows how to use it. You can tell Make to do a task (such as "make all" the source code) and Make will follow the instructions outlined in the Makefile's recipe to complete it. -The core Makefile for a target microcontroller can be found under `~\MaximSDK\Libraries\CMSIS\Device\Maxim\\Source\GCC` - see `gcc.mk`. This file tells Make exactly how to use GCC to compile code for that microcontroller. All projects can then have their own Makefile that builds off of this one by `include`-ing it. +Detailed documentation on the Makefile system can be found [here](https://github.com/Analog-Devices-MSDK/VSCode-Maxim/tree/develop#build-configuration). The important thing to note now is that every example project comes with a Makefile and project.mk file that manages GCC. They offer convenient configuration variables if needed and manage the source code for the project. Great - so source code is compiled into firmware binaries by Make using GCC. How is it flashed onto the microcontroller? That's where OpenOCD comes in. @@ -39,6 +42,7 @@ OpenOCD handles flashing firmware and opening a debugger _server_. It handles t In general, this is how things work at a low level. Integrated Development Environments (IDEs) such as Visual Studio Code have mechanisms for integrating toolchains so that these low-level steps can be abstracted away in a more convenient way. ## Integrating the Toolchain + Visual Studio Code provides the [Tasks](https://code.visualstudio.com/Docs/editor/tasks) interface for integrating external tools. To use the Maxim SDK toolchain via Tasks, the toolchain binaries must be made accessible from the command line. Additionally, the correct board and peripheral driver files for a target platform must be loaded for compilation and source code development. When those conditions are met, then Tasks can be created to conveniently implement the features that you would expect from an IDE: building, cleaning, flashing, etc. [VSCode-Maxim](https://github.com/MaximIntegratedTechSupport/VSCode-Maxim) handles this for you and offers project files that are configured for Maxim's SDK and toolchain. @@ -48,11 +52,13 @@ Let's get started setting it up and walking through some common use-cases. The ## Getting Started with VSCode-Maxim ### 1 - Install Software Requirements -First, follow the [installation instructions](https://github.com/MaximIntegratedTechSupport/VSCode-Maxim#installation) for your OS from the readme if you haven't already. This include installing software requirements, setting the `MAXIM_PATH` environment variable, and downloading the latest release of VSCode-Maxim to an accessible location. -
+First, follow the [installation instructions](https://github.com/MaximIntegratedTechSupport/VSCode-Maxim#installation) for your OS from the readme if you haven't already. This include installing software requirements and setting the `MAXIM_PATH` environment variable. + +--- ### 2 - Release Package Overview + The VSCode-Maxim release package should contain the following contents. Note: Releases between OS's/versions may differ _slightly_ from the screenshot below, but this should match in general... ![Release Contents](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/Release-contents.jpg) @@ -65,6 +71,7 @@ The VSCode-Maxim release package should contain the following contents. Note: R * `"userguide.md"` is this User Guide. ### 3 - Starter Project + In this section, we'll get hands on with the VSCode-Maxim starter project to see how it works. First, copy the "New_Project" folder from the VSCode-Maxim release package into an accessible location. You can also rename the folder if you'd like. For example, I've copied the folder to a `workspace` directory I created in my User folder below. I've also renamed the project to "MyProject". @@ -96,31 +103,34 @@ Now, VS Code should look something like this, where the template project has bee ![File opened](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/myproject_opened.jpg) -
+--- ### 4 - Verify Toolchain Access + At this point, the project is opened and ready to use and configure. Let's take a few steps on the integrated terminal to verify that things _are_ actually working correctly. First, launch a terminal with `Terminal > New Terminal`. ![New Terminal](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/myproject_terminal.jpg) -Next, we'll run through the commands in the ["Testing the Setup"](https://github.com/MaximIntegratedTechSupport/VSCode-Maxim/blob/main/readme.md#testing-the-setup) of the readme to see that the toolchain is accessible. This is critical for everything else to work. The project settings in the `.vscode` folder will add the locations of the toolchain to the terminal's `PATH`, which will allow them to be accessed directly. +Next, we'll run through the commands in the ["Testing the Setup"](https://github.com/Analog-Devices-MSDK/VSCode-Maxim/wiki/Troubleshooting#testing-the-setup) of the wiki to see that the toolchain is accessible. This is critical for everything else to work. The project settings in the `.vscode` folder will add the locations of the toolchain to the terminal's `PATH`, which will allow them to be accessed directly. For example, running `make -v` in the terminal should output a version # for Make, as shown below. ![Make Test](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/make_test.JPG) Run the other commands for OpenOCD, GCC, and GDB to verify that the integrated terminal has been configured correctly and the toolchain is in the right place. These should all run without error. + * `openocd -v` * `arm-none-eabi-gcc -v` * `arm-none-eabi-gdb -v` -If there _are_ any errors thrown by any of the commands above, first verify that you've followed the [installation instructions](https://github.com/MaximIntegratedTechSupport/VSCode-Maxim#installation) correctly. Problems are usually related to a missing or incorrect `MAXIM_PATH` environment variable and/or missing SDK components. Otherwise, see the [troubleshooting section](https://github.com/MaximIntegratedTechSupport/VSCode-Maxim/issues) of the readme. +If there _are_ any errors thrown by any of the commands above, first verify that you've followed the [installation instructions](https://github.com/MaximIntegratedTechSupport/VSCode-Maxim#installation) correctly. Problems are usually related to a missing or incorrect `MAXIM_PATH` environment variable and/or missing SDK components. Otherwise, see the [troubleshooting section](https://github.com/Analog-Devices-MSDK/VSCode-Maxim/wiki/Troubleshooting) of the wiki. -
+--- ### 4 - Set the Target Platform + With the tools verified as accessible from within VS Code, we can now start to configure the project for a specific microcontroller. In this case, we'll do some basic configuration of the project for the MAX32670EVKIT, but the same steps apply to any micro. @@ -131,10 +141,11 @@ Open `.vscode/settings.json`. This is the main configuration file, and you shou Set the `"target"` and `"board"` variables for your target platform. For example, for the MAX32670EVKIT I would set... + * `"target":"MAX32670"` * `"board":"EvKit_V1"` -The [Configuration](https://github.com/MaximIntegratedTechSupport/VSCode-Maxim#configuration) section of the readme will tell you the values that can be set here. In this case, we've changed the two most basic options: `"target"` and `"board"`. +The [Project Configuration](https://github.com/Analog-Devices-MSDK/VSCode-Maxim/tree/develop#project-configuration) section of the readme will tell you the values that can be set here. In this case, we've changed the two most basic options: `"target"` and `"board"`. ![Basic Config Options](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/readme_basicconfig.jpg) @@ -148,16 +159,18 @@ Next, reload the VS Code window. A reload is necessary after changing any optio Now VS Code is ready to edit, build, and debug source code for the target platform. -
+--- ### 5 - Opening main.c + Open `main.c`, which can be found in the `src` folder. Here we can see the source code for a simple "Hello world" program. -![main.c](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/main.JPG) +![main.c](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/main.JPG) -
+--- ### 6 - Clean the Program + First, let's ensure that we're starting from a clean slate. Open the build tasks menu with `Ctrl+Shift+B` or `Terminal > Run Build Task...` and select the "clean-periph" option. This cleans out the build products from the current project as well as the peripheral drivers in the SDK. With everything cleaned out, the next step will build everything from scratch. ![Cleaning the program](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/clean-periph.jpg) @@ -166,9 +179,10 @@ Selecting the `clean-periph` build task will launch the task in the integrated t ![Clean-periph Complete](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/clean-periph_complete.jpg) -
+--- ### 7 - Build the Program + Next, we'll build the source code. Open the build tasks menu again with `Ctrl+Shift+B` or `Terminal > Run Build Task...` @@ -193,9 +207,10 @@ This is a good time to (once again) re-iterate an important point: _All configu For now, take note of the fact that the example project comes pre-configured for a single `main.c` source file, and looks for all `.c` and `.h` files inside of the `src` directory. -
+--- ### 8 - Flash and Debug the Program + Now that we've seen the program build successfully, let's flash it onto the microcontroller and debug it. First, ensure that your microcontroller is powered on and connected to your PC through your debug adapter. The specifics of this will vary based on the platform you're using, but documentation can be found in the datasheet. On a platform with an integrated debugger, such as the [MAX32670EVKIT](https://datasheets.maximintegrated.com/en/ds/MAX32670EVKIT.pdf), this is as simple as plugging it in with a micro-usb cable. On platforms where the debug adapter is not integrated, you'll need to connect your debug adapter to the right debugger port and power the platform separately. @@ -212,12 +227,14 @@ Once the debugger connects it will break the program execution on entry into the ![Breakpoint Hit](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/breakpoint_hit.JPG) -
+--- ### 9 (optional) - Open a Serial Port to the Micro + Before we continue the program execution, you can optionally open up a serial port to the microcontroller to see the "Hello world!" message and count printed. Default serial communication settings are: + * BAUD : 115200 * Data : 8-bit * Parity : none @@ -232,9 +249,10 @@ From there, steps will be program-specific to the serial terminal you're using. ![TeraTerm](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/TeraTerm.JPG) -
+--- ### 10 - Continue the Program + Press `F5` or hit the continue button in the debugger menu to continue the program past the breakpoint. ![Continue button](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/continue_button.JPG) @@ -245,16 +263,17 @@ You should see the LED on your microcontroller blinking. If you have a terminal Feel free to play around in the debugger here (setting different breakpoints, watch variables, stepping into and out of functions, etc.) to get familiar. When you're ready, you can hit the stop button to quit debugging. -
+--- ### 11 - Wrapping Up + Here, we've gotten started with a basic project configuration, the available build tasks, and have flashed/debugged the template Hello World program. The `New_Project` project template is designed as a good re-usable starting point, and you can freely copy this project around and re-configure it for different target platforms. You should now have a good basic understanding of how VS Code works and how Maxim's toolchain is integrated. The next sections cover more advanced subjects. -
+--- ## Referencing Example Code @@ -269,6 +288,7 @@ Opening the GPIO example reveals the following contents: ![GPIO Contents](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/gpio_contents.JPG) There are a couple components inside the project: + * A `main.c` file with the example code * A project `Makefile` for building the example code * Eclipse configuration files and debugger profile (`.cproject`, `.project`, `GPIO.launch`) @@ -303,6 +323,7 @@ Using this method, you can quickly and easily reference example code for your ow Note: It's recommended to only use this method for _browsing/referencing_ example code. If you'd like to work with the example projects directly, it's recommended to copy them to an external location to keep the SDK's reference copy untouched. See the next section for more details. ## Loading Example Projects + Following the [installation procedure](https://github.com/MaximIntegratedTechSupport/VSCode-Maxim#installation) from the VSCode-Maxim readme will populate the MaximSDK's example projects with `.vscode` project folders. As such, they're ready to use "out of the box" with `File -> Open Folder`. However, it's recommended to copy the example projects to a location _outside_ of the SDK before using them. Keeping a copy of the original examples intact and untouched is always a good idea in case you need to go back and reference them later. @@ -310,20 +331,23 @@ However, it's recommended to copy the example projects to a location _outside_ o By default, the example projects are configured for the "EVKIT" evaluation platform for each target microcontroller. See [Project Settings](https://github.com/MaximIntegratedTechSupport/VSCode-Maxim#project-settings) in the readme if you need to change this. ## Injecting into Existing Source Code + Using example code as a reference is great, but what if we want to inject the VS Code setup into an existing project that's not in the MaximSDK? That's where the `Inject` folder in the VSCode-Maxim release package comes in. In the example below, we'll use the GPIO example _without_ any pre-existing VS Code project settings. The same procedure applies to any existing source code. ### 1 - Locate the Existing Project + For the sake of this example, a working copy of the GPIO example has been copied over into a separate folder. The contents of this GPIO example are as follows: ![GPIO Contents](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/gpio_contents.JPG) -
+--- ### 2 - Inject the VSCode-Maxim Files + Copy the _contents_ of the `Inject` folder from the VSCode-Maxim release package into the example project. ![GPIO Inject](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/inject_gpio.JPG) @@ -332,9 +356,10 @@ The contents of the project should now look something like this, with our `.vsco ![GPIO Injected](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/inject_gpio_finished.JPG) -
+--- ### 3 - Open the Project + The GPIO is now ready to be opened from within VS Code, and from here we'll follow a similar process as the one outlined in the "Getting Started" section of this User Guide. You'll open the project folder and configure `settings.json` for your target platform. However, since we're injecting into existing source code, we'll need to configure the Makefile as well. First things first... Launch VS Code. Open the project folder with `File > Open Folder...` and browse to the root directory of the project. @@ -345,57 +370,31 @@ VS Code should prompt for workspace trust. Select _Trust folder and enable all ![Workspace Trust Prompt](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/workspaceTrustPrompt.JPG) -
+--- ### 4 - Set the Target Platform & Reload + Open `settings.json` inside of the `.vscode` folder and configure the project settings for your target platform. See the [readme](https://github.com/MaximIntegratedTechSupport/VSCode-Maxim/blob/main/readme.md) if you are unsure what to set here. For example, settings for the MAX32670EVKIT would be... + * `"target":"MAX32670"` * `"board":"EvKit_V1"` -The rest of the settings should be suitable for most use-cases. The only other setting that might need a deeper look here is the `M4_OCD_interface_file`. The default `cmsis-dap.cfg` setting is suitable for use with a target platform that MAX32625PICO debugger. If your target platform has an integrated debugger (such as the MAX32670EVKIT), that's it. Additionally, most evaluation kits will usually come with an _external_ MAX32625PICO debugger, so this setting can be left at its default. In other cases, see [Advanced Config Options](https://github.com/MaximIntegratedTechSupport/VSCode-Maxim#advanced-config-options) in the readme. +The rest of the settings should be suitable for most use-cases. The only other setting that might need a deeper look here is the `M4_OCD_interface_file`. The default `cmsis-dap.cfg` setting is suitable for use with a target platform that MAX32625PICO debugger. If your target platform has an integrated debugger (such as the MAX32670EVKIT), that's it. Additionally, most evaluation kits will usually come with an _external_ MAX32625PICO debugger, so this setting can be left at its default. In other cases, see [Advanced Config Options](https://github.com/MaximIntegratedTechSupport/VSCode-Maxim#advanced-config-options) in the readme. ![Reload Window](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/settings.JPG) `CTRL+S` to save the changes to the file, and then reload the VS Code window with `CTRL + SHIFT + P` > `Developer: Reload Window`. This is necessary so that VS Code re-parses all file-paths for our new target platform. -
+--- ### 5 - Configure the Build System -With the project settings configured, everything should be working in the editor. The `main.c` file can be opened and Intellisense will work properly. -However, in order to actually build this project, we'll need to configure the build system to match the existing source code. This involves editing the core project `Makefile`. - -Open the `Makefile` in the editor. - -![Open Makefile](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/gpio_open_makefile.JPG) - -Here, we can see a "Main Configuration" section highlighting some common options that, collectively, handle the configuration needed for most projects. The first thing to check is that all the source files have been added to the `SRCS` variable. The GPIO project only has a single `main.c` file, and the Makefile comes pre-configured for a `main.c` file by default. So, we're good to go there. - -However, if we look at the `VPATH` and `IPATH` options we can see some modifications are required. `VPATH` controls where Make will look for the source files (.c) specified by the `SRCS` variable, and `IPATH` controls where it will look for header files (.h). The GPIO example has placed the `main.c` file right in the root directory of the project but the Makefile is only configured to look inside of a `src` folder by default. So we have two options: -1. Re-organize the existing source code to match the Makefile. - * Create a new folder inside of the project called `src` - * Drag `main.c` inside of that folder - - ![GPIO Reorganized](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/gpio_reorganized.JPG) - -or... - -2. Re-configure the Makefile to match the existing source code. - * Set `VPATH` and `IPATH` to `.` to search the root directory for source and header files. - - ![Makefile Edited](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/gpio_makefile_edited.JPG) - -
- -Take option 1 or 2. - -In this case, that's all the Makefile configuration that's needed for the project. See [Editing the Makefile](https://github.com/MaximIntegratedTechSupport/VSCode-Maxim#editing-the-makefile) in the readme for more details on other scenarios, such as adding additional source files, changing compiler flags, linking libraries, etc. +By default, the build system will look in the root directory of the project for source (.c) and header (.h) files. It will also search in the optional "src" (.c) and "include" (.h) directories. If the project follows a non-standard structure with additional folders and files, they will need to be added to the build using the `IPATH` and `VPATH` [Build Configuration](https://github.com/Analog-Devices-MSDK/VSCode-Maxim/tree/develop#build-configuration) Variables. ### 6 - Clean & Build the GPIO Example -With the Makefile configured, we're ready to build the project. -As always, with a new project it's best to run a `clean-periph` first to ensure we're starting from scratch. +As always, with a new project it's best to run a `clean-periph` first to ensure we're starting from scratch. Then, run a `build` task to compile the GPIO example. Remember - build tasks can be accessed via `Terminal > Run Build Task...` or `Ctrl+Shift+B`. @@ -409,53 +408,22 @@ Monitor the terminal for any errors as the Makefile builds the periphal drivers ![GPIO Build Products](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/gpio_build_products.JPG) -
+--- + +### 6 - Wrapping Up -### 7 - Wrapping Up From here, the example is ready to be flashed to the target microcontroller, debugged, edited, and explored further. This same process can be applied to injecting the VS Code setup into any example project or existing source code. To summarize, you will... + 1. Copy the contents of the `Inject` folder into the root directory of the existing project (optionally renaming any existing Makefile for later reference). 2. Open the root directory of the project folder from within VS Code 3. Configure `settings.json` to match your target platform -4. Configure the Build system by editing the Makefile and/or re-organizing the source code. - -
+4. Configure the Build system with project.mk if needed. +5. Clean-periph and rebuild. -## Adding Source Code -In the example below, we'll walk through adding in additional source code files. This program will have a more advanced project structure with sub-folders. This example will assume you've worked through the basics of project configuration and setup, and already have the project open in VS Code. - -Adding and editing additional source code in the VS Code editor is straightforward. Files can be created from within VS Code or dragged and dropped into the project explorer. However, the `Makefile` must be configured to add additional source code files to the build. - -There are some general rules that can be followed for configuring the `Makefile`: -* Make sure the any implementation files added (.c) are added to the list of files to compile with the `SRCS` variable. -* Make sure the `Makefile` knows where to find these implementation files. You control where it looks with the `VPATH` variable. -* Header files (.h) don't need to be explicitly added to the build like source files (.c) do, but the `Makefile` needs to know where to look for them. You control where it looks with the `IPATH` variable. - -These rules cover basic scenarios. See [Editing the Makefile](https://github.com/MaximIntegratedTechSupport/VSCode-Maxim#editing-the-makefile) in the readme for a more thorough list. - -Let's say I add the following source code in its own folder called `mylibrary`, with a `hellolibrary` header (.h) and implementation (.c) file. - -![Hello Library h](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/myproject_hellolibrary_h.JPG) - -![Hello Library c](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/myproject_hellolibrary_c.JPG) - -All this library does is contain a function called `myfunction` that prints a string to the console. Our main file can `#include` the header file and call `myfunction()`, which will print "Hello function!" to the console. - -![Hello Library main](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/myproject_hellolibrary_main.JPG) - -For this source code, we'll then modify the `Makefile` to add it to the build as follows: -* `SRCS += hellolibrary.c` to add the implementation file to the build -* `VPATH += ./src/mylibrary` so the `Makefile` knows where to find the implementation file -* `VPATH += ./src/mylibrary` so the `Makefile` knows where to find the header file. - -![Hello Library Makefile](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/myproject_hellolibrary_makefile.JPG) - -Now, when we run the `Build` task we can see the hellolibrary.c file added to the build successfully and compiled. The program is ready to be flashed to the microcontroller and debugged, where it will print "Hello function!" once to the serial port before exiting. - -![MyProject Build](https://raw.githubusercontent.com/MaximIntegratedTechSupport/VSCode-Maxim/main/img/myproject_build.JPG) - -
+--- ## Conclusion + Visual Studio Code is a great free code editor that, with the help of [VSCode-Maxim](https://github.com/MaximIntegratedTechSupport/VSCode-Maxim), can be used for embedded development with Maxim's Microcontroller toolchain. Having worked through this User Guide, you now hopefully have a good understanding of how Maxim's toolchain works, how it's integrated into VS Code, and how to leverage it to develop your own projects. diff --git a/installer/com.maximintegrated.dist.vscodemaxim/meta/installscript.js b/installer/com.maximintegrated.dist.vscodemaxim/meta/installscript.js index 0fa69b6..b9df166 100644 --- a/installer/com.maximintegrated.dist.vscodemaxim/meta/installscript.js +++ b/installer/com.maximintegrated.dist.vscodemaxim/meta/installscript.js @@ -23,7 +23,7 @@ Component.prototype.createOperations = function() Component.prototype.installationFinished = function() { - var tag = "v1.4.3"; + var tag = "v1.5.0"; var tag_url = "https://github.com/MaximIntegratedTechSupport/VSCode-Maxim/tree/" + tag; var release_url = "https://github.com/MaximIntegratedTechSupport/VSCode-Maxim/releases/tag/" + tag; diff --git a/installer/com.maximintegrated.dist.vscodemaxim/meta/package.xml b/installer/com.maximintegrated.dist.vscodemaxim/meta/package.xml index afc42dc..e2e2318 100644 --- a/installer/com.maximintegrated.dist.vscodemaxim/meta/package.xml +++ b/installer/com.maximintegrated.dist.vscodemaxim/meta/package.xml @@ -1,9 +1,9 @@ Visual Studio Code Support Project files, templates, and documentation for integrating Visual Studio Code and the MaximSDK. Example projects come pre-populated with .vscode project folders, and this package contains information on how to use them. It installs to "Tools/VSCode-Maxim". - 2022-08-01 + 2022-11-21 net.sourceforge.openocd, net.launchpad.gcc.arm.embedded, net.launchpad.gcc.riscv.embedded, com.maximintegrated.libraries.periphdrivers - 1.4.3 + 1.5.0 1 \ No newline at end of file