Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
mbed.bat@9:480495caa078, 2020-10-21 (annotated)
- Committer:
- hudakz
- Date:
- Wed Oct 21 07:01:25 2020 +0000
- Revision:
- 9:480495caa078
- Parent:
- 8:66aa32957926
Mbed support for QtCreator IDE.
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| hudakz | 9:480495caa078 | 1 | #!/bin/bash |
| hudakz | 9:480495caa078 | 2 | |
| hudakz | 9:480495caa078 | 3 | # Mbed tool for the QtCreator IDE. |
| hudakz | 9:480495caa078 | 4 | |
| hudakz | 9:480495caa078 | 5 | # -------------------------------------------------------------------- |
| hudakz | 9:480495caa078 | 6 | # Default settings. You can modify them according to your system. |
| hudakz | 9:480495caa078 | 7 | MBED_SYS_PATH=~/src/arm/sys |
| hudakz | 9:480495caa078 | 8 | LIB_PATH=~/src/arm/lib |
| hudakz | 9:480495caa078 | 9 | OS=6 |
| hudakz | 9:480495caa078 | 10 | PROFILE=DEBUG |
| hudakz | 9:480495caa078 | 11 | PROJ_NAME=${PWD##*/} |
| hudakz | 9:480495caa078 | 12 | PORT=/dev/ttyACM0 |
| hudakz | 9:480495caa078 | 13 | |
| hudakz | 9:480495caa078 | 14 | # -------------------------------------------------------------------- |
| hudakz | 9:480495caa078 | 15 | # Mbed command parser. Sets bash variables based on the selected Mbed CLI options. |
| hudakz | 9:480495caa078 | 16 | # Ones parsing is complete the options and arguments can be passed to Mbed CLI or other programs. |
| hudakz | 9:480495caa078 | 17 | MACROS=() |
| hudakz | 9:480495caa078 | 18 | SRC_LIB_PATH=() |
| hudakz | 9:480495caa078 | 19 | while [[ $# -gt 0 ]] |
| hudakz | 9:480495caa078 | 20 | do |
| hudakz | 9:480495caa078 | 21 | key="$1" # Get the first token of the command line |
| hudakz | 9:480495caa078 | 22 | |
| hudakz | 9:480495caa078 | 23 | case $key in |
| hudakz | 9:480495caa078 | 24 | all|-f) # Flash target with binary. |
| hudakz | 9:480495caa078 | 25 | FLASH='-f' |
| hudakz | 9:480495caa078 | 26 | shift # past argument |
| hudakz | 9:480495caa078 | 27 | ;; |
| hudakz | 9:480495caa078 | 28 | |
| hudakz | 9:480495caa078 | 29 | -c|clean) # Clean files before building. |
| hudakz | 9:480495caa078 | 30 | CLEAN='-c' |
| hudakz | 9:480495caa078 | 31 | shift # past argument |
| hudakz | 9:480495caa078 | 32 | ;; |
| hudakz | 9:480495caa078 | 33 | |
| hudakz | 9:480495caa078 | 34 | |
| hudakz | 9:480495caa078 | 35 | -D|--macro) # Add macro. |
| hudakz | 9:480495caa078 | 36 | MACROS+=('-D '$2) |
| hudakz | 9:480495caa078 | 37 | shift # past argument |
| hudakz | 9:480495caa078 | 38 | shift # past value |
| hudakz | 9:480495caa078 | 39 | ;; |
| hudakz | 9:480495caa078 | 40 | |
| hudakz | 9:480495caa078 | 41 | -l) # Add library with relative path. |
| hudakz | 9:480495caa078 | 42 | SRC_LIB_PATH+=' --source '${LIB_PATH}/$2 |
| hudakz | 9:480495caa078 | 43 | shift # past argument |
| hudakz | 9:480495caa078 | 44 | shift # past value |
| hudakz | 9:480495caa078 | 45 | ;; |
| hudakz | 9:480495caa078 | 46 | |
| hudakz | 9:480495caa078 | 47 | -m) # Define target Micro-Controller Unit (MCU). |
| hudakz | 9:480495caa078 | 48 | MCU="$2" |
| hudakz | 9:480495caa078 | 49 | shift # past argument |
| hudakz | 9:480495caa078 | 50 | shift # past value |
| hudakz | 9:480495caa078 | 51 | ;; |
| hudakz | 9:480495caa078 | 52 | |
| hudakz | 9:480495caa078 | 53 | -os) # Select Mbed Operating System (2 or other). |
| hudakz | 9:480495caa078 | 54 | OS="$2" |
| hudakz | 9:480495caa078 | 55 | shift # past argument |
| hudakz | 9:480495caa078 | 56 | shift # past value |
| hudakz | 9:480495caa078 | 57 | ;; |
| hudakz | 9:480495caa078 | 58 | |
| hudakz | 9:480495caa078 | 59 | -p|--port) # Select serial port. |
| hudakz | 9:480495caa078 | 60 | PORT="$2" |
| hudakz | 9:480495caa078 | 61 | shift # past argument |
| hudakz | 9:480495caa078 | 62 | shift # past value |
| hudakz | 9:480495caa078 | 63 | ;; |
| hudakz | 9:480495caa078 | 64 | |
| hudakz | 9:480495caa078 | 65 | -r|--release) # Select release build profile |
| hudakz | 9:480495caa078 | 66 | PROFILE=RELEASE |
| hudakz | 9:480495caa078 | 67 | shift # past argument |
| hudakz | 9:480495caa078 | 68 | ;; |
| hudakz | 9:480495caa078 | 69 | |
| hudakz | 9:480495caa078 | 70 | *) # Take additional options and pass them to Mbed CLI. |
| hudakz | 9:480495caa078 | 71 | ARGS+=("$key ") |
| hudakz | 9:480495caa078 | 72 | shift # past argument |
| hudakz | 9:480495caa078 | 73 | ;; |
| hudakz | 9:480495caa078 | 74 | esac |
| hudakz | 9:480495caa078 | 75 | done |
| hudakz | 9:480495caa078 | 76 | |
| hudakz | 9:480495caa078 | 77 | # -------------------------------------------------------------------- |
| hudakz | 9:480495caa078 | 78 | # Set path to the selected Mbed OS tools and profile. |
| hudakz | 9:480495caa078 | 79 | if [ ${OS} == 2 ] |
| hudakz | 9:480495caa078 | 80 | then |
| hudakz | 9:480495caa078 | 81 | GCC_ARM_PATH=/opt/gcc-arm-none-eabi-6-2017-q2-update |
| hudakz | 9:480495caa078 | 82 | MBED_OS_PATH=${MBED_SYS_PATH}/mbed |
| hudakz | 9:480495caa078 | 83 | CUSTOM_TARGETS_PATH=${MBED_SYS_PATH}/custom_targets/mbed |
| hudakz | 9:480495caa078 | 84 | PROF=debug |
| hudakz | 9:480495caa078 | 85 | if [ ${PROFILE} == RELEASE ] |
| hudakz | 9:480495caa078 | 86 | then |
| hudakz | 9:480495caa078 | 87 | PROF=release |
| hudakz | 9:480495caa078 | 88 | fi |
| hudakz | 9:480495caa078 | 89 | else |
| hudakz | 9:480495caa078 | 90 | GCC_ARM_PATH=/opt/gcc-arm-none-eabi-9-2019-q4-major |
| hudakz | 9:480495caa078 | 91 | MBED_OS_PATH=${MBED_SYS_PATH}/mbed-os |
| hudakz | 9:480495caa078 | 92 | CUSTOM_TARGETS_PATH=${MBED_SYS_PATH}/custom_targets/mbed-os |
| hudakz | 9:480495caa078 | 93 | PROF=${MBED_SYS_PATH}/mbed-os/tools/profiles/debug.json |
| hudakz | 9:480495caa078 | 94 | if [ ${PROFILE} == RELEASE ] |
| hudakz | 9:480495caa078 | 95 | then |
| hudakz | 9:480495caa078 | 96 | PROF=${MBED_SYS_PATH}/mbed-os/tools/profiles/release.json |
| hudakz | 9:480495caa078 | 97 | fi |
| hudakz | 9:480495caa078 | 98 | fi |
| hudakz | 9:480495caa078 | 99 | |
| hudakz | 9:480495caa078 | 100 | # -------------------------------------------------------------------- |
| hudakz | 9:480495caa078 | 101 | # Call Mbed CLI "config" command to set path to the toolchain (GCC ARM) and Mbed OS (2 or other) |
| hudakz | 9:480495caa078 | 102 | mbed config -G GCC_ARM_PATH ${GCC_ARM_PATH}/bin |
| hudakz | 9:480495caa078 | 103 | mbed config -G MBED_OS_DIR ${MBED_OS_PATH} |
| hudakz | 9:480495caa078 | 104 | |
| hudakz | 9:480495caa078 | 105 | # -------------------------------------------------------------------- |
| hudakz | 9:480495caa078 | 106 | # Create a new project if no such exists yet. |
| hudakz | 9:480495caa078 | 107 | if ! [ -f ./.mbed ] |
| hudakz | 9:480495caa078 | 108 | then |
| hudakz | 9:480495caa078 | 109 | mbed new . |
| hudakz | 9:480495caa078 | 110 | fi |
| hudakz | 9:480495caa078 | 111 | |
| hudakz | 9:480495caa078 | 112 | # -------------------------------------------------------------------- |
| hudakz | 9:480495caa078 | 113 | # Execute Mbed CLI "export" command using the selected options. |
| hudakz | 9:480495caa078 | 114 | mbed export -i qtcreator -m ${MCU} --source . --source ${CUSTOM_TARGETS_PATH} --source ${MBED_OS_PATH} --source ${GCC_ARM_PATH}/arm-none-eabi/include ${SRC_LIB_PATH} |
| hudakz | 9:480495caa078 | 115 | |
| hudakz | 9:480495caa078 | 116 | # -------------------------------------------------------------------- |
| hudakz | 9:480495caa078 | 117 | # Add additional files to the project to be available in the QtCreator IDE for editing. |
| hudakz | 9:480495caa078 | 118 | find ~/.local/bin -name "mbed.bat" >> ${PROJ_NAME}.files |
| hudakz | 9:480495caa078 | 119 | find . -name "*.json" >> ${PROJ_NAME}.files |
| hudakz | 9:480495caa078 | 120 | find . -name "*.mbedignore" >> ${PROJ_NAME}.files |
| hudakz | 9:480495caa078 | 121 | |
| hudakz | 9:480495caa078 | 122 | # -------------------------------------------------------------------- |
| hudakz | 9:480495caa078 | 123 | # Execute Mbed CLI "compile" command using the selected options. |
| hudakz | 9:480495caa078 | 124 | mbed compile -t GCC_ARM -m ${MCU} ${ARGS} --source . --source ${CUSTOM_TARGETS_PATH} --source ${MBED_OS_PATH} ${SRC_LIB_PATH} $CLEAN --profile ${PROF} |tee ./BUILD/compile_output.txt |
| hudakz | 9:480495caa078 | 125 | |
| hudakz | 9:480495caa078 | 126 | # Check for a binary built by Mbed CLI. |
| hudakz | 9:480495caa078 | 127 | RESULT=$(grep "Elf2Bin" ./BUILD/compile_output.txt) |
| hudakz | 9:480495caa078 | 128 | |
| hudakz | 9:480495caa078 | 129 | # -------------------------------------------------------------------- |
| hudakz | 9:480495caa078 | 130 | # The following commands are for flashing some selected targets. |
| hudakz | 9:480495caa078 | 131 | # You can delete (or ignore) the whole section below if you prefer to flash your targets using the "drag & drop" or other methods. |
| hudakz | 9:480495caa078 | 132 | |
| hudakz | 9:480495caa078 | 133 | # If the compilation succeeded (a binary exists) flash the target MCU with the resulted binary file. |
| hudakz | 9:480495caa078 | 134 | if [ "${RESULT}" != "" ] |
| hudakz | 9:480495caa078 | 135 | then |
| hudakz | 9:480495caa078 | 136 | # Uncomment the following lines if you want to build a "hex" file for Flash Magic. |
| hudakz | 9:480495caa078 | 137 | #if [ "${MCU}" == "LPC1768DBG" ] |
| hudakz | 9:480495caa078 | 138 | #then |
| hudakz | 9:480495caa078 | 139 | # ${GCC_ARM_PATH}/bin/arm-none-eabi-objcopy -I binary -O ihex ./BUILD/${MCU}/GCC_ARM-${PROFILE}/${PROJ_NAME}.bin ./BUILD/${MCU}/GCC_ARM-${PROFILE}/${PROJ_NAME}.hex |
| hudakz | 9:480495caa078 | 140 | #fi |
| hudakz | 9:480495caa078 | 141 | |
| hudakz | 9:480495caa078 | 142 | # If the "all" or "-f" option was selected choose the right tool and configuration. |
| hudakz | 9:480495caa078 | 143 | if [ "${FLASH}" == "-f" ] |
| hudakz | 9:480495caa078 | 144 | then |
| hudakz | 9:480495caa078 | 145 | case ${MCU} in |
| hudakz | 9:480495caa078 | 146 | # Targets supported by pyOCD |
| hudakz | 9:480495caa078 | 147 | LPC1768|LPC1768DBG) |
| hudakz | 9:480495caa078 | 148 | MCU_CFG="pyOCD" |
| hudakz | 9:480495caa078 | 149 | ;; |
| hudakz | 9:480495caa078 | 150 | # Targets supported by OpenOCD. |
| hudakz | 9:480495caa078 | 151 | # Configure OpenOCD according to the selected target. |
| hudakz | 9:480495caa078 | 152 | BLUEPILL|MAPLE_MINI|NUCLEO_F103RB|STM32F103RC|STM32F103VE) |
| hudakz | 9:480495caa078 | 153 | MCU_CFG="/usr/local/share/openocd/scripts/board/st_nucleo_f103rb.cfg" |
| hudakz | 9:480495caa078 | 154 | ;; |
| hudakz | 9:480495caa078 | 155 | NUCLEO_F411RE|NUCLEO_F446RE|STM32F407VE) |
| hudakz | 9:480495caa078 | 156 | MCU_CFG="/usr/local/share/openocd/scripts/board/st_nucleo_f4.cfg" |
| hudakz | 9:480495caa078 | 157 | ;; |
| hudakz | 9:480495caa078 | 158 | NUCLEO_F767ZI) |
| hudakz | 9:480495caa078 | 159 | MCU_CFG="/usr/local/share/openocd/scripts/board/stm32f7discovery.cfg" |
| hudakz | 9:480495caa078 | 160 | ;; |
| hudakz | 9:480495caa078 | 161 | # Warn when flashing of selected target MCU is not supported. |
| hudakz | 9:480495caa078 | 162 | *) |
| hudakz | 9:480495caa078 | 163 | MCU_CFG="not_supported" |
| hudakz | 9:480495caa078 | 164 | echo "No support to flash "${MCU} |
| hudakz | 9:480495caa078 | 165 | ;; |
| hudakz | 9:480495caa078 | 166 | esac |
| hudakz | 9:480495caa078 | 167 | |
| hudakz | 9:480495caa078 | 168 | # When the target MCU is supported flash the target MCU with the binary code. |
| hudakz | 9:480495caa078 | 169 | if [ "$MCU_CFG" != "not_supported" ] |
| hudakz | 9:480495caa078 | 170 | then |
| hudakz | 9:480495caa078 | 171 | echo "Flashing the "${MCU}" ..." |
| hudakz | 9:480495caa078 | 172 | case ${MCU_CFG} in |
| hudakz | 9:480495caa078 | 173 | # Use pyOCD to flash the target when port was specified. |
| hudakz | 9:480495caa078 | 174 | pyOCD) |
| hudakz | 9:480495caa078 | 175 | if [ "$PORT" == "/dev/ttyACM0" ] |
| hudakz | 9:480495caa078 | 176 | then |
| hudakz | 9:480495caa078 | 177 | # Use pyOCD to flash the target when port was specified. |
| hudakz | 9:480495caa078 | 178 | ~/.local/bin/pyocd-flashtool -t lpc1768 ./BUILD/${MCU}/GCC_ARM-${PROFILE}/${PROJ_NAME}.bin |
| hudakz | 9:480495caa078 | 179 | else |
| hudakz | 9:480495caa078 | 180 | # Use "lpc2isp" otherwise. |
| hudakz | 9:480495caa078 | 181 | lpc21isp -bin ./BUILD/${MCU}/GCC_ARM-${PROFILE}/${PROJ_NAME}.bin ${PORT} 115200 96000 |
| hudakz | 9:480495caa078 | 182 | fi |
| hudakz | 9:480495caa078 | 183 | ;; |
| hudakz | 9:480495caa078 | 184 | # Use OpenOCD to flash the target MCU |
| hudakz | 9:480495caa078 | 185 | *) |
| hudakz | 9:480495caa078 | 186 | openocd -f ${MCU_CFG} -c """program ./BUILD/${MCU}/GCC_ARM-${PROFILE}/${PROJ_NAME}.elf verify reset exit""" |
| hudakz | 9:480495caa078 | 187 | ;; |
| hudakz | 9:480495caa078 | 188 | esac |
| hudakz | 9:480495caa078 | 189 | echo "Done." |
| hudakz | 9:480495caa078 | 190 | fi |
| hudakz | 9:480495caa078 | 191 | fi |
| hudakz | 9:480495caa078 | 192 | fi |