PES4 / Mbed OS Queue_02
Committer:
demayer
Date:
Sat Mar 28 15:28:19 2020 +0000
Revision:
0:6bf0743ece18
IMU Thread with an event-queue running parallel to handle tasks like a 5 times blinking LED. Button with interrupt detected.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
demayer 0:6bf0743ece18 1 """
demayer 0:6bf0743ece18 2 mbed SDK
demayer 0:6bf0743ece18 3 Copyright (c) 2011-2013 ARM Limited
demayer 0:6bf0743ece18 4
demayer 0:6bf0743ece18 5 Licensed under the Apache License, Version 2.0 (the "License");
demayer 0:6bf0743ece18 6 you may not use this file except in compliance with the License.
demayer 0:6bf0743ece18 7 You may obtain a copy of the License at
demayer 0:6bf0743ece18 8
demayer 0:6bf0743ece18 9 http://www.apache.org/licenses/LICENSE-2.0
demayer 0:6bf0743ece18 10
demayer 0:6bf0743ece18 11 Unless required by applicable law or agreed to in writing, software
demayer 0:6bf0743ece18 12 distributed under the License is distributed on an "AS IS" BASIS,
demayer 0:6bf0743ece18 13 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
demayer 0:6bf0743ece18 14 See the License for the specific language governing permissions and
demayer 0:6bf0743ece18 15 limitations under the License.
demayer 0:6bf0743ece18 16 """
demayer 0:6bf0743ece18 17 from json import load
demayer 0:6bf0743ece18 18 from os.path import join, dirname
demayer 0:6bf0743ece18 19 from os import listdir
demayer 0:6bf0743ece18 20 from argparse import ArgumentParser, ArgumentTypeError
demayer 0:6bf0743ece18 21 from tools.toolchains import TOOLCHAINS
demayer 0:6bf0743ece18 22 from tools.targets import TARGET_NAMES, Target, update_target_data
demayer 0:6bf0743ece18 23 from tools.utils import argparse_force_uppercase_type, \
demayer 0:6bf0743ece18 24 argparse_lowercase_hyphen_type, argparse_many, \
demayer 0:6bf0743ece18 25 argparse_filestring_type, args_error, argparse_profile_filestring_type,\
demayer 0:6bf0743ece18 26 argparse_deprecate
demayer 0:6bf0743ece18 27
demayer 0:6bf0743ece18 28 FLAGS_DEPRECATION_MESSAGE = "Please use the --profile argument instead.\n"\
demayer 0:6bf0743ece18 29 "Documentation may be found in "\
demayer 0:6bf0743ece18 30 "docs/Toolchain_Profiles.md"
demayer 0:6bf0743ece18 31
demayer 0:6bf0743ece18 32 def get_default_options_parser(add_clean=True, add_options=True,
demayer 0:6bf0743ece18 33 add_app_config=False):
demayer 0:6bf0743ece18 34 """Create a new options parser with the default compiler options added
demayer 0:6bf0743ece18 35
demayer 0:6bf0743ece18 36 Keyword arguments:
demayer 0:6bf0743ece18 37 add_clean - add the clean argument?
demayer 0:6bf0743ece18 38 add_options - add the options argument?
demayer 0:6bf0743ece18 39 """
demayer 0:6bf0743ece18 40 parser = ArgumentParser()
demayer 0:6bf0743ece18 41
demayer 0:6bf0743ece18 42 targetnames = TARGET_NAMES
demayer 0:6bf0743ece18 43 targetnames.sort()
demayer 0:6bf0743ece18 44 toolchainlist = list(TOOLCHAINS)
demayer 0:6bf0743ece18 45 toolchainlist.sort()
demayer 0:6bf0743ece18 46
demayer 0:6bf0743ece18 47 parser.add_argument("-m", "--mcu",
demayer 0:6bf0743ece18 48 help=("build for the given MCU (%s)" %
demayer 0:6bf0743ece18 49 ', '.join(targetnames)),
demayer 0:6bf0743ece18 50 metavar="MCU")
demayer 0:6bf0743ece18 51
demayer 0:6bf0743ece18 52 parser.add_argument("-t", "--tool",
demayer 0:6bf0743ece18 53 help=("build using the given TOOLCHAIN (%s)" %
demayer 0:6bf0743ece18 54 ', '.join(toolchainlist)),
demayer 0:6bf0743ece18 55 metavar="TOOLCHAIN",
demayer 0:6bf0743ece18 56 type=argparse_many(
demayer 0:6bf0743ece18 57 argparse_force_uppercase_type(
demayer 0:6bf0743ece18 58 toolchainlist, "toolchain")))
demayer 0:6bf0743ece18 59
demayer 0:6bf0743ece18 60 parser.add_argument("--color",
demayer 0:6bf0743ece18 61 help="print Warnings, and Errors in color",
demayer 0:6bf0743ece18 62 action="store_true", default=False)
demayer 0:6bf0743ece18 63
demayer 0:6bf0743ece18 64 parser.add_argument("--cflags",
demayer 0:6bf0743ece18 65 type=argparse_deprecate(FLAGS_DEPRECATION_MESSAGE),
demayer 0:6bf0743ece18 66 help="Deprecated. " + FLAGS_DEPRECATION_MESSAGE)
demayer 0:6bf0743ece18 67
demayer 0:6bf0743ece18 68 parser.add_argument("--asmflags",
demayer 0:6bf0743ece18 69 type=argparse_deprecate(FLAGS_DEPRECATION_MESSAGE),
demayer 0:6bf0743ece18 70 help="Deprecated. " + FLAGS_DEPRECATION_MESSAGE)
demayer 0:6bf0743ece18 71
demayer 0:6bf0743ece18 72 parser.add_argument("--ldflags",
demayer 0:6bf0743ece18 73 type=argparse_deprecate(FLAGS_DEPRECATION_MESSAGE),
demayer 0:6bf0743ece18 74 help="Deprecated. " + FLAGS_DEPRECATION_MESSAGE)
demayer 0:6bf0743ece18 75
demayer 0:6bf0743ece18 76 if add_clean:
demayer 0:6bf0743ece18 77 parser.add_argument("-c", "--clean", action="store_true", default=False,
demayer 0:6bf0743ece18 78 help="clean the build directory")
demayer 0:6bf0743ece18 79
demayer 0:6bf0743ece18 80 if add_options:
demayer 0:6bf0743ece18 81 parser.add_argument("--profile", dest="profile", action="append",
demayer 0:6bf0743ece18 82 type=argparse_profile_filestring_type,
demayer 0:6bf0743ece18 83 help="Build profile to use. Can be either path to json" \
demayer 0:6bf0743ece18 84 "file or one of the default one ({})".format(", ".join(list_profiles())),
demayer 0:6bf0743ece18 85 default=[])
demayer 0:6bf0743ece18 86 if add_app_config:
demayer 0:6bf0743ece18 87 parser.add_argument("--app-config", default=None, dest="app_config",
demayer 0:6bf0743ece18 88 type=argparse_filestring_type,
demayer 0:6bf0743ece18 89 help="Path of an app configuration file (Default is to look for 'mbed_app.json')")
demayer 0:6bf0743ece18 90
demayer 0:6bf0743ece18 91 return parser
demayer 0:6bf0743ece18 92
demayer 0:6bf0743ece18 93 def list_profiles():
demayer 0:6bf0743ece18 94 """Lists available build profiles
demayer 0:6bf0743ece18 95
demayer 0:6bf0743ece18 96 Checks default profile directory (mbed-os/tools/profiles/) for all the json files and return list of names only
demayer 0:6bf0743ece18 97 """
demayer 0:6bf0743ece18 98 return [fn.replace(".json", "") for fn in listdir(join(dirname(__file__), "profiles")) if fn.endswith(".json")]
demayer 0:6bf0743ece18 99
demayer 0:6bf0743ece18 100 def extract_profile(parser, options, toolchain, fallback="develop"):
demayer 0:6bf0743ece18 101 """Extract a Toolchain profile from parsed options
demayer 0:6bf0743ece18 102
demayer 0:6bf0743ece18 103 Positional arguments:
demayer 0:6bf0743ece18 104 parser - parser used to parse the command line arguments
demayer 0:6bf0743ece18 105 options - The parsed command line arguments
demayer 0:6bf0743ece18 106 toolchain - the toolchain that the profile should be extracted for
demayer 0:6bf0743ece18 107 """
demayer 0:6bf0743ece18 108 profiles = []
demayer 0:6bf0743ece18 109 filenames = options.profile or [join(dirname(__file__), "profiles",
demayer 0:6bf0743ece18 110 fallback + ".json")]
demayer 0:6bf0743ece18 111 for filename in filenames:
demayer 0:6bf0743ece18 112 contents = load(open(filename))
demayer 0:6bf0743ece18 113 if toolchain not in contents:
demayer 0:6bf0743ece18 114 args_error(parser, ("argument --profile: toolchain {} is not"
demayer 0:6bf0743ece18 115 " supported by profile {}").format(toolchain,
demayer 0:6bf0743ece18 116 filename))
demayer 0:6bf0743ece18 117 profiles.append(contents)
demayer 0:6bf0743ece18 118
demayer 0:6bf0743ece18 119 return profiles
demayer 0:6bf0743ece18 120
demayer 0:6bf0743ece18 121 def mcu_is_enabled(parser, mcu):
demayer 0:6bf0743ece18 122 if "Cortex-A" in TARGET_MAP[mcu].core:
demayer 0:6bf0743ece18 123 args_error(
demayer 0:6bf0743ece18 124 parser,
demayer 0:6bf0743ece18 125 ("%s Will be supported in mbed OS 5.6. "
demayer 0:6bf0743ece18 126 "To use the %s, please checkout the mbed OS 5.4 release branch. "
demayer 0:6bf0743ece18 127 "See https://developer.mbed.org/platforms/Renesas-GR-PEACH/#important-notice "
demayer 0:6bf0743ece18 128 "for more information") % (mcu, mcu))
demayer 0:6bf0743ece18 129 return True
demayer 0:6bf0743ece18 130
demayer 0:6bf0743ece18 131 def extract_mcus(parser, options):
demayer 0:6bf0743ece18 132 try:
demayer 0:6bf0743ece18 133 if options.source_dir:
demayer 0:6bf0743ece18 134 for source_dir in options.source_dir:
demayer 0:6bf0743ece18 135 Target.add_extra_targets(source_dir)
demayer 0:6bf0743ece18 136 update_target_data()
demayer 0:6bf0743ece18 137 except KeyError:
demayer 0:6bf0743ece18 138 pass
demayer 0:6bf0743ece18 139 targetnames = TARGET_NAMES
demayer 0:6bf0743ece18 140 targetnames.sort()
demayer 0:6bf0743ece18 141 try:
demayer 0:6bf0743ece18 142 return argparse_many(argparse_force_uppercase_type(targetnames, "MCU"))(options.mcu)
demayer 0:6bf0743ece18 143 except ArgumentTypeError as exc:
demayer 0:6bf0743ece18 144 args_error(parser, "argument -m/--mcu: {}".format(str(exc)))
demayer 0:6bf0743ece18 145