Merge remote-tracking branch 'upstream/master'

pull/192/head
Yihui Xiong 2014-02-27 21:32:38 +08:00
commit 21baee7cc0
4 changed files with 129 additions and 81 deletions

View File

@ -20,26 +20,27 @@ Documentation
* [mbed library internals](http://mbed.org/handbook/mbed-library-internals) * [mbed library internals](http://mbed.org/handbook/mbed-library-internals)
* [Adding a new target microcontroller](http://mbed.org/handbook/mbed-SDK-porting) * [Adding a new target microcontroller](http://mbed.org/handbook/mbed-SDK-porting)
Supported Microcontrollers Supported Microcontrollers and Boards
-------------------------- -------------------------------------
NXP: NXP:
* [LPC1768](http://mbed.org/platforms/mbed-LPC1768/) (Cortex-M3) * [mbed LPC1768](http://mbed.org/platforms/mbed-LPC1768/) (Cortex-M3)
* [LPC1768](http://mbed.org/platforms/u-blox-C027/) (Cortex-M3) * [u-blox C027 LPC1768](http://mbed.org/platforms/u-blox-C027/) (Cortex-M3)
* [LPC11U24](http://mbed.org/platforms/mbed-LPC11U24/) (Cortex-M0) * [mbed LPC11U24](http://mbed.org/platforms/mbed-LPC11U24/) (Cortex-M0)
* [LPC11U35](http://mbed.org/platforms/EA-LPC11U35/) (Cortex-M0) * [EA LPC11U35](http://mbed.org/platforms/EA-LPC11U35/) (Cortex-M0)
* LPC2368 (ARM7TDMI-S) * mbed LPC2368 (ARM7TDMI-S)
* LPC810 (Cortex-M0+) * LPC810 (Cortex-M0+)
* [LPC812](http://mbed.org/platforms/NXP-LPC800-MAX/) (Cortex-M0+) * [LPC812](http://mbed.org/platforms/NXP-LPC800-MAX/) (Cortex-M0+)
* [LPC4088](http://mbed.org/platforms/EA-LPC4088/) (Cortex-M4) * [EA LPC4088](http://mbed.org/platforms/EA-LPC4088/) (Cortex-M4)
* LPC4330 (Cortex-M4 + Cortex-M0) * LPC4330 (Cortex-M4 + Cortex-M0)
* [LPC1347](http://mbed.org/platforms/DipCortex-M3/) (Cortex-M3) * [LPC1347](http://mbed.org/platforms/DipCortex-M3/) (Cortex-M3)
* [LPC1114](http://mbed.org/platforms/LPC1114FN28/) (Cortex-M0) * [LPC1114](http://mbed.org/platforms/LPC1114FN28/) (Cortex-M0)
* LPC11C24 (Cortex-M0) * LPC11C24 (Cortex-M0)
* [LPC1549](https://mbed.org/platforms/LPCXpresso1549/) (Cortex-M3)
Freescale: Freescale:
* KL05Z (Cortex-M0+) * [FRDM-KL05Z](https://mbed.org/platforms/FRDM-KL05Z/) (Cortex-M0+)
* [KL25Z](http://mbed.org/platforms/KL25Z/) (Cortex-M0+) * [FRDM-KL25Z](http://mbed.org/platforms/KL25Z/) (Cortex-M0+)
* [KL46Z](https://mbed.org/platforms/FRDM-KL46Z/) (Cortex-M0+) * [FRDM-KL46Z](https://mbed.org/platforms/FRDM-KL46Z/) (Cortex-M0+)
STMicroelectronics: STMicroelectronics:
* [Nucleo-F103RB](https://mbed.org/platforms/ST-Nucleo-F103RB/) (Cortex-M3) * [Nucleo-F103RB](https://mbed.org/platforms/ST-Nucleo-F103RB/) (Cortex-M3)
@ -48,6 +49,9 @@ STMicroelectronics:
* [Nucleo-F401RE](https://mbed.org/platforms/ST-Nucleo-F401RE/) (Cortex-M4) * [Nucleo-F401RE](https://mbed.org/platforms/ST-Nucleo-F401RE/) (Cortex-M4)
* STM32F407 (Cortex-M4) * STM32F407 (Cortex-M4)
Nordic:
* [nRF51822-mKIT](https://mbed.org/platforms/Nordic-nRF51822/) (Cortex-M0)
Supported Toolchains and IDEs Supported Toolchains and IDEs
----------------------------- -----------------------------
* GCC ARM: [GNU Tools for ARM Embedded Processors](https://launchpad.net/gcc-arm-embedded/4.7/4.7-2012-q4-major) * GCC ARM: [GNU Tools for ARM Embedded Processors](https://launchpad.net/gcc-arm-embedded/4.7/4.7-2012-q4-major)

View File

@ -41,7 +41,7 @@ typedef enum {
#include "USBEndpoints_LPC17_LPC23.h" #include "USBEndpoints_LPC17_LPC23.h"
#elif defined(TARGET_LPC11UXX) || defined(TARGET_LPC1347) #elif defined(TARGET_LPC11UXX) || defined(TARGET_LPC1347)
#include "USBEndpoints_LPC11U.h" #include "USBEndpoints_LPC11U.h"
#elif defined(TARGET_KL25Z) #elif defined(TARGET_KL25Z) | defined(TARGET_KL46Z) | defined(TARGET_K20D5M)
#include "USBEndpoints_KL25Z.h" #include "USBEndpoints_KL25Z.h"
#elif defined (TARGET_STM32F4XX) #elif defined (TARGET_STM32F4XX)
#include "USBEndpoints_STM32F4.h" #include "USBEndpoints_STM32F4.h"

View File

@ -16,7 +16,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#if defined(TARGET_KL25Z) #if defined(TARGET_KL25Z) | defined(TARGET_KL46Z) | defined(TARGET_K20D5M)
#include "USBHAL.h" #include "USBHAL.h"

View File

@ -41,6 +41,8 @@ Usage:
import sys import sys
import json import json
import optparse
import pprint
from prettytable import PrettyTable from prettytable import PrettyTable
from serial import Serial from serial import Serial
@ -51,6 +53,7 @@ from time import sleep, time
ROOT = abspath(join(dirname(__file__), "..")) ROOT = abspath(join(dirname(__file__), ".."))
sys.path.insert(0, ROOT) sys.path.insert(0, ROOT)
# Imports related to mbed build pi
from workspace_tools.build_api import build_project, build_mbed_libs from workspace_tools.build_api import build_project, build_mbed_libs
from workspace_tools.paths import BUILD_DIR from workspace_tools.paths import BUILD_DIR
from workspace_tools.targets import TARGET_MAP from workspace_tools.targets import TARGET_MAP
@ -60,6 +63,7 @@ from workspace_tools.tests import TEST_MAP
ROOT = abspath(join(dirname(__file__), "..")) ROOT = abspath(join(dirname(__file__), ".."))
sys.path.insert(0, ROOT) sys.path.insert(0, ROOT)
# Imports related to mbed build pi
from workspace_tools.utils import delete_dir_files from workspace_tools.utils import delete_dir_files
from workspace_tools.settings import MUTs from workspace_tools.settings import MUTs
@ -77,7 +81,9 @@ class SingleTestRunner():
""" """
if sleep_before_reset > 0: if sleep_before_reset > 0:
sleep(sleep_before_reset) sleep(sleep_before_reset)
if verbose:
verbose_msg = "Reset::cmd(sendBreak)" verbose_msg = "Reset::cmd(sendBreak)"
# Reset type decision
if mcu_name.startswith('NRF51822'): # Nordic if mcu_name.startswith('NRF51822'): # Nordic
call(["nrfjprog", "-r"]) call(["nrfjprog", "-r"])
verbose_msg = "Reset::cmd(nrfjprog)" verbose_msg = "Reset::cmd(nrfjprog)"
@ -86,6 +92,7 @@ class SingleTestRunner():
verbose_msg = "Reset::cmd(ST-LINK_CLI.exe)" verbose_msg = "Reset::cmd(ST-LINK_CLI.exe)"
else: else:
serial.sendBreak() serial.sendBreak()
if sleep_before_reset > 0: if sleep_before_reset > 0:
sleep(sleep_after_reset) sleep(sleep_after_reset)
if verbose: if verbose:
@ -97,6 +104,7 @@ class SingleTestRunner():
serial.flushOutput() serial.flushOutput()
def is_peripherals_available(self, target, peripherals=None): def is_peripherals_available(self, target, peripherals=None):
""" Checks if specified target should run specific peripheral test case."""
if peripherals is not None: if peripherals is not None:
peripherals = set(peripherals) peripherals = set(peripherals)
@ -114,7 +122,7 @@ class SingleTestRunner():
return False return False
def run_host_test(self, name, target_name, disk, port, def run_host_test(self, name, target_name, disk, port,
duration, extra_serial, verbose=True): duration, extra_serial, verbose=False):
""" """
Functions resets target and grabs by timeouted pooling test log Functions resets target and grabs by timeouted pooling test log
via serial port. via serial port.
@ -151,10 +159,14 @@ class SingleTestRunner():
# Parse test 'output' data # Parse test 'output' data
result = "UNDEF" result = "UNDEF"
for line in output.splitlines(): for line in output.splitlines():
if '{success}' in line: result = "OK" if '{success}' in line:
if '{failure}' in line: result = "FAIL" result = "OK"
if '{error}' in line: result = "ERROR" if '{failure}' in line:
if '{end}' in line: break result = "FAIL"
if '{error}' in line:
result = "ERROR"
if '{end}' in line:
break
return result return result
def print_test_result(self, test_result, target_name, toolchain_name, def print_test_result(self, test_result, target_name, toolchain_name,
@ -246,25 +258,54 @@ def shape_test_request(mcu, image_path, test_id, duration=10):
if __name__ == '__main__': if __name__ == '__main__':
start = time() # Command line options
single_test = SingleTestRunner() parser = optparse.OptionParser()
parser.add_option('-i', '--tests',
dest='test_spec_filename',
metavar="FILE",
help='Points to file with test specification')
parser.add_option('-s', '--suppress-summary',
dest='suppress_summary',
default=False,
action="store_true",
help='Suppresses display of wellformatted table with test results')
parser.add_option('-v', '--verbose',
dest='verbose',
default=False,
action="store_true",
help='Verbose mode (pronts some extra information)')
parser.epilog="Example: singletest.py -i test_spec.json"
(opts, args) = parser.parse_args()
# Below list tells script which targets and their toolchain(s) # Below list tells script which targets and their toolchain(s)
# should be covered by the test scenario # should be covered by the test scenario
test_spec = { test_spec = None
"targets": {
# "KL25Z": ["ARM", "GCC_ARM"], # Open file with test specification
# "LPC1768": ["ARM", "GCC_ARM", "GCC_CR", "GCC_CS", "IAR"], if opts.test_spec_filename:
# "LPC11U24": ["uARM"] try:
# "UBLOX_C027": ["IAR"] with open(opts.test_spec_filename) as data_file:
# "NRF51822": ["ARM"] try:
# "NUCLEO_F103RB": ["ARM"], test_spec = json.load(data_file)
# "LPC2368": ["ARM"], except ValueError as json_error_msg:
# "LPC812": ["uARM"], test_spec = None
# "LPC1549": ["uARM"] print "Error: %s" % (json_error_msg)
"LPC4088": ["ARM"] # , "GCC_CR", "GCC_ARM" except IOError as fileopen_error_msg:
} print "Error: %s" % (fileopen_error_msg)
} if opts.verbose and test_spec:
pp = pprint.PrettyPrinter(indent=4)
pp.pprint(test_spec)
if test_spec is None:
parser.print_help()
exit(-1)
# Magic happens here... ;)
start = time()
single_test = SingleTestRunner()
clean = test_spec.get('clean', False) clean = test_spec.get('clean', False)
test_ids = test_spec.get('test_ids', []) test_ids = test_spec.get('test_ids', [])
@ -287,6 +328,7 @@ if __name__ == '__main__':
if test.automated and test.is_supported(target, toolchain): if test.automated and test.is_supported(target, toolchain):
if not single_test.is_peripherals_available(target, test.peripherals): if not single_test.is_peripherals_available(target, test.peripherals):
if opts.verbose:
print "TargetTest::%s::TestSkipped(%s)" % (target, ",".join(test.peripherals)) print "TargetTest::%s::TestSkipped(%s)" % (target, ",".join(test.peripherals))
continue continue
@ -296,7 +338,7 @@ if __name__ == '__main__':
'test_id': test_id, 'test_id': test_id,
} }
path = build_project(test.source_dir, join(build_dir, test_id), T, toolchain, test.dependencies, clean=clean, verbose=False) path = build_project(test.source_dir, join(build_dir, test_id), T, toolchain, test.dependencies, clean=clean, verbose=opts.verbose)
if target.startswith('NRF51822'): # Nordic: if target.startswith('NRF51822'): # Nordic:
#Convert bin to Hex and Program nrf chip via jlink #Convert bin to Hex and Program nrf chip via jlink
@ -314,6 +356,8 @@ if __name__ == '__main__':
elapsed_time = time() - start elapsed_time = time() - start
# Human readable summary
if not opts.suppress_summary:
print print
print "Test summary:" print "Test summary:"
# Pretty table package is used to print results # Pretty table package is used to print results