mbed os with nrf51 internal bandgap enabled to read battery level

Dependents:   BLE_file_test BLE_Blink ExternalEncoder

Revision:
0:f269e3021894
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/Toolchain_Profiles.md	Sun Oct 23 15:10:02 2016 +0000
@@ -0,0 +1,72 @@
+# Toolchain Profiles User Perspective
+
+A Toolchain or build system Profile is a set of flags that is garenteed to be passed to the underlieing compiler suite.
+These flags are stored in a JSON file that may be merged with other JSON files of the same structure.
+
+## JSON Toolchain Profile Format
+
+The JSON object that represents a Toolchain Profile is a dict mapping from Toolchains, like `GCC_ARM`, to their flags, like `-O3`.
+The structure is as follows: Each toolchain supported by a Toolchain Profile has an dict in the root dict. 
+This dict contains a mapping from a flag type to a list of flags that should be passed the corresponding part of the compiler suite.
+The required flag types are:
+
+| Key      | Description                           |
+|:---------|:--------------------------------------|
+| `c`      | Flags for the C Compiler              |
+| `cxx`    | Flags for the C++ Compiler            |
+| `common` | Flags for both the C and C++ Compilers|
+| `asm`    | Flags for the Assembler               |
+
+## Example
+
+An example of a Toolchain Profile is given below:
+```json
+{
+    "GCC_ARM": {
+        "common": ["-c", "-Wall", "-Wextra",
+                   "-Wno-unused-parameter", "-Wno-missing-field-initializers",
+                   "-fmessage-length=0", "-fno-exceptions", "-fno-builtin",
+                   "-ffunction-sections", "-fdata-sections", "-funsigned-char",
+                   "-MMD", "-fno-delete-null-pointer-checks",
+                   "-fomit-frame-pointer", "-Os"],
+        "asm": ["-x", "assembler-with-cpp"],
+        "c": ["-std=gnu99"],
+        "cxx": ["-std=gnu++98", "-fno-rtti", "-Wvla"],
+        "ld": ["-Wl,--gc-sections", "-Wl,--wrap,main", "-Wl,--wrap,_malloc_r",
+               "-Wl,--wrap,_free_r", "-Wl,--wrap,_realloc_r",
+               "-Wl,--wrap,_calloc_r", "-Wl,--wrap,exit", "-Wl,--wrap,atexit"]
+    },
+    "ARM": {
+        "common": ["-c", "--gnu", "-Otime", "--split_sections",
+                   "--apcs=interwork", "--brief_diagnostics", "--restrict",
+                   "--multibyte_chars", "-O3"],
+        "asm": [],
+        "c": ["--md", "--no_depend_system_headers", "--c99", "-D__ASSERT_MSG"],
+        "cxx": ["--cpp", "--no_rtti", "--no_vla"],
+        "ld": []
+    },
+    "IAR": {
+        "common": [
+            "--no_wrap_diagnostics", "non-native end of line sequence", "-e",
+            "--diag_suppress=Pa050,Pa084,Pa093,Pa082", "-Oh"],
+        "asm": [],
+        "c": ["--vla"],
+        "cxx": ["--guard_calls", "--no_static_destruction"],
+        "ld": ["--skip_dynamic_initialization", "--threaded_lib"]
+    }
+}
+```
+
+From this Toolchain profile, we can tell that:
+ - `GCC_ARM`, `ARM`, and `IAR` compiler suites are supported.
+ - The `ARM` C and C++ Compilers will be using optimization level `-O3`
+ - The `IAR` linker will skip dynamic initialization
+ - etc.
+
+# Toolchain Profile API Perspective
+
+The Toolchains no longer take in an optional argument, `build_profile`, that will contain a map from flag types to lists of flags.
+This looks exactly the same in python as it does in the JSON format above.
+The meaning of the flags, and which ones are required is the same as the User Perspective
+A developer using the API must parse the User provided files themselves and extract the appropriate sub-dict from the file afterwards.
+A convienence function that does this for a developer is `tools.options.extract_profile` and will call args_error when a Toolchain Profile JSON file does not provide flags for the selected Toolchain.