| { | |||||
| "type": "platform", | |||||
| "name": "teensy-gcc", | |||||
| "version": "0.1.0", | |||||
| "spec": { | |||||
| "owner": "skepto", | |||||
| "id": 8021, | |||||
| "name": "teensy-gcc", | |||||
| "requirements": null, | |||||
| "url": null | |||||
| } | |||||
| } |
| Apache License | |||||
| Version 2.0, January 2004 | |||||
| http://www.apache.org/licenses/ | |||||
| TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION | |||||
| 1. Definitions. | |||||
| "License" shall mean the terms and conditions for use, reproduction, | |||||
| and distribution as defined by Sections 1 through 9 of this document. | |||||
| "Licensor" shall mean the copyright owner or entity authorized by | |||||
| the copyright owner that is granting the License. | |||||
| "Legal Entity" shall mean the union of the acting entity and all | |||||
| other entities that control, are controlled by, or are under common | |||||
| control with that entity. For the purposes of this definition, | |||||
| "control" means (i) the power, direct or indirect, to cause the | |||||
| direction or management of such entity, whether by contract or | |||||
| otherwise, or (ii) ownership of fifty percent (50%) or more of the | |||||
| outstanding shares, or (iii) beneficial ownership of such entity. | |||||
| "You" (or "Your") shall mean an individual or Legal Entity | |||||
| exercising permissions granted by this License. | |||||
| "Source" form shall mean the preferred form for making modifications, | |||||
| including but not limited to software source code, documentation | |||||
| source, and configuration files. | |||||
| "Object" form shall mean any form resulting from mechanical | |||||
| transformation or translation of a Source form, including but | |||||
| not limited to compiled object code, generated documentation, | |||||
| and conversions to other media types. | |||||
| "Work" shall mean the work of authorship, whether in Source or | |||||
| Object form, made available under the License, as indicated by a | |||||
| copyright notice that is included in or attached to the work | |||||
| (an example is provided in the Appendix below). | |||||
| "Derivative Works" shall mean any work, whether in Source or Object | |||||
| form, that is based on (or derived from) the Work and for which the | |||||
| editorial revisions, annotations, elaborations, or other modifications | |||||
| represent, as a whole, an original work of authorship. For the purposes | |||||
| of this License, Derivative Works shall not include works that remain | |||||
| separable from, or merely link (or bind by name) to the interfaces of, | |||||
| the Work and Derivative Works thereof. | |||||
| "Contribution" shall mean any work of authorship, including | |||||
| the original version of the Work and any modifications or additions | |||||
| to that Work or Derivative Works thereof, that is intentionally | |||||
| submitted to Licensor for inclusion in the Work by the copyright owner | |||||
| or by an individual or Legal Entity authorized to submit on behalf of | |||||
| the copyright owner. For the purposes of this definition, "submitted" | |||||
| means any form of electronic, verbal, or written communication sent | |||||
| to the Licensor or its representatives, including but not limited to | |||||
| communication on electronic mailing lists, source code control systems, | |||||
| and issue tracking systems that are managed by, or on behalf of, the | |||||
| Licensor for the purpose of discussing and improving the Work, but | |||||
| excluding communication that is conspicuously marked or otherwise | |||||
| designated in writing by the copyright owner as "Not a Contribution." | |||||
| "Contributor" shall mean Licensor and any individual or Legal Entity | |||||
| on behalf of whom a Contribution has been received by Licensor and | |||||
| subsequently incorporated within the Work. | |||||
| 2. Grant of Copyright License. Subject to the terms and conditions of | |||||
| this License, each Contributor hereby grants to You a perpetual, | |||||
| worldwide, non-exclusive, no-charge, royalty-free, irrevocable | |||||
| copyright license to reproduce, prepare Derivative Works of, | |||||
| publicly display, publicly perform, sublicense, and distribute the | |||||
| Work and such Derivative Works in Source or Object form. | |||||
| 3. Grant of Patent License. Subject to the terms and conditions of | |||||
| this License, each Contributor hereby grants to You a perpetual, | |||||
| worldwide, non-exclusive, no-charge, royalty-free, irrevocable | |||||
| (except as stated in this section) patent license to make, have made, | |||||
| use, offer to sell, sell, import, and otherwise transfer the Work, | |||||
| where such license applies only to those patent claims licensable | |||||
| by such Contributor that are necessarily infringed by their | |||||
| Contribution(s) alone or by combination of their Contribution(s) | |||||
| with the Work to which such Contribution(s) was submitted. If You | |||||
| institute patent litigation against any entity (including a | |||||
| cross-claim or counterclaim in a lawsuit) alleging that the Work | |||||
| or a Contribution incorporated within the Work constitutes direct | |||||
| or contributory patent infringement, then any patent licenses | |||||
| granted to You under this License for that Work shall terminate | |||||
| as of the date such litigation is filed. | |||||
| 4. Redistribution. You may reproduce and distribute copies of the | |||||
| Work or Derivative Works thereof in any medium, with or without | |||||
| modifications, and in Source or Object form, provided that You | |||||
| meet the following conditions: | |||||
| (a) You must give any other recipients of the Work or | |||||
| Derivative Works a copy of this License; and | |||||
| (b) You must cause any modified files to carry prominent notices | |||||
| stating that You changed the files; and | |||||
| (c) You must retain, in the Source form of any Derivative Works | |||||
| that You distribute, all copyright, patent, trademark, and | |||||
| attribution notices from the Source form of the Work, | |||||
| excluding those notices that do not pertain to any part of | |||||
| the Derivative Works; and | |||||
| (d) If the Work includes a "NOTICE" text file as part of its | |||||
| distribution, then any Derivative Works that You distribute must | |||||
| include a readable copy of the attribution notices contained | |||||
| within such NOTICE file, excluding those notices that do not | |||||
| pertain to any part of the Derivative Works, in at least one | |||||
| of the following places: within a NOTICE text file distributed | |||||
| as part of the Derivative Works; within the Source form or | |||||
| documentation, if provided along with the Derivative Works; or, | |||||
| within a display generated by the Derivative Works, if and | |||||
| wherever such third-party notices normally appear. The contents | |||||
| of the NOTICE file are for informational purposes only and | |||||
| do not modify the License. You may add Your own attribution | |||||
| notices within Derivative Works that You distribute, alongside | |||||
| or as an addendum to the NOTICE text from the Work, provided | |||||
| that such additional attribution notices cannot be construed | |||||
| as modifying the License. | |||||
| You may add Your own copyright statement to Your modifications and | |||||
| may provide additional or different license terms and conditions | |||||
| for use, reproduction, or distribution of Your modifications, or | |||||
| for any such Derivative Works as a whole, provided Your use, | |||||
| reproduction, and distribution of the Work otherwise complies with | |||||
| the conditions stated in this License. | |||||
| 5. Submission of Contributions. Unless You explicitly state otherwise, | |||||
| any Contribution intentionally submitted for inclusion in the Work | |||||
| by You to the Licensor shall be under the terms and conditions of | |||||
| this License, without any additional terms or conditions. | |||||
| Notwithstanding the above, nothing herein shall supersede or modify | |||||
| the terms of any separate license agreement you may have executed | |||||
| with Licensor regarding such Contributions. | |||||
| 6. Trademarks. This License does not grant permission to use the trade | |||||
| names, trademarks, service marks, or product names of the Licensor, | |||||
| except as required for reasonable and customary use in describing the | |||||
| origin of the Work and reproducing the content of the NOTICE file. | |||||
| 7. Disclaimer of Warranty. Unless required by applicable law or | |||||
| agreed to in writing, Licensor provides the Work (and each | |||||
| Contributor provides its Contributions) on an "AS IS" BASIS, | |||||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or | |||||
| implied, including, without limitation, any warranties or conditions | |||||
| of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A | |||||
| PARTICULAR PURPOSE. You are solely responsible for determining the | |||||
| appropriateness of using or redistributing the Work and assume any | |||||
| risks associated with Your exercise of permissions under this License. | |||||
| 8. Limitation of Liability. In no event and under no legal theory, | |||||
| whether in tort (including negligence), contract, or otherwise, | |||||
| unless required by applicable law (such as deliberate and grossly | |||||
| negligent acts) or agreed to in writing, shall any Contributor be | |||||
| liable to You for damages, including any direct, indirect, special, | |||||
| incidental, or consequential damages of any character arising as a | |||||
| result of this License or out of the use or inability to use the | |||||
| Work (including but not limited to damages for loss of goodwill, | |||||
| work stoppage, computer failure or malfunction, or any and all | |||||
| other commercial damages or losses), even if such Contributor | |||||
| has been advised of the possibility of such damages. | |||||
| 9. Accepting Warranty or Additional Liability. While redistributing | |||||
| the Work or Derivative Works thereof, You may choose to offer, | |||||
| and charge a fee for, acceptance of support, warranty, indemnity, | |||||
| or other liability obligations and/or rights consistent with this | |||||
| License. However, in accepting such obligations, You may act only | |||||
| on Your own behalf and on Your sole responsibility, not on behalf | |||||
| of any other Contributor, and only if You agree to indemnify, | |||||
| defend, and hold each Contributor harmless for any liability | |||||
| incurred by, or claims asserted against, such Contributor by reason | |||||
| of your accepting any such warranty or additional liability. |
| # Teensy: development platform for [PlatformIO](http://platformio.org) | |||||
| [](https://github.com/platformio/platform-teensy/actions) | |||||
| Teensy is a complete USB-based microcontroller development system, in a very small footprint, capable of implementing many types of projects. All programming is done via the USB port. No special programmer is needed, only a standard USB cable and a PC or Macintosh with a USB port. | |||||
| * [Home](http://platformio.org/platforms/teensy) (home page in PlatformIO Platform Registry) | |||||
| * [Documentation](http://docs.platformio.org/page/platforms/teensy.html) (advanced usage, packages, boards, frameworks, etc.) | |||||
| # Usage | |||||
| 1. [Install PlatformIO](http://platformio.org) | |||||
| 2. Create PlatformIO project and configure a platform option in [platformio.ini](http://docs.platformio.org/page/projectconf.html) file: | |||||
| ## Stable version | |||||
| ```ini | |||||
| [env:stable] | |||||
| platform = teensy | |||||
| board = ... | |||||
| ... | |||||
| ``` | |||||
| ## Development version | |||||
| ```ini | |||||
| [env:development] | |||||
| platform = https://github.com/platformio/platform-teensy.git | |||||
| board = ... | |||||
| ... | |||||
| ``` | |||||
| # Configuration | |||||
| Please navigate to [documentation](http://docs.platformio.org/page/platforms/teensy.html). |
| { | |||||
| "build": { | |||||
| "core": "teensy", | |||||
| "extra_flags": "-DARDUINO_ARCH_AVR -DARDUINO_TEENSY2", | |||||
| "f_cpu": "16000000L", | |||||
| "mcu": "atmega32u4" | |||||
| }, | |||||
| "frameworks": [ | |||||
| "arduino" | |||||
| ], | |||||
| "name": "Teensy 2.0", | |||||
| "upload": { | |||||
| "maximum_ram_size": 2560, | |||||
| "maximum_size": 32256, | |||||
| "protocol": "teensy-gui", | |||||
| "protocols": [ | |||||
| "teensy-cli", | |||||
| "teensy-gui" | |||||
| ] | |||||
| }, | |||||
| "url": "https://www.pjrc.com/store/teensy.html", | |||||
| "vendor": "Teensy" | |||||
| } |
| { | |||||
| "build": { | |||||
| "core": "teensy", | |||||
| "extra_flags": "-DARDUINO_TEENSY2PP", | |||||
| "f_cpu": "16000000L", | |||||
| "mcu": "at90usb1286" | |||||
| }, | |||||
| "frameworks": [ | |||||
| "arduino" | |||||
| ], | |||||
| "name": "Teensy++ 2.0", | |||||
| "upload": { | |||||
| "maximum_ram_size": 8192, | |||||
| "maximum_size": 130048, | |||||
| "protocol": "teensy-gui", | |||||
| "protocols": [ | |||||
| "teensy-cli", | |||||
| "teensy-gui" | |||||
| ] | |||||
| }, | |||||
| "url": "https://www.pjrc.com/store/teensypp.html", | |||||
| "vendor": "Teensy" | |||||
| } |
| { | |||||
| "build": { | |||||
| "arduino": { | |||||
| "ldscript": "mk20dx128.ld" | |||||
| }, | |||||
| "core": "teensy3", | |||||
| "cpu": "cortex-m4", | |||||
| "extra_flags": "-D__MK20DX128__ -DARDUINO_TEENSY30", | |||||
| "f_cpu": "48000000L", | |||||
| "mcu": "mk20dx128" | |||||
| }, | |||||
| "frameworks": [ | |||||
| "arduino" | |||||
| ], | |||||
| "name": "Teensy 3.0", | |||||
| "upload": { | |||||
| "maximum_ram_size": 16384, | |||||
| "maximum_size": 131072, | |||||
| "protocol": "teensy-gui", | |||||
| "protocols": [ | |||||
| "teensy-cli", | |||||
| "teensy-gui" | |||||
| ] | |||||
| }, | |||||
| "url": "https://www.pjrc.com/store/teensy3.html", | |||||
| "vendor": "Teensy" | |||||
| } |
| { | |||||
| "build": { | |||||
| "arduino": { | |||||
| "ldscript": "mk20dx256.ld" | |||||
| }, | |||||
| "core": "teensy3", | |||||
| "cpu": "cortex-m4", | |||||
| "extra_flags": "-D__MK20DX256__ -DARDUINO_TEENSY31", | |||||
| "f_cpu": "72000000L", | |||||
| "mcu": "mk20dx256" | |||||
| }, | |||||
| "debug": { | |||||
| "jlink_device": "MK20DX256xxx10", | |||||
| "svd_path": "MK20D5.svd" | |||||
| }, | |||||
| "frameworks": [ | |||||
| "arduino", | |||||
| "mbed" | |||||
| ], | |||||
| "name": "Teensy 3.1 / 3.2", | |||||
| "upload": { | |||||
| "maximum_ram_size": 65536, | |||||
| "maximum_size": 262144, | |||||
| "protocol": "teensy-gui", | |||||
| "protocols": [ | |||||
| "teensy-cli", | |||||
| "teensy-gui", | |||||
| "jlink" | |||||
| ] | |||||
| }, | |||||
| "url": "https://www.pjrc.com/store/teensy31.html", | |||||
| "vendor": "Teensy" | |||||
| } |
| { | |||||
| "build": { | |||||
| "arduino": { | |||||
| "ldscript": "mk64fx512.ld" | |||||
| }, | |||||
| "core": "teensy3", | |||||
| "cpu": "cortex-m4", | |||||
| "extra_flags": "-D__MK64FX512__ -DARDUINO_TEENSY35", | |||||
| "f_cpu": "120000000L", | |||||
| "mcu": "mk64fx512" | |||||
| }, | |||||
| "connectivity": [ | |||||
| "can" | |||||
| ], | |||||
| "debug": { | |||||
| "jlink_device": "MK64FX512xxx12", | |||||
| "svd_path": "MK64F12.svd" | |||||
| }, | |||||
| "frameworks": [ | |||||
| "arduino" | |||||
| ], | |||||
| "name": "Teensy 3.5", | |||||
| "upload": { | |||||
| "maximum_ram_size": 262136, | |||||
| "maximum_size": 524288, | |||||
| "protocol": "teensy-gui", | |||||
| "protocols": [ | |||||
| "teensy-cli", | |||||
| "teensy-gui", | |||||
| "jlink" | |||||
| ] | |||||
| }, | |||||
| "url": "https://www.pjrc.com/store/teensy35.html", | |||||
| "vendor": "Teensy" | |||||
| } |
| { | |||||
| "build": { | |||||
| "arduino": { | |||||
| "ldscript": "mk66fx1m0.ld" | |||||
| }, | |||||
| "core": "teensy3", | |||||
| "cpu": "cortex-m4", | |||||
| "extra_flags": "-D__MK66FX1M0__ -DARDUINO_TEENSY36", | |||||
| "f_cpu": "180000000L", | |||||
| "mcu": "mk66fx1m0" | |||||
| }, | |||||
| "connectivity": [ | |||||
| "can" | |||||
| ], | |||||
| "debug": { | |||||
| "jlink_device": "MK66FX1M0xxx18", | |||||
| "svd_path": "MK66F18.svd" | |||||
| }, | |||||
| "frameworks": [ | |||||
| "arduino" | |||||
| ], | |||||
| "name": "Teensy 3.6", | |||||
| "upload": { | |||||
| "maximum_ram_size": 262144, | |||||
| "maximum_size": 1048576, | |||||
| "protocol": "teensy-gui", | |||||
| "protocols": [ | |||||
| "teensy-cli", | |||||
| "teensy-gui", | |||||
| "jlink" | |||||
| ] | |||||
| }, | |||||
| "url": "https://www.pjrc.com/store/teensy36.html", | |||||
| "vendor": "Teensy" | |||||
| } |
| { | |||||
| "build": { | |||||
| "arduino": { | |||||
| "ldscript": "imxrt1062.ld" | |||||
| }, | |||||
| "core": "teensy4", | |||||
| "cpu": "cortex-m7", | |||||
| "extra_flags": "-D__IMXRT1062__ -DARDUINO_TEENSY40", | |||||
| "f_cpu": "600000000", | |||||
| "mcu": "imxrt1062" | |||||
| }, | |||||
| "connectivity": [ | |||||
| "can" | |||||
| ], | |||||
| "debug": { | |||||
| "jlink_device": "MIMXRT1062xxxxA" | |||||
| }, | |||||
| "frameworks": [ | |||||
| "arduino" | |||||
| ], | |||||
| "name": "Teensy 4.0", | |||||
| "upload": { | |||||
| "maximum_ram_size": 524288, | |||||
| "maximum_size": 2031616, | |||||
| "protocol": "teensy-gui", | |||||
| "protocols": [ | |||||
| "teensy-gui", | |||||
| "jlink" | |||||
| ] | |||||
| }, | |||||
| "url": "https://www.pjrc.com/store/teensy40.html", | |||||
| "vendor": "Teensy" | |||||
| } |
| { | |||||
| "build": { | |||||
| "arduino": { | |||||
| "ldscript": "imxrt1062_t41.ld" | |||||
| }, | |||||
| "core": "teensy4", | |||||
| "cpu": "cortex-m7", | |||||
| "extra_flags": "-D__IMXRT1062__ -DARDUINO_TEENSY41", | |||||
| "f_cpu": "600000000", | |||||
| "mcu": "imxrt1062" | |||||
| }, | |||||
| "connectivity": [ | |||||
| "can" | |||||
| ], | |||||
| "debug": { | |||||
| "jlink_device": "MIMXRT1062xxxxA" | |||||
| }, | |||||
| "frameworks": [ | |||||
| "arduino" | |||||
| ], | |||||
| "name": "Teensy 4.1", | |||||
| "upload": { | |||||
| "maximum_ram_size": 524288, | |||||
| "maximum_size": 8126464, | |||||
| "protocol": "teensy-gui", | |||||
| "protocols": [ | |||||
| "teensy-gui", | |||||
| "jlink" | |||||
| ] | |||||
| }, | |||||
| "url": "https://www.pjrc.com/store/teensy41.html", | |||||
| "vendor": "Teensy" | |||||
| } |
| { | |||||
| "build": { | |||||
| "arduino": { | |||||
| "ldscript": "mkl26z64.ld" | |||||
| }, | |||||
| "core": "teensy3", | |||||
| "cpu": "cortex-m0plus", | |||||
| "extra_flags": "-D__MKL26Z64__ -DARDUINO_TEENSYLC", | |||||
| "f_cpu": "48000000L", | |||||
| "mcu": "mkl26z64" | |||||
| }, | |||||
| "debug": { | |||||
| "jlink_device": "MKL26Z64xxx4", | |||||
| "svd_path": "MKL26Z4.svd" | |||||
| }, | |||||
| "frameworks": [ | |||||
| "arduino" | |||||
| ], | |||||
| "name": "Teensy LC", | |||||
| "upload": { | |||||
| "maximum_ram_size": 8192, | |||||
| "maximum_size": 63488, | |||||
| "protocol": "teensy-gui", | |||||
| "protocols": [ | |||||
| "teensy-cli", | |||||
| "teensy-gui", | |||||
| "jlink" | |||||
| ] | |||||
| }, | |||||
| "url": "http://www.pjrc.com/teensy/teensyLC.html", | |||||
| "vendor": "Teensy" | |||||
| } |
| # Copyright 2014-present PlatformIO <contact@platformio.org> | |||||
| # | |||||
| # Licensed under the Apache License, Version 2.0 (the "License"); | |||||
| # you may not use this file except in compliance with the License. | |||||
| # You may obtain a copy of the License at | |||||
| # | |||||
| # http://www.apache.org/licenses/LICENSE-2.0 | |||||
| # | |||||
| # Unless required by applicable law or agreed to in writing, software | |||||
| # distributed under the License is distributed on an "AS IS" BASIS, | |||||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
| # See the License for the specific language governing permissions and | |||||
| # limitations under the License. | |||||
| # | |||||
| # Default flags for bare-metal programming (without any framework layers) | |||||
| # | |||||
| from SCons.Script import DefaultEnvironment | |||||
| env = DefaultEnvironment() | |||||
| env.Append( | |||||
| ASFLAGS=["-x", "assembler-with-cpp"], | |||||
| CCFLAGS=[ | |||||
| "-Os", # optimize for size | |||||
| "-Wall", # show warnings | |||||
| "-ffunction-sections", # place each function in its own section | |||||
| "-fdata-sections", | |||||
| "-mthumb", | |||||
| "-nostdlib", | |||||
| "-fsingle-precision-constant" | |||||
| ], | |||||
| CXXFLAGS=[ | |||||
| "-fno-exceptions", | |||||
| "-felide-constructors", | |||||
| "-fno-rtti", | |||||
| "-std=gnu++14" | |||||
| ], | |||||
| CPPDEFINES=[ | |||||
| ("F_CPU", "$BOARD_F_CPU"), | |||||
| "LAYOUT_US_ENGLISH" | |||||
| ], | |||||
| RANLIBFLAGS=["-s"], | |||||
| LINKFLAGS=[ | |||||
| "-Os", | |||||
| "-Wl,--gc-sections,--relax", | |||||
| "-mthumb", | |||||
| "-Wl,--defsym=__rtc_localtime=$UNIX_TIME", | |||||
| "-fsingle-precision-constant" | |||||
| ], | |||||
| LIBS=["m", "stdc++"] | |||||
| ) | |||||
| if env.BoardConfig().id_ in ("teensy35", "teensy36"): | |||||
| env.Append( | |||||
| CCFLAGS=[ | |||||
| "-mfloat-abi=hard", | |||||
| "-mfpu=fpv4-sp-d16" | |||||
| ], | |||||
| LINKFLAGS=[ | |||||
| "-mfloat-abi=hard", | |||||
| "-mfpu=fpv4-sp-d16" | |||||
| ] | |||||
| ) | |||||
| if "BOARD" in env: | |||||
| env.Append( | |||||
| CCFLAGS=[ | |||||
| "-mcpu=%s" % env.BoardConfig().get("build.cpu") | |||||
| ], | |||||
| LINKFLAGS=[ | |||||
| "-mcpu=%s" % env.BoardConfig().get("build.cpu") | |||||
| ] | |||||
| ) | |||||
| # copy CCFLAGS to ASFLAGS (-x assembler-with-cpp mode) | |||||
| env.Append(ASFLAGS=env.get("CCFLAGS", [])[:]) |
| # Copyright 2014-present PlatformIO <contact@platformio.org> | |||||
| # | |||||
| # Licensed under the Apache License, Version 2.0 (the "License"); | |||||
| # you may not use this file except in compliance with the License. | |||||
| # You may obtain a copy of the License at | |||||
| # | |||||
| # http://www.apache.org/licenses/LICENSE-2.0 | |||||
| # | |||||
| # Unless required by applicable law or agreed to in writing, software | |||||
| # distributed under the License is distributed on an "AS IS" BASIS, | |||||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
| # See the License for the specific language governing permissions and | |||||
| # limitations under the License. | |||||
| # | |||||
| # Default flags for bare-metal programming (without any framework layers) | |||||
| # | |||||
| from SCons.Script import DefaultEnvironment | |||||
| env = DefaultEnvironment() | |||||
| env.Append( | |||||
| ASFLAGS=["-x", "assembler-with-cpp"], | |||||
| CCFLAGS=[ | |||||
| "-Os", # optimize for size | |||||
| "-Wall", # show warnings | |||||
| "-ffunction-sections", # place each function in its own section | |||||
| "-fdata-sections", | |||||
| "-mmcu=$BOARD_MCU" | |||||
| ], | |||||
| CXXFLAGS=[ | |||||
| "-fno-exceptions", | |||||
| "-felide-constructors", | |||||
| "-std=gnu++11" | |||||
| ], | |||||
| CPPDEFINES=[ | |||||
| ("F_CPU", "$BOARD_F_CPU"), | |||||
| "LAYOUT_US_ENGLISH" | |||||
| ], | |||||
| LINKFLAGS=[ | |||||
| "-Os", | |||||
| "-Wl,--gc-sections,--relax", | |||||
| "-mmcu=$BOARD_MCU" | |||||
| ], | |||||
| LIBS=["m"] | |||||
| ) | |||||
| # copy CCFLAGS to ASFLAGS (-x assembler-with-cpp mode) | |||||
| env.Append(ASFLAGS=env.get("CCFLAGS", [])[:]) |
| # Copyright 2014-present PlatformIO <contact@platformio.org> | |||||
| # | |||||
| # Licensed under the Apache License, Version 2.0 (the "License"); | |||||
| # you may not use this file except in compliance with the License. | |||||
| # You may obtain a copy of the License at | |||||
| # | |||||
| # http://www.apache.org/licenses/LICENSE-2.0 | |||||
| # | |||||
| # Unless required by applicable law or agreed to in writing, software | |||||
| # distributed under the License is distributed on an "AS IS" BASIS, | |||||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
| # See the License for the specific language governing permissions and | |||||
| # limitations under the License. | |||||
| """ | |||||
| Arduino | |||||
| Arduino Wiring-based Framework allows writing cross-platform software to | |||||
| control devices attached to a wide range of Arduino boards to create all | |||||
| kinds of creative coding, interactive objects, spaces or physical experiences. | |||||
| http://arduino.cc/en/Reference/HomePage | |||||
| """ | |||||
| from io import open | |||||
| from os import listdir | |||||
| from os.path import isdir, isfile, join | |||||
| from SCons.Script import DefaultEnvironment | |||||
| env = DefaultEnvironment() | |||||
| platform = env.PioPlatform() | |||||
| FRAMEWORK_DIR = platform.get_package_dir("framework-arduinoteensy-cxx17") | |||||
| FRAMEWORK_VERSION = platform.get_package_version("framework-arduinoteensy-cxx17") | |||||
| BUILD_CORE = env.BoardConfig().get("build.core") | |||||
| assert isdir(FRAMEWORK_DIR) | |||||
| BUILTIN_USB_FLAGS = ( | |||||
| "USB_SERIAL", | |||||
| "USB_DUAL_SERIAL", | |||||
| "USB_TRIPLE_SERIAL", | |||||
| "USB_KEYBOARDONLY", | |||||
| "USB_TOUCHSCREEN", | |||||
| "USB_HID_TOUCHSCREEN", | |||||
| "USB_HID", | |||||
| "USB_SERIAL_HID", | |||||
| "USB_MIDI", | |||||
| "USB_MIDI4", | |||||
| "USB_MIDI16", | |||||
| "USB_MIDI_SERIAL", | |||||
| "USB_MIDI4_SERIAL", | |||||
| "USB_MIDI16_SERIAL", | |||||
| "USB_AUDIO", | |||||
| "USB_MIDI_AUDIO_SERIAL", | |||||
| "USB_MIDI16_AUDIO_SERIAL", | |||||
| "USB_MTPDISK", | |||||
| "USB_RAWHID", | |||||
| "USB_FLIGHTSIM", | |||||
| "USB_FLIGHTSIM_JOYSTICK", | |||||
| "USB_EVERYTHING", | |||||
| "USB_DISABLED", | |||||
| ) | |||||
| if not set(env.get("CPPDEFINES", [])) & set(BUILTIN_USB_FLAGS): | |||||
| env.Append(CPPDEFINES=["USB_SERIAL"]) | |||||
| env.Replace( | |||||
| SIZEPROGREGEXP=r"^(?:\.text|\.text\.progmem|\.text\.itcm|\.data)\s+([0-9]+).*", | |||||
| SIZEDATAREGEXP=r"^(?:\.usbdescriptortable|\.dmabuffers|\.usbbuffers|\.data|\.bss|\.noinit|\.text\.itcm|\.text\.itcm\.padding)\s+([0-9]+).*" | |||||
| ) | |||||
| env.Append( | |||||
| CPPDEFINES=[ | |||||
| ("ARDUINO", 10805), | |||||
| ("TEENSYDUINO", 149), | |||||
| "CORE_TEENSY" | |||||
| ], | |||||
| CPPPATH=[ | |||||
| join(FRAMEWORK_DIR, "cores", BUILD_CORE) | |||||
| ], | |||||
| LIBSOURCE_DIRS=[ | |||||
| join(FRAMEWORK_DIR, "libraries") | |||||
| ] | |||||
| ) | |||||
| if "BOARD" in env and BUILD_CORE == "teensy": | |||||
| env.Append( | |||||
| ASFLAGS=["-x", "assembler-with-cpp"], | |||||
| CCFLAGS=[ | |||||
| "-Os", # optimize for size | |||||
| "-Wall", # show warnings | |||||
| "-ffunction-sections", # place each function in its own section | |||||
| "-fdata-sections", | |||||
| "-mmcu=$BOARD_MCU" | |||||
| ], | |||||
| CXXFLAGS=[ | |||||
| "-fno-exceptions", | |||||
| "-felide-constructors", | |||||
| "-std=gnu++11", | |||||
| "-fpermissive" | |||||
| ], | |||||
| CPPDEFINES=[ | |||||
| ("F_CPU", "$BOARD_F_CPU"), | |||||
| "LAYOUT_US_ENGLISH" | |||||
| ], | |||||
| LINKFLAGS=[ | |||||
| "-Os", | |||||
| "-Wl,--gc-sections,--relax", | |||||
| "-mmcu=$BOARD_MCU" | |||||
| ], | |||||
| LIBS=["m"] | |||||
| ) | |||||
| elif "BOARD" in env and BUILD_CORE in ("teensy3", "teensy4", "teensy41"): | |||||
| env.Replace( | |||||
| AR="arm-none-eabi-gcc-ar", | |||||
| RANLIB="$AR" | |||||
| ) | |||||
| env.Append( | |||||
| ASFLAGS=["-x", "assembler-with-cpp"], | |||||
| CCFLAGS=[ | |||||
| "-Wall", # show warnings | |||||
| "-ffunction-sections", # place each function in its own section | |||||
| "-fdata-sections", | |||||
| "-mthumb", | |||||
| "-mcpu=%s" % env.BoardConfig().get("build.cpu"), | |||||
| "-fsingle-precision-constant" | |||||
| ], | |||||
| CXXFLAGS=[ | |||||
| "-fno-exceptions", | |||||
| "-felide-constructors", | |||||
| "-fno-rtti", | |||||
| "-std=gnu++17", | |||||
| "-Wno-error=narrowing", | |||||
| "-fpermissive" | |||||
| ], | |||||
| CPPDEFINES=[ | |||||
| ("F_CPU", "$BOARD_F_CPU"), | |||||
| "LAYOUT_US_ENGLISH" | |||||
| ], | |||||
| RANLIBFLAGS=["-s"], | |||||
| LINKFLAGS=[ | |||||
| "-Wl,--gc-sections,--relax", | |||||
| "-mthumb", | |||||
| "-mcpu=%s" % env.BoardConfig().get("build.cpu"), | |||||
| "-Wl,--defsym=__rtc_localtime=$UNIX_TIME", | |||||
| "-fsingle-precision-constant" | |||||
| ], | |||||
| LIBS=["m", "stdc++"] | |||||
| ) | |||||
| if not env.BoardConfig().get("build.ldscript", ""): | |||||
| env.Replace(LDSCRIPT_PATH=env.BoardConfig().get("build.arduino.ldscript", "")) | |||||
| if env.BoardConfig().id_ in ("teensy35", "teensy36", "teensy40", "teensy41"): | |||||
| fpv_version = "4-sp" | |||||
| if env.BoardConfig().id_.startswith("teensy4"): | |||||
| fpv_version = "5" | |||||
| env.Append( | |||||
| CCFLAGS=[ | |||||
| "-mfloat-abi=hard", | |||||
| "-mfpu=fpv%s-d16" % fpv_version | |||||
| ], | |||||
| LINKFLAGS=[ | |||||
| "-mfloat-abi=hard", | |||||
| "-mfpu=fpv%s-d16" % fpv_version | |||||
| ] | |||||
| ) | |||||
| # Optimization | |||||
| if "TEENSY_OPT_FASTER_LTO" in env['CPPDEFINES']: | |||||
| env.Append( | |||||
| CCFLAGS=["-O2", "-flto", "-fno-fat-lto-objects"], | |||||
| LINKFLAGS=["-O2", "-flto", "-fno-fat-lto-objects", "-fuse-linker-plugin"] | |||||
| ) | |||||
| elif "TEENSY_OPT_FAST" in env['CPPDEFINES']: | |||||
| env.Append( | |||||
| CCFLAGS=["-O1"], | |||||
| LINKFLAGS=["-O1"] | |||||
| ) | |||||
| elif "TEENSY_OPT_FAST_LTO" in env['CPPDEFINES']: | |||||
| env.Append( | |||||
| CCFLAGS=["-O1", "-flto", "-fno-fat-lto-objects"], | |||||
| LINKFLAGS=["-O1", "-flto", "-fno-fat-lto-objects", "-fuse-linker-plugin"] | |||||
| ) | |||||
| elif "TEENSY_OPT_FASTEST" in env['CPPDEFINES']: | |||||
| env.Append( | |||||
| CCFLAGS=["-O3"], | |||||
| LINKFLAGS=["-O3"] | |||||
| ) | |||||
| elif "TEENSY_OPT_FASTEST_LTO" in env['CPPDEFINES']: | |||||
| env.Append( | |||||
| CCFLAGS=["-O3", "-flto", "-fno-fat-lto-objects"], | |||||
| LINKFLAGS=["-O3", "-flto", "-fno-fat-lto-objects", "-fuse-linker-plugin"] | |||||
| ) | |||||
| elif "TEENSY_OPT_FASTEST_PURE_CODE" in env['CPPDEFINES']: | |||||
| env.Append( | |||||
| CCFLAGS=["-O3", "-mpure-code"], | |||||
| CPPDEFINES=["__PURE_CODE__"], | |||||
| LINKFLAGS=["-O3", "-mpure-code"] | |||||
| ) | |||||
| elif "TEENSY_OPT_FASTEST_PURE_CODE_LTO" in env['CPPDEFINES']: | |||||
| env.Append( | |||||
| CCFLAGS=["-O3", "-mpure-code", "-flto", "-fno-fat-lto-objects"], | |||||
| CPPDEFINES=["__PURE_CODE__"], | |||||
| LINKFLAGS=["-O3", "-mpure-code", "-flto", "-fno-fat-lto-objects", "-fuse-linker-plugin"] | |||||
| ) | |||||
| elif "TEENSY_OPT_DEBUG" in env['CPPDEFINES']: | |||||
| env.Append( | |||||
| CCFLAGS=["-g", "-Og"], | |||||
| LINKFLAGS=["-g", "-Og"] | |||||
| ) | |||||
| elif "TEENSY_OPT_DEBUG_LTO" in env['CPPDEFINES']: | |||||
| env.Append( | |||||
| CCFLAGS=["-g", "-Og", "-flto", "-fno-fat-lto-objects"], | |||||
| LINKFLAGS=["-g", "-Og", "-flto", "-fno-fat-lto-objects", "-fuse-linker-plugin"] | |||||
| ) | |||||
| elif "TEENSY_OPT_SMALLEST_CODE_LTO" in env['CPPDEFINES']: | |||||
| env.Append( | |||||
| CCFLAGS=["-Os", "--specs=nano.specs", "-flto", "-fno-fat-lto-objects"], | |||||
| LINKFLAGS=["-Os", "--specs=nano.specs", "-flto", "-fno-fat-lto-objects", "-fuse-linker-plugin"] | |||||
| ) | |||||
| elif "TEENSY_OPT_FASTER" in env['CPPDEFINES']: | |||||
| env.Append( | |||||
| CCFLAGS=["-O2"], | |||||
| LINKFLAGS=["-O2"] | |||||
| ) | |||||
| elif "TEENSY_OPT_SMALLEST_CODE" in env['CPPDEFINES']: | |||||
| env.Append( | |||||
| CCFLAGS=["-Os", "--specs=nano.specs"], | |||||
| LINKFLAGS=["-Os", "--specs=nano.specs"] | |||||
| ) | |||||
| # default profiles | |||||
| else: | |||||
| # for Teensy LC => TEENSY_OPT_SMALLEST_CODE | |||||
| if env.BoardConfig().id_ == "teensylc": | |||||
| env.Append( | |||||
| CCFLAGS=["-Os", "--specs=nano.specs"], | |||||
| LINKFLAGS=["-Os", "--specs=nano.specs"] | |||||
| ) | |||||
| # for others => TEENSY_OPT_FASTER | |||||
| else: | |||||
| env.Append( | |||||
| CCFLAGS=["-O2"], | |||||
| LINKFLAGS=["-O2"] | |||||
| ) | |||||
| env.Append( | |||||
| ASFLAGS=env.get("CCFLAGS", [])[:] | |||||
| ) | |||||
| if "cortex-m" in env.BoardConfig().get("build.cpu", ""): | |||||
| board = env.subst("$BOARD") | |||||
| math_lib = "arm_cortex%s_math" | |||||
| if board in ("teensy35", "teensy36"): | |||||
| math_lib = math_lib % "M4lf" | |||||
| elif board in ("teensy30", "teensy31"): | |||||
| math_lib = math_lib % "M4l" | |||||
| elif board.startswith("teensy4"): | |||||
| math_lib = math_lib % "M7lfsp" | |||||
| else: | |||||
| math_lib = math_lib % "M0l" | |||||
| env.Prepend(LIBS=[math_lib]) | |||||
| # Teensy 2.x Core | |||||
| if BUILD_CORE == "teensy": | |||||
| env.Append(CPPPATH=[join(FRAMEWORK_DIR, "cores")]) | |||||
| # search relative includes in teensy directories | |||||
| core_dir = join(FRAMEWORK_DIR, "cores", "teensy") | |||||
| for item in sorted(listdir(core_dir)): | |||||
| file_path = join(core_dir, item) | |||||
| if not isfile(file_path): | |||||
| continue | |||||
| content = None | |||||
| content_changed = False | |||||
| with open(file_path, encoding="latin-1") as fp: | |||||
| content = fp.read() | |||||
| if '#include "../' in content: | |||||
| content_changed = True | |||||
| content = content.replace('#include "../', '#include "') | |||||
| if not content_changed: | |||||
| continue | |||||
| with open(file_path, "w", encoding="latin-1") as fp: | |||||
| fp.write(content) | |||||
| else: | |||||
| env.Prepend(LIBPATH=[join(FRAMEWORK_DIR, "cores", BUILD_CORE)]) | |||||
| # | |||||
| # Target: Build Core Library | |||||
| # | |||||
| libs = [] | |||||
| if "build.variant" in env.BoardConfig(): | |||||
| env.Append( | |||||
| CPPPATH=[ | |||||
| join(FRAMEWORK_DIR, "variants", | |||||
| env.BoardConfig().get("build.variant")) | |||||
| ] | |||||
| ) | |||||
| libs.append(env.BuildLibrary( | |||||
| join("$BUILD_DIR", "FrameworkArduinoVariant"), | |||||
| join(FRAMEWORK_DIR, "variants", env.BoardConfig().get("build.variant")) | |||||
| )) | |||||
| libs.append(env.BuildLibrary( | |||||
| join("$BUILD_DIR", "FrameworkArduino"), | |||||
| join(FRAMEWORK_DIR, "cores", BUILD_CORE) | |||||
| )) | |||||
| env.Prepend(LIBS=libs) |
| # Copyright 2014-present PlatformIO <contact@platformio.org> | |||||
| # | |||||
| # Licensed under the Apache License, Version 2.0 (the "License"); | |||||
| # you may not use this file except in compliance with the License. | |||||
| # You may obtain a copy of the License at | |||||
| # | |||||
| # http://www.apache.org/licenses/LICENSE-2.0 | |||||
| # | |||||
| # Unless required by applicable law or agreed to in writing, software | |||||
| # distributed under the License is distributed on an "AS IS" BASIS, | |||||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
| # See the License for the specific language governing permissions and | |||||
| # limitations under the License. | |||||
| """ | |||||
| mbed | |||||
| The mbed framework The mbed SDK has been designed to provide enough | |||||
| hardware abstraction to be intuitive and concise, yet powerful enough to | |||||
| build complex projects. It is built on the low-level ARM CMSIS APIs, | |||||
| allowing you to code down to the metal if needed. In addition to RTOS, | |||||
| USB and Networking libraries, a cookbook of hundreds of reusable | |||||
| peripheral and module libraries have been built on top of the SDK by | |||||
| the mbed Developer Community. | |||||
| http://mbed.org/ | |||||
| """ | |||||
| from os.path import join | |||||
| from SCons.Script import Import, SConscript | |||||
| Import("env") | |||||
| # https://github.com/platformio/builder-framework-mbed.git | |||||
| SConscript( | |||||
| join(env.PioPlatform().get_package_dir("framework-mbed"), "platformio", | |||||
| "platformio-build.py")) |
| # Copyright 2014-present PlatformIO <contact@platformio.org> | |||||
| # | |||||
| # Licensed under the Apache License, Version 2.0 (the "License"); | |||||
| # you may not use this file except in compliance with the License. | |||||
| # You may obtain a copy of the License at | |||||
| # | |||||
| # http://www.apache.org/licenses/LICENSE-2.0 | |||||
| # | |||||
| # Unless required by applicable law or agreed to in writing, software | |||||
| # distributed under the License is distributed on an "AS IS" BASIS, | |||||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
| # See the License for the specific language governing permissions and | |||||
| # limitations under the License. | |||||
| import sys | |||||
| from platform import system | |||||
| from os import makedirs | |||||
| from os.path import isdir, isfile, join | |||||
| from SCons.Script import (COMMAND_LINE_TARGETS, AlwaysBuild, Builder, Default, | |||||
| DefaultEnvironment) | |||||
| env = DefaultEnvironment() | |||||
| platform = env.PioPlatform() | |||||
| board_config = env.BoardConfig() | |||||
| env.Replace( | |||||
| ARFLAGS=["rc"], | |||||
| SIZEPROGREGEXP=r"^(?:\.text|\.data|\.rodata|\.text.align|\.ARM.exidx)\s+(\d+).*", | |||||
| SIZEDATAREGEXP=r"^(?:\.data|\.bss|\.noinit)\s+(\d+).*", | |||||
| SIZECHECKCMD="$SIZETOOL -A -d $SOURCES", | |||||
| PROGSUFFIX=".elf" | |||||
| ) | |||||
| # Allow user to override via pre:script | |||||
| if env.get("PROGNAME", "program") == "program": | |||||
| env.Replace(PROGNAME="firmware") | |||||
| if "BOARD" in env and board_config.get("build.core") == "teensy": | |||||
| env.Replace( | |||||
| AR="avr-ar", | |||||
| AS="avr-as", | |||||
| CC="avr-gcc", | |||||
| CXX="avr-g++", | |||||
| GDB="avr-gdb", | |||||
| OBJCOPY="avr-objcopy", | |||||
| RANLIB="avr-ranlib", | |||||
| SIZETOOL="avr-size", | |||||
| SIZEPRINTCMD='$SIZETOOL --mcu=$BOARD_MCU -C -d $SOURCES' | |||||
| ) | |||||
| env.Append( | |||||
| BUILDERS=dict( | |||||
| ElfToEep=Builder( | |||||
| action=env.VerboseAction(" ".join([ | |||||
| "$OBJCOPY", | |||||
| "-O", | |||||
| "ihex", | |||||
| "-j", | |||||
| ".eeprom", | |||||
| '--set-section-flags=.eeprom="alloc,load"', | |||||
| "--no-change-warnings", | |||||
| "--change-section-lma", | |||||
| ".eeprom=0", | |||||
| "$SOURCES", | |||||
| "$TARGET" | |||||
| ]), "Building $TARGET"), | |||||
| suffix=".eep" | |||||
| ), | |||||
| ElfToHex=Builder( | |||||
| action=env.VerboseAction(" ".join([ | |||||
| "$OBJCOPY", | |||||
| "-O", | |||||
| "ihex", | |||||
| "-R", | |||||
| ".eeprom", | |||||
| "$SOURCES", | |||||
| "$TARGET" | |||||
| ]), "Building $TARGET"), | |||||
| suffix=".hex" | |||||
| ) | |||||
| ) | |||||
| ) | |||||
| if not env.get("PIOFRAMEWORK"): | |||||
| env.SConscript("frameworks/_bare_avr.py") | |||||
| elif "BOARD" in env and board_config.get("build.core") in ("teensy3", "teensy4", "teensy41"): | |||||
| env.Replace( | |||||
| AR="arm-none-eabi-ar", | |||||
| AS="arm-none-eabi-as", | |||||
| CC="arm-none-eabi-gcc", | |||||
| CXX="arm-none-eabi-g++", | |||||
| GDB="arm-none-eabi-gdb", | |||||
| OBJCOPY="arm-none-eabi-objcopy", | |||||
| RANLIB="arm-none-eabi-gcc-ranlib", | |||||
| SIZETOOL="arm-none-eabi-size", | |||||
| SIZEPRINTCMD='$SIZETOOL -B -d $SOURCES' | |||||
| ) | |||||
| env.Append( | |||||
| BUILDERS=dict( | |||||
| ElfToBin=Builder( | |||||
| action=env.VerboseAction(" ".join([ | |||||
| "$OBJCOPY", | |||||
| "-O", | |||||
| "binary", | |||||
| "$SOURCES", | |||||
| "$TARGET" | |||||
| ]), "Building $TARGET"), | |||||
| suffix=".bin" | |||||
| ), | |||||
| ElfToHex=Builder( | |||||
| action=env.VerboseAction(" ".join([ | |||||
| "$OBJCOPY", | |||||
| "-O", | |||||
| "ihex", | |||||
| "-R", | |||||
| ".eeprom", | |||||
| "$SOURCES", | |||||
| "$TARGET" | |||||
| ]), "Building $TARGET"), | |||||
| suffix=".hex" | |||||
| ) | |||||
| ) | |||||
| ) | |||||
| if not env.get("PIOFRAMEWORK"): | |||||
| env.SConscript("frameworks/_bare_arm.py") | |||||
| # | |||||
| # Target: Build executable and linkable firmware | |||||
| # | |||||
| target_elf = None | |||||
| if "nobuild" in COMMAND_LINE_TARGETS: | |||||
| target_elf = join("$BUILD_DIR", "${PROGNAME}.elf") | |||||
| target_firm = join("$BUILD_DIR", "${PROGNAME}.hex") | |||||
| else: | |||||
| target_elf = env.BuildProgram() | |||||
| target_firm = env.ElfToHex(join("$BUILD_DIR", "${PROGNAME}"), target_elf) | |||||
| AlwaysBuild(env.Alias("nobuild", target_firm)) | |||||
| target_buildprog = env.Alias("buildprog", target_firm, target_firm) | |||||
| # | |||||
| # Target: Print binary size | |||||
| # | |||||
| target_size = env.Alias( | |||||
| "size", target_elf, | |||||
| env.VerboseAction("$SIZEPRINTCMD", "Calculating size $SOURCE")) | |||||
| AlwaysBuild(target_size) | |||||
| # | |||||
| # Target: Upload by default firmware file | |||||
| # | |||||
| # Force Teensy CLI when Teensy App is not available (Linux ARM) | |||||
| if env.subst("$UPLOAD_PROTOCOL") == "teensy-gui" and not isfile( | |||||
| join( | |||||
| platform.get_package_dir("tool-teensy") or "", | |||||
| "teensy_post_compile.exe" | |||||
| if system() == "Windows" else "teensy_post_compile")): | |||||
| env.Replace(UPLOAD_PROTOCOL="teensy-cli") | |||||
| upload_protocol = env.subst("$UPLOAD_PROTOCOL") | |||||
| upload_actions = [] | |||||
| if upload_protocol.startswith("jlink"): | |||||
| def _jlink_cmd_script(env, source): | |||||
| build_dir = env.subst("$BUILD_DIR") | |||||
| if not isdir(build_dir): | |||||
| makedirs(build_dir) | |||||
| script_path = join(build_dir, "upload.jlink") | |||||
| commands = ["h", "loadfile %s" % source, "r", "q"] | |||||
| with open(script_path, "w") as fp: | |||||
| fp.write("\n".join(commands)) | |||||
| return script_path | |||||
| env.Replace( | |||||
| __jlink_cmd_script=_jlink_cmd_script, | |||||
| UPLOADER="JLink.exe" if system() == "Windows" else "JLinkExe", | |||||
| UPLOADERFLAGS=[ | |||||
| "-device", board_config.get("debug", {}).get("jlink_device"), | |||||
| "-speed", "4000", | |||||
| "-if", ("jtag" if upload_protocol == "jlink-jtag" else "swd"), | |||||
| "-autoconnect", "1", | |||||
| "-NoGui", "1" | |||||
| ], | |||||
| UPLOADCMD='$UPLOADER $UPLOADERFLAGS -CommanderScript "${__jlink_cmd_script(__env__, SOURCE)}"' | |||||
| ) | |||||
| upload_actions = [env.VerboseAction("$UPLOADCMD", "Uploading $SOURCE")] | |||||
| elif upload_protocol == "teensy-cli": | |||||
| env.Replace( | |||||
| REBOOTER="teensy_reboot", | |||||
| UPLOADER="teensy_loader_cli", | |||||
| UPLOADERFLAGS=[ | |||||
| "-mmcu=$BOARD_MCU", | |||||
| "-w", # wait for device to appear | |||||
| "-s", # soft reboot if device not online | |||||
| "-v" # verbose output | |||||
| ], | |||||
| UPLOADCMD="$UPLOADER $UPLOADERFLAGS $SOURCES" | |||||
| ) | |||||
| upload_actions = [ | |||||
| env.VerboseAction("$REBOOTER -s", "Rebooting..."), | |||||
| env.VerboseAction("$UPLOADCMD", "Uploading $SOURCE") | |||||
| ] | |||||
| elif upload_protocol == "teensy-gui": | |||||
| env.Replace( | |||||
| UPLOADER="teensy_post_compile", | |||||
| UPLOADERFLAGS=[ | |||||
| "-file=${PROGNAME}", '-path="$BUILD_DIR"', | |||||
| "-tools=%s" % (platform.get_package_dir("tool-teensy") or ""), | |||||
| "-board=%s" % board_config.id.upper(), | |||||
| "-reboot" | |||||
| ], | |||||
| UPLOADCMD="$UPLOADER $UPLOADERFLAGS" | |||||
| ) | |||||
| upload_actions = [env.VerboseAction("$UPLOADCMD", "Uploading $SOURCE")] | |||||
| # custom upload tool | |||||
| elif upload_protocol == "custom": | |||||
| upload_actions = [env.VerboseAction("$UPLOADCMD", "Uploading $SOURCE")] | |||||
| else: | |||||
| sys.stderr.write("Warning! Unknown upload protocol %s\n" % upload_protocol) | |||||
| AlwaysBuild(env.Alias("upload", target_firm, upload_actions)) | |||||
| # | |||||
| # Default targets | |||||
| # | |||||
| Default([target_buildprog, target_size]) |
| .pioenvs | |||||
| .piolibdeps |
| # Continuous Integration (CI) is the practice, in software | |||||
| # engineering, of merging all developer working copies with a shared mainline | |||||
| # several times a day < https://docs.platformio.org/page/ci/index.html > | |||||
| # | |||||
| # Documentation: | |||||
| # | |||||
| # * Travis CI Embedded Builds with PlatformIO | |||||
| # < https://docs.travis-ci.com/user/integration/platformio/ > | |||||
| # | |||||
| # * PlatformIO integration with Travis CI | |||||
| # < https://docs.platformio.org/page/ci/travis.html > | |||||
| # | |||||
| # * User Guide for `platformio ci` command | |||||
| # < https://docs.platformio.org/page/userguide/cmd_ci.html > | |||||
| # | |||||
| # | |||||
| # Please choose one of the following templates (proposed below) and uncomment | |||||
| # it (remove "# " before each line) or use own configuration according to the | |||||
| # Travis CI documentation (see above). | |||||
| # | |||||
| # | |||||
| # Template #1: General project. Test it using existing `platformio.ini`. | |||||
| # | |||||
| # language: python | |||||
| # python: | |||||
| # - "2.7" | |||||
| # | |||||
| # sudo: false | |||||
| # cache: | |||||
| # directories: | |||||
| # - "~/.platformio" | |||||
| # | |||||
| # install: | |||||
| # - pip install -U platformio | |||||
| # - platformio update | |||||
| # | |||||
| # script: | |||||
| # - platformio run | |||||
| # | |||||
| # Template #2: The project is intended to be used as a library with examples. | |||||
| # | |||||
| # language: python | |||||
| # python: | |||||
| # - "2.7" | |||||
| # | |||||
| # sudo: false | |||||
| # cache: | |||||
| # directories: | |||||
| # - "~/.platformio" | |||||
| # | |||||
| # env: | |||||
| # - PLATFORMIO_CI_SRC=path/to/test/file.c | |||||
| # - PLATFORMIO_CI_SRC=examples/file.ino | |||||
| # - PLATFORMIO_CI_SRC=path/to/test/directory | |||||
| # | |||||
| # install: | |||||
| # - pip install -U platformio | |||||
| # - platformio update | |||||
| # | |||||
| # script: | |||||
| # - platformio ci --lib="." --board=ID_1 --board=ID_2 --board=ID_N |
| .. Copyright 2014-present PlatformIO <contact@platformio.org> | |||||
| Licensed under the Apache License, Version 2.0 (the "License"); | |||||
| you may not use this file except in compliance with the License. | |||||
| You may obtain a copy of the License at | |||||
| http://www.apache.org/licenses/LICENSE-2.0 | |||||
| Unless required by applicable law or agreed to in writing, software | |||||
| distributed under the License is distributed on an "AS IS" BASIS, | |||||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
| See the License for the specific language governing permissions and | |||||
| limitations under the License. | |||||
| How to build PlatformIO based project | |||||
| ===================================== | |||||
| 1. `Install PlatformIO Core <http://docs.platformio.org/page/core.html>`_ | |||||
| 2. Download `development platform with examples <https://github.com/platformio/platform-teensy/archive/develop.zip>`_ | |||||
| 3. Extract ZIP archive | |||||
| 4. Run these commands: | |||||
| .. code-block:: bash | |||||
| # Change directory to example | |||||
| > cd platform-teensy/examples/arduino-blink | |||||
| # Build project | |||||
| > platformio run | |||||
| # Upload firmware | |||||
| > platformio run --target upload | |||||
| # Build specific environment | |||||
| > platformio run -e teensy31 | |||||
| # Upload firmware for the specific environment | |||||
| > platformio run -e teensy31 --target upload | |||||
| # Clean build files | |||||
| > platformio run --target clean |
| This directory is intended for project header files. | |||||
| A header file is a file containing C declarations and macro definitions | |||||
| to be shared between several project source files. You request the use of a | |||||
| header file in your project source file (C, C++, etc) located in `src` folder | |||||
| by including it, with the C preprocessing directive `#include'. | |||||
| ```src/main.c | |||||
| #include "header.h" | |||||
| int main (void) | |||||
| { | |||||
| ... | |||||
| } | |||||
| ``` | |||||
| Including a header file produces the same results as copying the header file | |||||
| into each source file that needs it. Such copying would be time-consuming | |||||
| and error-prone. With a header file, the related declarations appear | |||||
| in only one place. If they need to be changed, they can be changed in one | |||||
| place, and programs that include the header file will automatically use the | |||||
| new version when next recompiled. The header file eliminates the labor of | |||||
| finding and changing all the copies as well as the risk that a failure to | |||||
| find one copy will result in inconsistencies within a program. | |||||
| In C, the usual convention is to give header files names that end with `.h'. | |||||
| It is most portable to use only letters, digits, dashes, and underscores in | |||||
| header file names, and at most one dot. | |||||
| Read more about using header files in official GCC documentation: | |||||
| * Include Syntax | |||||
| * Include Operation | |||||
| * Once-Only Headers | |||||
| * Computed Includes | |||||
| https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html |
| This directory is intended for project specific (private) libraries. | |||||
| PlatformIO will compile them to static libraries and link into executable file. | |||||
| The source code of each library should be placed in a an own separate directory | |||||
| ("lib/your_library_name/[here are source files]"). | |||||
| For example, see a structure of the following two libraries `Foo` and `Bar`: | |||||
| |--lib | |||||
| | | | |||||
| | |--Bar | |||||
| | | |--docs | |||||
| | | |--examples | |||||
| | | |--src | |||||
| | | |- Bar.c | |||||
| | | |- Bar.h | |||||
| | | |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html | |||||
| | | | |||||
| | |--Foo | |||||
| | | |- Foo.c | |||||
| | | |- Foo.h | |||||
| | | | |||||
| | |- README --> THIS FILE | |||||
| | | |||||
| |- platformio.ini | |||||
| |--src | |||||
| |- main.c | |||||
| and a contents of `src/main.c`: | |||||
| ``` | |||||
| #include <Foo.h> | |||||
| #include <Bar.h> | |||||
| int main (void) | |||||
| { | |||||
| ... | |||||
| } | |||||
| ``` | |||||
| PlatformIO Library Dependency Finder will find automatically dependent | |||||
| libraries scanning project source files. | |||||
| More information about PlatformIO Library Dependency Finder | |||||
| - https://docs.platformio.org/page/librarymanager/ldf.html |
| ; PlatformIO Project Configuration File | |||||
| ; | |||||
| ; Build options: build flags, source filter, extra scripting | |||||
| ; Upload options: custom port, speed and extra flags | |||||
| ; Library options: dependencies, extra library storages | |||||
| ; | |||||
| ; Please visit documentation for the other options and examples | |||||
| ; http://docs.platformio.org/page/projectconf.html | |||||
| [env:teensy2] | |||||
| platform = teensy | |||||
| framework = arduino | |||||
| board = teensy2 | |||||
| [env:teensy 2pp] | |||||
| platform = teensy | |||||
| framework = arduino | |||||
| board = teensy2pp | |||||
| [env:teensy30] | |||||
| platform = teensy | |||||
| framework = arduino | |||||
| board = teensy30 | |||||
| [env:teensy31] | |||||
| platform = teensy | |||||
| framework = arduino | |||||
| board = teensy31 | |||||
| [env:teensylc] | |||||
| platform = teensy | |||||
| framework = arduino | |||||
| board = teensylc | |||||
| [env:teensy35] | |||||
| platform = teensy | |||||
| framework = arduino | |||||
| board = teensy35 | |||||
| [env:teensy36] | |||||
| platform = teensy | |||||
| framework = arduino | |||||
| board = teensy36 | |||||
| [env:teensy40] | |||||
| platform = teensy | |||||
| framework = arduino | |||||
| board = teensy40 | |||||
| [env:teensy41] | |||||
| platform = teensy | |||||
| framework = arduino | |||||
| board = teensy41 |
| /* | |||||
| * Blink | |||||
| * Turns on an LED on for one second, | |||||
| * then off for one second, repeatedly. | |||||
| */ | |||||
| #include <Arduino.h> | |||||
| void setup() | |||||
| { | |||||
| // initialize LED digital pin as an output. | |||||
| pinMode(LED_BUILTIN, OUTPUT); | |||||
| } | |||||
| void loop() | |||||
| { | |||||
| // turn the LED on (HIGH is the voltage level) | |||||
| digitalWrite(LED_BUILTIN, HIGH); | |||||
| // wait for a second | |||||
| delay(1000); | |||||
| // turn the LED off by making the voltage LOW | |||||
| digitalWrite(LED_BUILTIN, LOW); | |||||
| // wait for a second | |||||
| delay(1000); | |||||
| } |
| This directory is intended for PIO Unit Testing and project tests. | |||||
| Unit Testing is a software testing method by which individual units of | |||||
| source code, sets of one or more MCU program modules together with associated | |||||
| control data, usage procedures, and operating procedures, are tested to | |||||
| determine whether they are fit for use. Unit testing finds problems early | |||||
| in the development cycle. | |||||
| More information about PIO Unit Testing: | |||||
| - https://docs.platformio.org/page/plus/unit-testing.html |
| .pioenvs | |||||
| .piolibdeps |
| # Continuous Integration (CI) is the practice, in software | |||||
| # engineering, of merging all developer working copies with a shared mainline | |||||
| # several times a day < https://docs.platformio.org/page/ci/index.html > | |||||
| # | |||||
| # Documentation: | |||||
| # | |||||
| # * Travis CI Embedded Builds with PlatformIO | |||||
| # < https://docs.travis-ci.com/user/integration/platformio/ > | |||||
| # | |||||
| # * PlatformIO integration with Travis CI | |||||
| # < https://docs.platformio.org/page/ci/travis.html > | |||||
| # | |||||
| # * User Guide for `platformio ci` command | |||||
| # < https://docs.platformio.org/page/userguide/cmd_ci.html > | |||||
| # | |||||
| # | |||||
| # Please choose one of the following templates (proposed below) and uncomment | |||||
| # it (remove "# " before each line) or use own configuration according to the | |||||
| # Travis CI documentation (see above). | |||||
| # | |||||
| # | |||||
| # Template #1: General project. Test it using existing `platformio.ini`. | |||||
| # | |||||
| # language: python | |||||
| # python: | |||||
| # - "2.7" | |||||
| # | |||||
| # sudo: false | |||||
| # cache: | |||||
| # directories: | |||||
| # - "~/.platformio" | |||||
| # | |||||
| # install: | |||||
| # - pip install -U platformio | |||||
| # - platformio update | |||||
| # | |||||
| # script: | |||||
| # - platformio run | |||||
| # | |||||
| # Template #2: The project is intended to be used as a library with examples. | |||||
| # | |||||
| # language: python | |||||
| # python: | |||||
| # - "2.7" | |||||
| # | |||||
| # sudo: false | |||||
| # cache: | |||||
| # directories: | |||||
| # - "~/.platformio" | |||||
| # | |||||
| # env: | |||||
| # - PLATFORMIO_CI_SRC=path/to/test/file.c | |||||
| # - PLATFORMIO_CI_SRC=examples/file.ino | |||||
| # - PLATFORMIO_CI_SRC=path/to/test/directory | |||||
| # | |||||
| # install: | |||||
| # - pip install -U platformio | |||||
| # - platformio update | |||||
| # | |||||
| # script: | |||||
| # - platformio ci --lib="." --board=ID_1 --board=ID_2 --board=ID_N |
| .. Copyright 2014-present PlatformIO <contact@platformio.org> | |||||
| Licensed under the Apache License, Version 2.0 (the "License"); | |||||
| you may not use this file except in compliance with the License. | |||||
| You may obtain a copy of the License at | |||||
| http://www.apache.org/licenses/LICENSE-2.0 | |||||
| Unless required by applicable law or agreed to in writing, software | |||||
| distributed under the License is distributed on an "AS IS" BASIS, | |||||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
| See the License for the specific language governing permissions and | |||||
| limitations under the License. | |||||
| How to build PlatformIO based project | |||||
| ===================================== | |||||
| 1. `Install PlatformIO Core <http://docs.platformio.org/page/core.html>`_ | |||||
| 2. Download `development platform with examples <https://github.com/platformio/platform-teensy/archive/develop.zip>`_ | |||||
| 3. Extract ZIP archive | |||||
| 4. Run these commands: | |||||
| .. code-block:: bash | |||||
| # Change directory to example | |||||
| > cd platform-teensy/examples/arduino-hid-usb-mouse | |||||
| # Build project | |||||
| > platformio run | |||||
| # Upload firmware | |||||
| > platformio run --target upload | |||||
| # Clean build files | |||||
| > platformio run --target clean |
| This directory is intended for project header files. | |||||
| A header file is a file containing C declarations and macro definitions | |||||
| to be shared between several project source files. You request the use of a | |||||
| header file in your project source file (C, C++, etc) located in `src` folder | |||||
| by including it, with the C preprocessing directive `#include'. | |||||
| ```src/main.c | |||||
| #include "header.h" | |||||
| int main (void) | |||||
| { | |||||
| ... | |||||
| } | |||||
| ``` | |||||
| Including a header file produces the same results as copying the header file | |||||
| into each source file that needs it. Such copying would be time-consuming | |||||
| and error-prone. With a header file, the related declarations appear | |||||
| in only one place. If they need to be changed, they can be changed in one | |||||
| place, and programs that include the header file will automatically use the | |||||
| new version when next recompiled. The header file eliminates the labor of | |||||
| finding and changing all the copies as well as the risk that a failure to | |||||
| find one copy will result in inconsistencies within a program. | |||||
| In C, the usual convention is to give header files names that end with `.h'. | |||||
| It is most portable to use only letters, digits, dashes, and underscores in | |||||
| header file names, and at most one dot. | |||||
| Read more about using header files in official GCC documentation: | |||||
| * Include Syntax | |||||
| * Include Operation | |||||
| * Once-Only Headers | |||||
| * Computed Includes | |||||
| https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html |
| This directory is intended for project specific (private) libraries. | |||||
| PlatformIO will compile them to static libraries and link into executable file. | |||||
| The source code of each library should be placed in a an own separate directory | |||||
| ("lib/your_library_name/[here are source files]"). | |||||
| For example, see a structure of the following two libraries `Foo` and `Bar`: | |||||
| |--lib | |||||
| | | | |||||
| | |--Bar | |||||
| | | |--docs | |||||
| | | |--examples | |||||
| | | |--src | |||||
| | | |- Bar.c | |||||
| | | |- Bar.h | |||||
| | | |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html | |||||
| | | | |||||
| | |--Foo | |||||
| | | |- Foo.c | |||||
| | | |- Foo.h | |||||
| | | | |||||
| | |- README --> THIS FILE | |||||
| | | |||||
| |- platformio.ini | |||||
| |--src | |||||
| |- main.c | |||||
| and a contents of `src/main.c`: | |||||
| ``` | |||||
| #include <Foo.h> | |||||
| #include <Bar.h> | |||||
| int main (void) | |||||
| { | |||||
| ... | |||||
| } | |||||
| ``` | |||||
| PlatformIO Library Dependency Finder will find automatically dependent | |||||
| libraries scanning project source files. | |||||
| More information about PlatformIO Library Dependency Finder | |||||
| - https://docs.platformio.org/page/librarymanager/ldf.html |
| ; PlatformIO Project Configuration File | |||||
| ; | |||||
| ; Build options: build flags, source filter, extra scripting | |||||
| ; Upload options: custom port, speed and extra flags | |||||
| ; Library options: dependencies, extra library storages | |||||
| ; | |||||
| ; Please visit documentation for the other options and examples | |||||
| ; http://docs.platformio.org/page/projectconf.html | |||||
| [env:teensy2] | |||||
| platform = teensy | |||||
| framework = arduino | |||||
| board = teensy2 | |||||
| build_flags = -DUSB_SERIAL_HID | |||||
| [env:teensy2pp] | |||||
| platform = teensy | |||||
| framework = arduino | |||||
| board = teensy2pp | |||||
| build_flags = -DUSB_SERIAL_HID | |||||
| [env:teensy30] | |||||
| platform = teensy | |||||
| framework = arduino | |||||
| board = teensy30 | |||||
| build_flags = -DUSB_SERIAL_HID | |||||
| [env:teensy31] | |||||
| platform = teensy | |||||
| framework = arduino | |||||
| board = teensy31 | |||||
| build_flags = -DUSB_SERIAL_HID | |||||
| [env:teensylc] | |||||
| platform = teensy | |||||
| framework = arduino | |||||
| board = teensylc | |||||
| build_flags = -DUSB_SERIAL_HID | |||||
| [env:teensy35] | |||||
| platform = teensy | |||||
| framework = arduino | |||||
| board = teensy35 | |||||
| build_flags = -DUSB_SERIAL_HID | |||||
| [env:teensy36] | |||||
| platform = teensy | |||||
| framework = arduino | |||||
| board = teensy36 | |||||
| build_flags = -DUSB_SERIAL_HID |
| /* Simple USB Mouse Example | |||||
| Teensy becomes a USB mouse and moves the cursor in a triangle | |||||
| You must select Mouse from the "Tools > USB Type" menu | |||||
| This example code is in the public domain. | |||||
| */ | |||||
| #include <Arduino.h> | |||||
| void setup() { } // no setup needed | |||||
| void loop() { | |||||
| int i; | |||||
| for (i=0; i<40; i++) { | |||||
| Mouse.move(2, -1); | |||||
| delay(25); | |||||
| } | |||||
| for (i=0; i<40; i++) { | |||||
| Mouse.move(2, 2); | |||||
| delay(25); | |||||
| } | |||||
| for (i=0; i<40; i++) { | |||||
| Mouse.move(-4, -1); | |||||
| delay(25); | |||||
| } | |||||
| } |
| This directory is intended for PIO Unit Testing and project tests. | |||||
| Unit Testing is a software testing method by which individual units of | |||||
| source code, sets of one or more MCU program modules together with associated | |||||
| control data, usage procedures, and operating procedures, are tested to | |||||
| determine whether they are fit for use. Unit testing finds problems early | |||||
| in the development cycle. | |||||
| More information about PIO Unit Testing: | |||||
| - https://docs.platformio.org/page/plus/unit-testing.html |
| .pioenvs | |||||
| .piolibdeps |
| # Continuous Integration (CI) is the practice, in software | |||||
| # engineering, of merging all developer working copies with a shared mainline | |||||
| # several times a day < https://docs.platformio.org/page/ci/index.html > | |||||
| # | |||||
| # Documentation: | |||||
| # | |||||
| # * Travis CI Embedded Builds with PlatformIO | |||||
| # < https://docs.travis-ci.com/user/integration/platformio/ > | |||||
| # | |||||
| # * PlatformIO integration with Travis CI | |||||
| # < https://docs.platformio.org/page/ci/travis.html > | |||||
| # | |||||
| # * User Guide for `platformio ci` command | |||||
| # < https://docs.platformio.org/page/userguide/cmd_ci.html > | |||||
| # | |||||
| # | |||||
| # Please choose one of the following templates (proposed below) and uncomment | |||||
| # it (remove "# " before each line) or use own configuration according to the | |||||
| # Travis CI documentation (see above). | |||||
| # | |||||
| # | |||||
| # Template #1: General project. Test it using existing `platformio.ini`. | |||||
| # | |||||
| # language: python | |||||
| # python: | |||||
| # - "2.7" | |||||
| # | |||||
| # sudo: false | |||||
| # cache: | |||||
| # directories: | |||||
| # - "~/.platformio" | |||||
| # | |||||
| # install: | |||||
| # - pip install -U platformio | |||||
| # - platformio update | |||||
| # | |||||
| # script: | |||||
| # - platformio run | |||||
| # | |||||
| # Template #2: The project is intended to be used as a library with examples. | |||||
| # | |||||
| # language: python | |||||
| # python: | |||||
| # - "2.7" | |||||
| # | |||||
| # sudo: false | |||||
| # cache: | |||||
| # directories: | |||||
| # - "~/.platformio" | |||||
| # | |||||
| # env: | |||||
| # - PLATFORMIO_CI_SRC=path/to/test/file.c | |||||
| # - PLATFORMIO_CI_SRC=examples/file.ino | |||||
| # - PLATFORMIO_CI_SRC=path/to/test/directory | |||||
| # | |||||
| # install: | |||||
| # - pip install -U platformio | |||||
| # - platformio update | |||||
| # | |||||
| # script: | |||||
| # - platformio ci --lib="." --board=ID_1 --board=ID_2 --board=ID_N |
| .. Copyright 2014-present PlatformIO <contact@platformio.org> | |||||
| Licensed under the Apache License, Version 2.0 (the "License"); | |||||
| you may not use this file except in compliance with the License. | |||||
| You may obtain a copy of the License at | |||||
| http://www.apache.org/licenses/LICENSE-2.0 | |||||
| Unless required by applicable law or agreed to in writing, software | |||||
| distributed under the License is distributed on an "AS IS" BASIS, | |||||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
| See the License for the specific language governing permissions and | |||||
| limitations under the License. | |||||
| How to build PlatformIO based project | |||||
| ===================================== | |||||
| 1. `Install PlatformIO Core <http://docs.platformio.org/page/core.html>`_ | |||||
| 2. Download `development platform with examples <https://github.com/platformio/platform-teensy/archive/develop.zip>`_ | |||||
| 3. Extract ZIP archive | |||||
| 4. Run these commands: | |||||
| .. code-block:: bash | |||||
| # Change directory to example | |||||
| > cd platform-teensy/examples/arduino-internal-libs | |||||
| # Build project | |||||
| > platformio run | |||||
| # Upload firmware | |||||
| > platformio run --target upload | |||||
| # Build specific environment | |||||
| > platformio run -e teensy31 | |||||
| # Upload firmware for the specific environment | |||||
| > platformio run -e teensy31 --target upload | |||||
| # Clean build files | |||||
| > platformio run --target clean |
| This directory is intended for project header files. | |||||
| A header file is a file containing C declarations and macro definitions | |||||
| to be shared between several project source files. You request the use of a | |||||
| header file in your project source file (C, C++, etc) located in `src` folder | |||||
| by including it, with the C preprocessing directive `#include'. | |||||
| ```src/main.c | |||||
| #include "header.h" | |||||
| int main (void) | |||||
| { | |||||
| ... | |||||
| } | |||||
| ``` | |||||
| Including a header file produces the same results as copying the header file | |||||
| into each source file that needs it. Such copying would be time-consuming | |||||
| and error-prone. With a header file, the related declarations appear | |||||
| in only one place. If they need to be changed, they can be changed in one | |||||
| place, and programs that include the header file will automatically use the | |||||
| new version when next recompiled. The header file eliminates the labor of | |||||
| finding and changing all the copies as well as the risk that a failure to | |||||
| find one copy will result in inconsistencies within a program. | |||||
| In C, the usual convention is to give header files names that end with `.h'. | |||||
| It is most portable to use only letters, digits, dashes, and underscores in | |||||
| header file names, and at most one dot. | |||||
| Read more about using header files in official GCC documentation: | |||||
| * Include Syntax | |||||
| * Include Operation | |||||
| * Once-Only Headers | |||||
| * Computed Includes | |||||
| https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html |
| This directory is intended for project specific (private) libraries. | |||||
| PlatformIO will compile them to static libraries and link into executable file. | |||||
| The source code of each library should be placed in a an own separate directory | |||||
| ("lib/your_library_name/[here are source files]"). | |||||
| For example, see a structure of the following two libraries `Foo` and `Bar`: | |||||
| |--lib | |||||
| | | | |||||
| | |--Bar | |||||
| | | |--docs | |||||
| | | |--examples | |||||
| | | |--src | |||||
| | | |- Bar.c | |||||
| | | |- Bar.h | |||||
| | | |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html | |||||
| | | | |||||
| | |--Foo | |||||
| | | |- Foo.c | |||||
| | | |- Foo.h | |||||
| | | | |||||
| | |- README --> THIS FILE | |||||
| | | |||||
| |- platformio.ini | |||||
| |--src | |||||
| |- main.c | |||||
| and a contents of `src/main.c`: | |||||
| ``` | |||||
| #include <Foo.h> | |||||
| #include <Bar.h> | |||||
| int main (void) | |||||
| { | |||||
| ... | |||||
| } | |||||
| ``` | |||||
| PlatformIO Library Dependency Finder will find automatically dependent | |||||
| libraries scanning project source files. | |||||
| More information about PlatformIO Library Dependency Finder | |||||
| - https://docs.platformio.org/page/librarymanager/ldf.html |
| ; PlatformIO Project Configuration File | |||||
| ; | |||||
| ; Build options: build flags, source filter, extra scripting | |||||
| ; Upload options: custom port, speed and extra flags | |||||
| ; Library options: dependencies, extra library storages | |||||
| ; | |||||
| ; Please visit documentation for the other options and examples | |||||
| ; http://docs.platformio.org/page/projectconf.html | |||||
| [env:teensy2] | |||||
| platform = teensy | |||||
| framework = arduino | |||||
| board = teensy2 | |||||
| [env:teensy2pp] | |||||
| platform = teensy | |||||
| framework = arduino | |||||
| board = teensy2pp | |||||
| [env:teensy30] | |||||
| platform = teensy | |||||
| framework = arduino | |||||
| board = teensy30 | |||||
| [env:teensy31] | |||||
| platform = teensy | |||||
| framework = arduino | |||||
| board = teensy31 | |||||
| [env:teensylc] | |||||
| platform = teensy | |||||
| framework = arduino | |||||
| board = teensylc | |||||
| [env:teensy35] | |||||
| platform = teensy | |||||
| framework = arduino | |||||
| board = teensy35 | |||||
| [env:teensy36] | |||||
| platform = teensy | |||||
| framework = arduino | |||||
| board = teensy36 | |||||
| [env:teensy40] | |||||
| platform = teensy | |||||
| framework = arduino | |||||
| board = teensy40 | |||||
| [env:teensy41] | |||||
| platform = teensy | |||||
| framework = arduino | |||||
| board = teensy41 |
| /* | |||||
| Chat Server | |||||
| A simple server that distributes any incoming messages to all | |||||
| connected clients. To use telnet to your device's IP address and type. | |||||
| You can see the client's input in the serial monitor as well. | |||||
| Using an Arduino Wiznet Ethernet shield. | |||||
| Circuit: | |||||
| * Ethernet shield attached to pins 10, 11, 12, 13 | |||||
| * Analog inputs attached to pins A0 through A5 (optional) | |||||
| created 18 Dec 2009 | |||||
| by David A. Mellis | |||||
| modified 9 Apr 2012 | |||||
| by Tom Igoe | |||||
| */ | |||||
| #include <Arduino.h> | |||||
| #include <SPI.h> | |||||
| #include <Ethernet.h> | |||||
| // Enter a MAC address and IP address for your controller below. | |||||
| // The IP address will be dependent on your local network. | |||||
| // gateway and subnet are optional: | |||||
| byte mac[] = { | |||||
| 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; | |||||
| IPAddress ip(192,168,1, 177); | |||||
| IPAddress gateway(192,168,1, 1); | |||||
| IPAddress subnet(255, 255, 0, 0); | |||||
| // telnet defaults to port 23 | |||||
| EthernetServer server(23); | |||||
| boolean alreadyConnected = false; // whether or not the client was connected previously | |||||
| void setup() { | |||||
| // initialize the ethernet device | |||||
| Ethernet.begin(mac, ip, gateway, subnet); | |||||
| // start listening for clients | |||||
| server.begin(); | |||||
| // Open serial communications and wait for port to open: | |||||
| Serial.begin(9600); | |||||
| while (!Serial) { | |||||
| ; // wait for serial port to connect. Needed for Leonardo only | |||||
| } | |||||
| Serial.print("Chat server address:"); | |||||
| Serial.println(Ethernet.localIP()); | |||||
| } | |||||
| void loop() { | |||||
| // wait for a new client: | |||||
| EthernetClient client = server.available(); | |||||
| // when the client sends the first byte, say hello: | |||||
| if (client) { | |||||
| if (!alreadyConnected) { | |||||
| // clead out the input buffer: | |||||
| client.flush(); | |||||
| Serial.println("We have a new client"); | |||||
| client.println("Hello, client!"); | |||||
| alreadyConnected = true; | |||||
| } | |||||
| if (client.available() > 0) { | |||||
| // read the bytes incoming from the client: | |||||
| char thisChar = client.read(); | |||||
| // echo the bytes back to the client: | |||||
| server.write(thisChar); | |||||
| // echo the bytes to the server as well: | |||||
| Serial.write(thisChar); | |||||
| } | |||||
| } | |||||
| } | |||||
| This directory is intended for PIO Unit Testing and project tests. | |||||
| Unit Testing is a software testing method by which individual units of | |||||
| source code, sets of one or more MCU program modules together with associated | |||||
| control data, usage procedures, and operating procedures, are tested to | |||||
| determine whether they are fit for use. Unit testing finds problems early | |||||
| in the development cycle. | |||||
| More information about PIO Unit Testing: | |||||
| - https://docs.platformio.org/page/plus/unit-testing.html |
| .pioenvs | |||||
| .piolibdeps |
| # Continuous Integration (CI) is the practice, in software | |||||
| # engineering, of merging all developer working copies with a shared mainline | |||||
| # several times a day < https://docs.platformio.org/page/ci/index.html > | |||||
| # | |||||
| # Documentation: | |||||
| # | |||||
| # * Travis CI Embedded Builds with PlatformIO | |||||
| # < https://docs.travis-ci.com/user/integration/platformio/ > | |||||
| # | |||||
| # * PlatformIO integration with Travis CI | |||||
| # < https://docs.platformio.org/page/ci/travis.html > | |||||
| # | |||||
| # * User Guide for `platformio ci` command | |||||
| # < https://docs.platformio.org/page/userguide/cmd_ci.html > | |||||
| # | |||||
| # | |||||
| # Please choose one of the following templates (proposed below) and uncomment | |||||
| # it (remove "# " before each line) or use own configuration according to the | |||||
| # Travis CI documentation (see above). | |||||
| # | |||||
| # | |||||
| # Template #1: General project. Test it using existing `platformio.ini`. | |||||
| # | |||||
| # language: python | |||||
| # python: | |||||
| # - "2.7" | |||||
| # | |||||
| # sudo: false | |||||
| # cache: | |||||
| # directories: | |||||
| # - "~/.platformio" | |||||
| # | |||||
| # install: | |||||
| # - pip install -U platformio | |||||
| # - platformio update | |||||
| # | |||||
| # script: | |||||
| # - platformio run | |||||
| # | |||||
| # Template #2: The project is intended to be used as a library with examples. | |||||
| # | |||||
| # language: python | |||||
| # python: | |||||
| # - "2.7" | |||||
| # | |||||
| # sudo: false | |||||
| # cache: | |||||
| # directories: | |||||
| # - "~/.platformio" | |||||
| # | |||||
| # env: | |||||
| # - PLATFORMIO_CI_SRC=path/to/test/file.c | |||||
| # - PLATFORMIO_CI_SRC=examples/file.ino | |||||
| # - PLATFORMIO_CI_SRC=path/to/test/directory | |||||
| # | |||||
| # install: | |||||
| # - pip install -U platformio | |||||
| # - platformio update | |||||
| # | |||||
| # script: | |||||
| # - platformio ci --lib="." --board=ID_1 --board=ID_2 --board=ID_N |
| .. Copyright 2014-present PlatformIO <contact@platformio.org> | |||||
| Licensed under the Apache License, Version 2.0 (the "License"); | |||||
| you may not use this file except in compliance with the License. | |||||
| You may obtain a copy of the License at | |||||
| http://www.apache.org/licenses/LICENSE-2.0 | |||||
| Unless required by applicable law or agreed to in writing, software | |||||
| distributed under the License is distributed on an "AS IS" BASIS, | |||||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
| See the License for the specific language governing permissions and | |||||
| limitations under the License. | |||||
| How to build PlatformIO based project | |||||
| ===================================== | |||||
| 1. `Install PlatformIO Core <http://docs.platformio.org/page/core.html>`_ | |||||
| 2. Download `development platform with examples <https://github.com/platformio/platform-teensy/archive/develop.zip>`_ | |||||
| 3. Extract ZIP archive | |||||
| 4. Run these commands: | |||||
| .. code-block:: bash | |||||
| # Change directory to example | |||||
| > cd platform-teensy/examples/mbed-blink | |||||
| # Build project | |||||
| > platformio run | |||||
| # Upload firmware | |||||
| > platformio run --target upload | |||||
| # Clean build files | |||||
| > platformio run --target clean |
| This directory is intended for project header files. | |||||
| A header file is a file containing C declarations and macro definitions | |||||
| to be shared between several project source files. You request the use of a | |||||
| header file in your project source file (C, C++, etc) located in `src` folder | |||||
| by including it, with the C preprocessing directive `#include'. | |||||
| ```src/main.c | |||||
| #include "header.h" | |||||
| int main (void) | |||||
| { | |||||
| ... | |||||
| } | |||||
| ``` | |||||
| Including a header file produces the same results as copying the header file | |||||
| into each source file that needs it. Such copying would be time-consuming | |||||
| and error-prone. With a header file, the related declarations appear | |||||
| in only one place. If they need to be changed, they can be changed in one | |||||
| place, and programs that include the header file will automatically use the | |||||
| new version when next recompiled. The header file eliminates the labor of | |||||
| finding and changing all the copies as well as the risk that a failure to | |||||
| find one copy will result in inconsistencies within a program. | |||||
| In C, the usual convention is to give header files names that end with `.h'. | |||||
| It is most portable to use only letters, digits, dashes, and underscores in | |||||
| header file names, and at most one dot. | |||||
| Read more about using header files in official GCC documentation: | |||||
| * Include Syntax | |||||
| * Include Operation | |||||
| * Once-Only Headers | |||||
| * Computed Includes | |||||
| https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html |
| This directory is intended for project specific (private) libraries. | |||||
| PlatformIO will compile them to static libraries and link into executable file. | |||||
| The source code of each library should be placed in a an own separate directory | |||||
| ("lib/your_library_name/[here are source files]"). | |||||
| For example, see a structure of the following two libraries `Foo` and `Bar`: | |||||
| |--lib | |||||
| | | | |||||
| | |--Bar | |||||
| | | |--docs | |||||
| | | |--examples | |||||
| | | |--src | |||||
| | | |- Bar.c | |||||
| | | |- Bar.h | |||||
| | | |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html | |||||
| | | | |||||
| | |--Foo | |||||
| | | |- Foo.c | |||||
| | | |- Foo.h | |||||
| | | | |||||
| | |- README --> THIS FILE | |||||
| | | |||||
| |- platformio.ini | |||||
| |--src | |||||
| |- main.c | |||||
| and a contents of `src/main.c`: | |||||
| ``` | |||||
| #include <Foo.h> | |||||
| #include <Bar.h> | |||||
| int main (void) | |||||
| { | |||||
| ... | |||||
| } | |||||
| ``` | |||||
| PlatformIO Library Dependency Finder will find automatically dependent | |||||
| libraries scanning project source files. | |||||
| More information about PlatformIO Library Dependency Finder | |||||
| - https://docs.platformio.org/page/librarymanager/ldf.html |
| ; PlatformIO Project Configuration File | |||||
| ; | |||||
| ; Build options: build flags, source filter, extra scripting | |||||
| ; Upload options: custom port, speed and extra flags | |||||
| ; Library options: dependencies, extra library storages | |||||
| ; | |||||
| ; Please visit documentation for the other options and examples | |||||
| ; http://docs.platformio.org/page/projectconf.html | |||||
| [env:teensy31] | |||||
| platform = teensy | |||||
| framework = mbed | |||||
| board = teensy31 |
| #include "mbed.h" | |||||
| DigitalOut myled(LED1); | |||||
| int main() { | |||||
| while(1) { | |||||
| myled = 1; | |||||
| wait(1); | |||||
| myled = 0; | |||||
| wait(1); | |||||
| } | |||||
| } |
| This directory is intended for PIO Unit Testing and project tests. | |||||
| Unit Testing is a software testing method by which individual units of | |||||
| source code, sets of one or more MCU program modules together with associated | |||||
| control data, usage procedures, and operating procedures, are tested to | |||||
| determine whether they are fit for use. Unit testing finds problems early | |||||
| in the development cycle. | |||||
| More information about PIO Unit Testing: | |||||
| - https://docs.platformio.org/page/plus/unit-testing.html |
| .pioenvs | |||||
| .piolibdeps |
| # Continuous Integration (CI) is the practice, in software | |||||
| # engineering, of merging all developer working copies with a shared mainline | |||||
| # several times a day < https://docs.platformio.org/page/ci/index.html > | |||||
| # | |||||
| # Documentation: | |||||
| # | |||||
| # * Travis CI Embedded Builds with PlatformIO | |||||
| # < https://docs.travis-ci.com/user/integration/platformio/ > | |||||
| # | |||||
| # * PlatformIO integration with Travis CI | |||||
| # < https://docs.platformio.org/page/ci/travis.html > | |||||
| # | |||||
| # * User Guide for `platformio ci` command | |||||
| # < https://docs.platformio.org/page/userguide/cmd_ci.html > | |||||
| # | |||||
| # | |||||
| # Please choose one of the following templates (proposed below) and uncomment | |||||
| # it (remove "# " before each line) or use own configuration according to the | |||||
| # Travis CI documentation (see above). | |||||
| # | |||||
| # | |||||
| # Template #1: General project. Test it using existing `platformio.ini`. | |||||
| # | |||||
| # language: python | |||||
| # python: | |||||
| # - "2.7" | |||||
| # | |||||
| # sudo: false | |||||
| # cache: | |||||
| # directories: | |||||
| # - "~/.platformio" | |||||
| # | |||||
| # install: | |||||
| # - pip install -U platformio | |||||
| # - platformio update | |||||
| # | |||||
| # script: | |||||
| # - platformio run | |||||
| # | |||||
| # Template #2: The project is intended to be used as a library with examples. | |||||
| # | |||||
| # language: python | |||||
| # python: | |||||
| # - "2.7" | |||||
| # | |||||
| # sudo: false | |||||
| # cache: | |||||
| # directories: | |||||
| # - "~/.platformio" | |||||
| # | |||||
| # env: | |||||
| # - PLATFORMIO_CI_SRC=path/to/test/file.c | |||||
| # - PLATFORMIO_CI_SRC=examples/file.ino | |||||
| # - PLATFORMIO_CI_SRC=path/to/test/directory | |||||
| # | |||||
| # install: | |||||
| # - pip install -U platformio | |||||
| # - platformio update | |||||
| # | |||||
| # script: | |||||
| # - platformio ci --lib="." --board=ID_1 --board=ID_2 --board=ID_N |
| .. Copyright 2014-present PlatformIO <contact@platformio.org> | |||||
| Licensed under the Apache License, Version 2.0 (the "License"); | |||||
| you may not use this file except in compliance with the License. | |||||
| You may obtain a copy of the License at | |||||
| http://www.apache.org/licenses/LICENSE-2.0 | |||||
| Unless required by applicable law or agreed to in writing, software | |||||
| distributed under the License is distributed on an "AS IS" BASIS, | |||||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
| See the License for the specific language governing permissions and | |||||
| limitations under the License. | |||||
| How to build PlatformIO based project | |||||
| ===================================== | |||||
| 1. `Install PlatformIO Core <http://docs.platformio.org/page/core.html>`_ | |||||
| 2. Download `development platform with examples <https://github.com/platformio/platform-teensy/archive/develop.zip>`_ | |||||
| 3. Extract ZIP archive | |||||
| 4. Run these commands: | |||||
| .. code-block:: bash | |||||
| # Change directory to example | |||||
| > cd platform-teensy/examples/mbed-dsp | |||||
| # Build project | |||||
| > platformio run | |||||
| # Upload firmware | |||||
| > platformio run --target upload | |||||
| # Clean build files | |||||
| > platformio run --target clean |
| This directory is intended for project header files. | |||||
| A header file is a file containing C declarations and macro definitions | |||||
| to be shared between several project source files. You request the use of a | |||||
| header file in your project source file (C, C++, etc) located in `src` folder | |||||
| by including it, with the C preprocessing directive `#include'. | |||||
| ```src/main.c | |||||
| #include "header.h" | |||||
| int main (void) | |||||
| { | |||||
| ... | |||||
| } | |||||
| ``` | |||||
| Including a header file produces the same results as copying the header file | |||||
| into each source file that needs it. Such copying would be time-consuming | |||||
| and error-prone. With a header file, the related declarations appear | |||||
| in only one place. If they need to be changed, they can be changed in one | |||||
| place, and programs that include the header file will automatically use the | |||||
| new version when next recompiled. The header file eliminates the labor of | |||||
| finding and changing all the copies as well as the risk that a failure to | |||||
| find one copy will result in inconsistencies within a program. | |||||
| In C, the usual convention is to give header files names that end with `.h'. | |||||
| It is most portable to use only letters, digits, dashes, and underscores in | |||||
| header file names, and at most one dot. | |||||
| Read more about using header files in official GCC documentation: | |||||
| * Include Syntax | |||||
| * Include Operation | |||||
| * Once-Only Headers | |||||
| * Computed Includes | |||||
| https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html |
| This directory is intended for project specific (private) libraries. | |||||
| PlatformIO will compile them to static libraries and link into executable file. | |||||
| The source code of each library should be placed in a an own separate directory | |||||
| ("lib/your_library_name/[here are source files]"). | |||||
| For example, see a structure of the following two libraries `Foo` and `Bar`: | |||||
| |--lib | |||||
| | | | |||||
| | |--Bar | |||||
| | | |--docs | |||||
| | | |--examples | |||||
| | | |--src | |||||
| | | |- Bar.c | |||||
| | | |- Bar.h | |||||
| | | |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html | |||||
| | | | |||||
| | |--Foo | |||||
| | | |- Foo.c | |||||
| | | |- Foo.h | |||||
| | | | |||||
| | |- README --> THIS FILE | |||||
| | | |||||
| |- platformio.ini | |||||
| |--src | |||||
| |- main.c | |||||
| and a contents of `src/main.c`: | |||||
| ``` | |||||
| #include <Foo.h> | |||||
| #include <Bar.h> | |||||
| int main (void) | |||||
| { | |||||
| ... | |||||
| } | |||||
| ``` | |||||
| PlatformIO Library Dependency Finder will find automatically dependent | |||||
| libraries scanning project source files. | |||||
| More information about PlatformIO Library Dependency Finder | |||||
| - https://docs.platformio.org/page/librarymanager/ldf.html |
| ; PlatformIO Project Configuration File | |||||
| ; | |||||
| ; Build options: build flags, source filter, extra scripting | |||||
| ; Upload options: custom port, speed and extra flags | |||||
| ; Library options: dependencies, extra library storages | |||||
| ; | |||||
| ; Please visit documentation for the other options and examples | |||||
| ; http://docs.platformio.org/page/projectconf.html | |||||
| [env:teensy31] | |||||
| platform = teensy | |||||
| framework = mbed | |||||
| board = teensy31 |
| #include "arm_math.h" | |||||
| /* ---------------------------------------------------------------------- | |||||
| ** Test input signal contains 1000Hz + 15000 Hz | |||||
| ** ------------------------------------------------------------------- */ | |||||
| float32_t testInput_f32_1kHz_15kHz[320] = | |||||
| { | |||||
| +0.0000000000f, +0.5924659585f, -0.0947343455f, +0.1913417162f, +1.0000000000f, +0.4174197128f, +0.3535533906f, +1.2552931065f, | |||||
| +0.8660254038f, +0.4619397663f, +1.3194792169f, +1.1827865776f, +0.5000000000f, +1.1827865776f, +1.3194792169f, +0.4619397663f, | |||||
| +0.8660254038f, +1.2552931065f, +0.3535533906f, +0.4174197128f, +1.0000000000f, +0.1913417162f, -0.0947343455f, +0.5924659585f, | |||||
| -0.0000000000f, -0.5924659585f, +0.0947343455f, -0.1913417162f, -1.0000000000f, -0.4174197128f, -0.3535533906f, -1.2552931065f, | |||||
| -0.8660254038f, -0.4619397663f, -1.3194792169f, -1.1827865776f, -0.5000000000f, -1.1827865776f, -1.3194792169f, -0.4619397663f, | |||||
| -0.8660254038f, -1.2552931065f, -0.3535533906f, -0.4174197128f, -1.0000000000f, -0.1913417162f, +0.0947343455f, -0.5924659585f, | |||||
| +0.0000000000f, +0.5924659585f, -0.0947343455f, +0.1913417162f, +1.0000000000f, +0.4174197128f, +0.3535533906f, +1.2552931065f, | |||||
| +0.8660254038f, +0.4619397663f, +1.3194792169f, +1.1827865776f, +0.5000000000f, +1.1827865776f, +1.3194792169f, +0.4619397663f, | |||||
| +0.8660254038f, +1.2552931065f, +0.3535533906f, +0.4174197128f, +1.0000000000f, +0.1913417162f, -0.0947343455f, +0.5924659585f, | |||||
| +0.0000000000f, -0.5924659585f, +0.0947343455f, -0.1913417162f, -1.0000000000f, -0.4174197128f, -0.3535533906f, -1.2552931065f, | |||||
| -0.8660254038f, -0.4619397663f, -1.3194792169f, -1.1827865776f, -0.5000000000f, -1.1827865776f, -1.3194792169f, -0.4619397663f, | |||||
| -0.8660254038f, -1.2552931065f, -0.3535533906f, -0.4174197128f, -1.0000000000f, -0.1913417162f, +0.0947343455f, -0.5924659585f, | |||||
| +0.0000000000f, +0.5924659585f, -0.0947343455f, +0.1913417162f, +1.0000000000f, +0.4174197128f, +0.3535533906f, +1.2552931065f, | |||||
| +0.8660254038f, +0.4619397663f, +1.3194792169f, +1.1827865776f, +0.5000000000f, +1.1827865776f, +1.3194792169f, +0.4619397663f, | |||||
| +0.8660254038f, +1.2552931065f, +0.3535533906f, +0.4174197128f, +1.0000000000f, +0.1913417162f, -0.0947343455f, +0.5924659585f, | |||||
| +0.0000000000f, -0.5924659585f, +0.0947343455f, -0.1913417162f, -1.0000000000f, -0.4174197128f, -0.3535533906f, -1.2552931065f, | |||||
| -0.8660254038f, -0.4619397663f, -1.3194792169f, -1.1827865776f, -0.5000000000f, -1.1827865776f, -1.3194792169f, -0.4619397663f, | |||||
| -0.8660254038f, -1.2552931065f, -0.3535533906f, -0.4174197128f, -1.0000000000f, -0.1913417162f, +0.0947343455f, -0.5924659585f, | |||||
| -0.0000000000f, +0.5924659585f, -0.0947343455f, +0.1913417162f, +1.0000000000f, +0.4174197128f, +0.3535533906f, +1.2552931065f, | |||||
| +0.8660254038f, +0.4619397663f, +1.3194792169f, +1.1827865776f, +0.5000000000f, +1.1827865776f, +1.3194792169f, +0.4619397663f, | |||||
| +0.8660254038f, +1.2552931065f, +0.3535533906f, +0.4174197128f, +1.0000000000f, +0.1913417162f, -0.0947343455f, +0.5924659585f, | |||||
| -0.0000000000f, -0.5924659585f, +0.0947343455f, -0.1913417162f, -1.0000000000f, -0.4174197128f, -0.3535533906f, -1.2552931065f, | |||||
| -0.8660254038f, -0.4619397663f, -1.3194792169f, -1.1827865776f, -0.5000000000f, -1.1827865776f, -1.3194792169f, -0.4619397663f, | |||||
| -0.8660254038f, -1.2552931065f, -0.3535533906f, -0.4174197128f, -1.0000000000f, -0.1913417162f, +0.0947343455f, -0.5924659585f, | |||||
| +0.0000000000f, +0.5924659585f, -0.0947343455f, +0.1913417162f, +1.0000000000f, +0.4174197128f, +0.3535533906f, +1.2552931065f, | |||||
| +0.8660254038f, +0.4619397663f, +1.3194792169f, +1.1827865776f, +0.5000000000f, +1.1827865776f, +1.3194792169f, +0.4619397663f, | |||||
| +0.8660254038f, +1.2552931065f, +0.3535533906f, +0.4174197128f, +1.0000000000f, +0.1913417162f, -0.0947343455f, +0.5924659585f, | |||||
| +0.0000000000f, -0.5924659585f, +0.0947343455f, -0.1913417162f, -1.0000000000f, -0.4174197128f, -0.3535533906f, -1.2552931065f, | |||||
| -0.8660254038f, -0.4619397663f, -1.3194792169f, -1.1827865776f, -0.5000000000f, -1.1827865776f, -1.3194792169f, -0.4619397663f, | |||||
| -0.8660254038f, -1.2552931065f, -0.3535533906f, -0.4174197128f, -1.0000000000f, -0.1913417162f, +0.0947343455f, -0.5924659585f, | |||||
| -0.0000000000f, +0.5924659585f, -0.0947343455f, +0.1913417162f, +1.0000000000f, +0.4174197128f, +0.3535533906f, +1.2552931065f, | |||||
| +0.8660254038f, +0.4619397663f, +1.3194792169f, +1.1827865776f, +0.5000000000f, +1.1827865776f, +1.3194792169f, +0.4619397663f, | |||||
| +0.8660254038f, +1.2552931065f, +0.3535533906f, +0.4174197128f, +1.0000000000f, +0.1913417162f, -0.0947343455f, +0.5924659585f, | |||||
| +0.0000000000f, -0.5924659585f, +0.0947343455f, -0.1913417162f, -1.0000000000f, -0.4174197128f, -0.3535533906f, -1.2552931065f, | |||||
| -0.8660254038f, -0.4619397663f, -1.3194792169f, -1.1827865776f, -0.5000000000f, -1.1827865776f, -1.3194792169f, -0.4619397663f, | |||||
| -0.8660254038f, -1.2552931065f, -0.3535533906f, -0.4174197128f, -1.0000000000f, -0.1913417162f, +0.0947343455f, -0.5924659585f, | |||||
| -0.0000000000f, +0.5924659585f, -0.0947343455f, +0.1913417162f, +1.0000000000f, +0.4174197128f, +0.3535533906f, +1.2552931065f, | |||||
| +0.8660254038f, +0.4619397663f, +1.3194792169f, +1.1827865776f, +0.5000000000f, +1.1827865776f, +1.3194792169f, +0.4619397663f, | |||||
| +0.8660254038f, +1.2552931065f, +0.3535533906f, +0.4174197128f, +1.0000000000f, +0.1913417162f, -0.0947343455f, +0.5924659585f, | |||||
| +0.0000000000f, -0.5924659585f, +0.0947343455f, -0.1913417162f, -1.0000000000f, -0.4174197128f, -0.3535533906f, -1.2552931065f, | |||||
| }; | |||||
| float32_t refOutput[320] = | |||||
| { | |||||
| +0.0000000000f, -0.0010797829f, -0.0007681386f, -0.0001982932f, +0.0000644313f, +0.0020854271f, +0.0036891871f, +0.0015855941f, | |||||
| -0.0026280805f, -0.0075907658f, -0.0119390538f, -0.0086665968f, +0.0088981202f, +0.0430539279f, +0.0974468742f, +0.1740405600f, | |||||
| +0.2681416601f, +0.3747720089f, +0.4893362230f, +0.6024154672f, +0.7058740791f, +0.7968348987f, +0.8715901940f, +0.9277881093f, | |||||
| +0.9682182661f, +0.9934674267f, +1.0012052245f, +0.9925859371f, +0.9681538347f, +0.9257026822f, +0.8679010068f, +0.7952493046f, | |||||
| +0.7085021596f, +0.6100062330f, +0.5012752767f, +0.3834386057f, +0.2592435399f, +0.1309866321f, -0.0000000000f, -0.1309866321f, | |||||
| -0.2592435399f, -0.3834386057f, -0.5012752767f, -0.6100062330f, -0.7085021596f, -0.7952493046f, -0.8679010068f, -0.9257026822f, | |||||
| -0.9681538347f, -0.9936657199f, -1.0019733630f, -0.9936657199f, -0.9681538347f, -0.9257026822f, -0.8679010068f, -0.7952493046f, | |||||
| -0.7085021596f, -0.6100062330f, -0.5012752767f, -0.3834386057f, -0.2592435399f, -0.1309866321f, +0.0000000000f, +0.1309866321f, | |||||
| +0.2592435399f, +0.3834386057f, +0.5012752767f, +0.6100062330f, +0.7085021596f, +0.7952493046f, +0.8679010068f, +0.9257026822f, | |||||
| +0.9681538347f, +0.9936657199f, +1.0019733630f, +0.9936657199f, +0.9681538347f, +0.9257026822f, +0.8679010068f, +0.7952493046f, | |||||
| +0.7085021596f, +0.6100062330f, +0.5012752767f, +0.3834386057f, +0.2592435399f, +0.1309866321f, -0.0000000000f, -0.1309866321f, | |||||
| -0.2592435399f, -0.3834386057f, -0.5012752767f, -0.6100062330f, -0.7085021596f, -0.7952493046f, -0.8679010068f, -0.9257026822f, | |||||
| -0.9681538347f, -0.9936657199f, -1.0019733630f, -0.9936657199f, -0.9681538347f, -0.9257026822f, -0.8679010068f, -0.7952493046f, | |||||
| -0.7085021596f, -0.6100062330f, -0.5012752767f, -0.3834386057f, -0.2592435399f, -0.1309866321f, +0.0000000000f, +0.1309866321f, | |||||
| +0.2592435399f, +0.3834386057f, +0.5012752767f, +0.6100062330f, +0.7085021596f, +0.7952493046f, +0.8679010068f, +0.9257026822f, | |||||
| +0.9681538347f, +0.9936657199f, +1.0019733630f, +0.9936657199f, +0.9681538347f, +0.9257026822f, +0.8679010068f, +0.7952493046f, | |||||
| +0.7085021596f, +0.6100062330f, +0.5012752767f, +0.3834386057f, +0.2592435399f, +0.1309866321f, -0.0000000000f, -0.1309866321f, | |||||
| -0.2592435399f, -0.3834386057f, -0.5012752767f, -0.6100062330f, -0.7085021596f, -0.7952493046f, -0.8679010068f, -0.9257026822f, | |||||
| -0.9681538347f, -0.9936657199f, -1.0019733630f, -0.9936657199f, -0.9681538347f, -0.9257026822f, -0.8679010068f, -0.7952493046f, | |||||
| -0.7085021596f, -0.6100062330f, -0.5012752767f, -0.3834386057f, -0.2592435399f, -0.1309866321f, +0.0000000000f, +0.1309866321f, | |||||
| +0.2592435399f, +0.3834386057f, +0.5012752767f, +0.6100062330f, +0.7085021596f, +0.7952493046f, +0.8679010068f, +0.9257026822f, | |||||
| +0.9681538347f, +0.9936657199f, +1.0019733630f, +0.9936657199f, +0.9681538347f, +0.9257026822f, +0.8679010068f, +0.7952493046f, | |||||
| +0.7085021596f, +0.6100062330f, +0.5012752767f, +0.3834386057f, +0.2592435399f, +0.1309866321f, +0.0000000000f, -0.1309866321f, | |||||
| -0.2592435399f, -0.3834386057f, -0.5012752767f, -0.6100062330f, -0.7085021596f, -0.7952493046f, -0.8679010068f, -0.9257026822f, | |||||
| -0.9681538347f, -0.9936657199f, -1.0019733630f, -0.9936657199f, -0.9681538347f, -0.9257026822f, -0.8679010068f, -0.7952493046f, | |||||
| -0.7085021596f, -0.6100062330f, -0.5012752767f, -0.3834386057f, -0.2592435399f, -0.1309866321f, +0.0000000000f, +0.1309866321f, | |||||
| +0.2592435399f, +0.3834386057f, +0.5012752767f, +0.6100062330f, +0.7085021596f, +0.7952493046f, +0.8679010068f, +0.9257026822f, | |||||
| +0.9681538347f, +0.9936657199f, +1.0019733630f, +0.9936657199f, +0.9681538347f, +0.9257026822f, +0.8679010068f, +0.7952493046f, | |||||
| +0.7085021596f, +0.6100062330f, +0.5012752767f, +0.3834386057f, +0.2592435399f, +0.1309866321f, +0.0000000000f, -0.1309866321f, | |||||
| -0.2592435399f, -0.3834386057f, -0.5012752767f, -0.6100062330f, -0.7085021596f, -0.7952493046f, -0.8679010068f, -0.9257026822f, | |||||
| -0.9681538347f, -0.9936657199f, -1.0019733630f, -0.9936657199f, -0.9681538347f, -0.9257026822f, -0.8679010068f, -0.7952493046f, | |||||
| -0.7085021596f, -0.6100062330f, -0.5012752767f, -0.3834386057f, -0.2592435399f, -0.1309866321f, -0.0000000000f, +0.1309866321f, | |||||
| +0.2592435399f, +0.3834386057f, +0.5012752767f, +0.6100062330f, +0.7085021596f, +0.7952493046f, +0.8679010068f, +0.9257026822f, | |||||
| +0.9681538347f, +0.9936657199f, +1.0019733630f, +0.9936657199f, +0.9681538347f, +0.9257026822f, +0.8679010068f, +0.7952493046f, | |||||
| +0.7085021596f, +0.6100062330f, +0.5012752767f, +0.3834386057f, +0.2592435399f, +0.1309866321f, +0.0000000000f, -0.1309866321f, | |||||
| -0.2592435399f, -0.3834386057f, -0.5012752767f, -0.6100062330f, -0.7085021596f, -0.7952493046f, -0.8679010068f, -0.9257026822f, | |||||
| -0.9681538347f, -0.9936657199f, -1.0019733630f, -0.9936657199f, -0.9681538347f, -0.9257026822f, -0.8679010068f, -0.7952493046f, | |||||
| -0.7085021596f, -0.6100062330f, -0.5012752767f, -0.3834386057f, -0.2592435399f, -0.1309866321f, +0.0000000000f, +0.1309866321f, | |||||
| +0.2592435399f, +0.3834386057f, +0.5012752767f, +0.6100062330f, +0.7085021596f, +0.7952493046f, +0.8679010068f, +0.9257026822f, | |||||
| +0.9681538347f, +0.9936657199f, +1.0019733630f, +0.9936657199f, +0.9681538347f, +0.9257026822f, +0.8679010068f, +0.7952493046f | |||||
| }; | |||||
| #include "arm_math.h" | |||||
| #include "math_helper.h" | |||||
| #include <stdio.h> | |||||
| #define BLOCK_SIZE 32 | |||||
| #define NUM_BLOCKS 10 | |||||
| #define TEST_LENGTH_SAMPLES (BLOCK_SIZE * NUM_BLOCKS) | |||||
| #define SNR_THRESHOLD_F32 140.0f | |||||
| #define NUM_TAPS 29 | |||||
| /* ------------------------------------------------------------------- | |||||
| * The input signal and reference output (computed with MATLAB) | |||||
| * are defined externally in arm_fir_lpf_data.c. | |||||
| * ------------------------------------------------------------------- */ | |||||
| extern float32_t testInput_f32_1kHz_15kHz[TEST_LENGTH_SAMPLES]; | |||||
| extern float32_t refOutput[TEST_LENGTH_SAMPLES]; | |||||
| /* ------------------------------------------------------------------- | |||||
| * Declare State buffer of size (numTaps + blockSize - 1) | |||||
| * ------------------------------------------------------------------- */ | |||||
| static float32_t firStateF32[BLOCK_SIZE + NUM_TAPS - 1]; | |||||
| /* ---------------------------------------------------------------------- | |||||
| * FIR Coefficients buffer generated using fir1() MATLAB function. | |||||
| * fir1(28, 6/24) | |||||
| * ------------------------------------------------------------------- */ | |||||
| const float32_t firCoeffs32[NUM_TAPS] = { | |||||
| -0.0018225230f, -0.0015879294f, +0.0000000000f, +0.0036977508f, +0.0080754303f, | |||||
| +0.0085302217f, -0.0000000000f, -0.0173976984f, -0.0341458607f, -0.0333591565f, | |||||
| +0.0000000000f, +0.0676308395f, +0.1522061835f, +0.2229246956f, +0.2504960933f, | |||||
| +0.2229246956f, +0.1522061835f, +0.0676308395f, +0.0000000000f, -0.0333591565f, | |||||
| -0.0341458607f, -0.0173976984f, -0.0000000000f, +0.0085302217f, +0.0080754303f, | |||||
| +0.0036977508f, +0.0000000000f, -0.0015879294f, -0.0018225230f | |||||
| }; | |||||
| /* ---------------------------------------------------------------------- | |||||
| * FIR LPF Example | |||||
| * ------------------------------------------------------------------- */ | |||||
| int main(void) { | |||||
| /* Call FIR init function to initialize the instance structure. */ | |||||
| arm_fir_instance_f32 S; | |||||
| arm_fir_init_f32(&S, NUM_TAPS, (float32_t *)&firCoeffs32[0], &firStateF32[0], BLOCK_SIZE); | |||||
| /* ---------------------------------------------------------------------- | |||||
| * Call the FIR process function for every blockSize samples | |||||
| * ------------------------------------------------------------------- */ | |||||
| for (uint32_t i=0; i < NUM_BLOCKS; i++) { | |||||
| float32_t* signal = testInput_f32_1kHz_15kHz + (i * BLOCK_SIZE); | |||||
| arm_fir_f32(&S, signal, signal, BLOCK_SIZE); | |||||
| } | |||||
| /* ---------------------------------------------------------------------- | |||||
| * Compare the generated output against the reference output computed | |||||
| * in MATLAB. | |||||
| * ------------------------------------------------------------------- */ | |||||
| float32_t snr = arm_snr_f32(refOutput, testInput_f32_1kHz_15kHz, TEST_LENGTH_SAMPLES); | |||||
| printf("snr: %f\n\r", snr); | |||||
| if (snr < SNR_THRESHOLD_F32) { | |||||
| printf("Failed\n\r"); | |||||
| } else { | |||||
| printf("Success\n\r"); | |||||
| } | |||||
| } |
| This directory is intended for PIO Unit Testing and project tests. | |||||
| Unit Testing is a software testing method by which individual units of | |||||
| source code, sets of one or more MCU program modules together with associated | |||||
| control data, usage procedures, and operating procedures, are tested to | |||||
| determine whether they are fit for use. Unit testing finds problems early | |||||
| in the development cycle. | |||||
| More information about PIO Unit Testing: | |||||
| - https://docs.platformio.org/page/plus/unit-testing.html |
| .pioenvs | |||||
| .piolibdeps |
| # Continuous Integration (CI) is the practice, in software | |||||
| # engineering, of merging all developer working copies with a shared mainline | |||||
| # several times a day < https://docs.platformio.org/page/ci/index.html > | |||||
| # | |||||
| # Documentation: | |||||
| # | |||||
| # * Travis CI Embedded Builds with PlatformIO | |||||
| # < https://docs.travis-ci.com/user/integration/platformio/ > | |||||
| # | |||||
| # * PlatformIO integration with Travis CI | |||||
| # < https://docs.platformio.org/page/ci/travis.html > | |||||
| # | |||||
| # * User Guide for `platformio ci` command | |||||
| # < https://docs.platformio.org/page/userguide/cmd_ci.html > | |||||
| # | |||||
| # | |||||
| # Please choose one of the following templates (proposed below) and uncomment | |||||
| # it (remove "# " before each line) or use own configuration according to the | |||||
| # Travis CI documentation (see above). | |||||
| # | |||||
| # | |||||
| # Template #1: General project. Test it using existing `platformio.ini`. | |||||
| # | |||||
| # language: python | |||||
| # python: | |||||
| # - "2.7" | |||||
| # | |||||
| # sudo: false | |||||
| # cache: | |||||
| # directories: | |||||
| # - "~/.platformio" | |||||
| # | |||||
| # install: | |||||
| # - pip install -U platformio | |||||
| # - platformio update | |||||
| # | |||||
| # script: | |||||
| # - platformio run | |||||
| # | |||||
| # Template #2: The project is intended to be used as a library with examples. | |||||
| # | |||||
| # language: python | |||||
| # python: | |||||
| # - "2.7" | |||||
| # | |||||
| # sudo: false | |||||
| # cache: | |||||
| # directories: | |||||
| # - "~/.platformio" | |||||
| # | |||||
| # env: | |||||
| # - PLATFORMIO_CI_SRC=path/to/test/file.c | |||||
| # - PLATFORMIO_CI_SRC=examples/file.ino | |||||
| # - PLATFORMIO_CI_SRC=path/to/test/directory | |||||
| # | |||||
| # install: | |||||
| # - pip install -U platformio | |||||
| # - platformio update | |||||
| # | |||||
| # script: | |||||
| # - platformio ci --lib="." --board=ID_1 --board=ID_2 --board=ID_N |
| .. Copyright 2014-present PlatformIO <contact@platformio.org> | |||||
| Licensed under the Apache License, Version 2.0 (the "License"); | |||||
| you may not use this file except in compliance with the License. | |||||
| You may obtain a copy of the License at | |||||
| http://www.apache.org/licenses/LICENSE-2.0 | |||||
| Unless required by applicable law or agreed to in writing, software | |||||
| distributed under the License is distributed on an "AS IS" BASIS, | |||||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
| See the License for the specific language governing permissions and | |||||
| limitations under the License. | |||||
| How to build PlatformIO based project | |||||
| ===================================== | |||||
| 1. `Install PlatformIO Core <http://docs.platformio.org/page/core.html>`_ | |||||
| 2. Download `development platform with examples <https://github.com/platformio/platform-teensy/archive/develop.zip>`_ | |||||
| 3. Extract ZIP archive | |||||
| 4. Run these commands: | |||||
| .. code-block:: bash | |||||
| # Change directory to example | |||||
| > cd platform-teensy/examples/mbed-events | |||||
| # Build project | |||||
| > platformio run | |||||
| # Upload firmware | |||||
| > platformio run --target upload | |||||
| # Clean build files | |||||
| > platformio run --target clean |
| This directory is intended for project header files. | |||||
| A header file is a file containing C declarations and macro definitions | |||||
| to be shared between several project source files. You request the use of a | |||||
| header file in your project source file (C, C++, etc) located in `src` folder | |||||
| by including it, with the C preprocessing directive `#include'. | |||||
| ```src/main.c | |||||
| #include "header.h" | |||||
| int main (void) | |||||
| { | |||||
| ... | |||||
| } | |||||
| ``` | |||||
| Including a header file produces the same results as copying the header file | |||||
| into each source file that needs it. Such copying would be time-consuming | |||||
| and error-prone. With a header file, the related declarations appear | |||||
| in only one place. If they need to be changed, they can be changed in one | |||||
| place, and programs that include the header file will automatically use the | |||||
| new version when next recompiled. The header file eliminates the labor of | |||||
| finding and changing all the copies as well as the risk that a failure to | |||||
| find one copy will result in inconsistencies within a program. | |||||
| In C, the usual convention is to give header files names that end with `.h'. | |||||
| It is most portable to use only letters, digits, dashes, and underscores in | |||||
| header file names, and at most one dot. | |||||
| Read more about using header files in official GCC documentation: | |||||
| * Include Syntax | |||||
| * Include Operation | |||||
| * Once-Only Headers | |||||
| * Computed Includes | |||||
| https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html |
| This directory is intended for project specific (private) libraries. | |||||
| PlatformIO will compile them to static libraries and link into executable file. | |||||
| The source code of each library should be placed in a an own separate directory | |||||
| ("lib/your_library_name/[here are source files]"). | |||||
| For example, see a structure of the following two libraries `Foo` and `Bar`: | |||||
| |--lib | |||||
| | | | |||||
| | |--Bar | |||||
| | | |--docs | |||||
| | | |--examples | |||||
| | | |--src | |||||
| | | |- Bar.c | |||||
| | | |- Bar.h | |||||
| | | |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html | |||||
| | | | |||||
| | |--Foo | |||||
| | | |- Foo.c | |||||
| | | |- Foo.h | |||||
| | | | |||||
| | |- README --> THIS FILE | |||||
| | | |||||
| |- platformio.ini | |||||
| |--src | |||||
| |- main.c | |||||
| and a contents of `src/main.c`: | |||||
| ``` | |||||
| #include <Foo.h> | |||||
| #include <Bar.h> | |||||
| int main (void) | |||||
| { | |||||
| ... | |||||
| } | |||||
| ``` | |||||
| PlatformIO Library Dependency Finder will find automatically dependent | |||||
| libraries scanning project source files. | |||||
| More information about PlatformIO Library Dependency Finder | |||||
| - https://docs.platformio.org/page/librarymanager/ldf.html |
| ; PlatformIO Project Configuration File | |||||
| ; | |||||
| ; Build options: build flags, source filter, extra scripting | |||||
| ; Upload options: custom port, speed and extra flags | |||||
| ; Library options: dependencies, extra library storages | |||||
| ; | |||||
| ; Please visit documentation for the other options and examples | |||||
| ; http://docs.platformio.org/page/projectconf.html | |||||
| [env:teensy31 events] | |||||
| platform = teensy | |||||
| framework = mbed | |||||
| board = teensy31 |
| #include "mbed_events.h" | |||||
| #include <stdio.h> | |||||
| int main() { | |||||
| // creates a queue with the default size | |||||
| EventQueue queue; | |||||
| // events are simple callbacks | |||||
| queue.call(printf, "called immediately\n"); | |||||
| queue.call_in(2000, printf, "called in 2 seconds\n"); | |||||
| queue.call_every(1000, printf, "called every 1 seconds\n"); | |||||
| // events are executed by the dispatch method | |||||
| queue.dispatch(); | |||||
| } |
| This directory is intended for PIO Unit Testing and project tests. | |||||
| Unit Testing is a software testing method by which individual units of | |||||
| source code, sets of one or more MCU program modules together with associated | |||||
| control data, usage procedures, and operating procedures, are tested to | |||||
| determine whether they are fit for use. Unit testing finds problems early | |||||
| in the development cycle. | |||||
| More information about PIO Unit Testing: | |||||
| - https://docs.platformio.org/page/plus/unit-testing.html |
| .pioenvs | |||||
| .piolibdeps |
| # Continuous Integration (CI) is the practice, in software | |||||
| # engineering, of merging all developer working copies with a shared mainline | |||||
| # several times a day < https://docs.platformio.org/page/ci/index.html > | |||||
| # | |||||
| # Documentation: | |||||
| # | |||||
| # * Travis CI Embedded Builds with PlatformIO | |||||
| # < https://docs.travis-ci.com/user/integration/platformio/ > | |||||
| # | |||||
| # * PlatformIO integration with Travis CI | |||||
| # < https://docs.platformio.org/page/ci/travis.html > | |||||
| # | |||||
| # * User Guide for `platformio ci` command | |||||
| # < https://docs.platformio.org/page/userguide/cmd_ci.html > | |||||
| # | |||||
| # | |||||
| # Please choose one of the following templates (proposed below) and uncomment | |||||
| # it (remove "# " before each line) or use own configuration according to the | |||||
| # Travis CI documentation (see above). | |||||
| # | |||||
| # | |||||
| # Template #1: General project. Test it using existing `platformio.ini`. | |||||
| # | |||||
| # language: python | |||||
| # python: | |||||
| # - "2.7" | |||||
| # | |||||
| # sudo: false | |||||
| # cache: | |||||
| # directories: | |||||
| # - "~/.platformio" | |||||
| # | |||||
| # install: | |||||
| # - pip install -U platformio | |||||
| # - platformio update | |||||
| # | |||||
| # script: | |||||
| # - platformio run | |||||
| # | |||||
| # Template #2: The project is intended to be used as a library with examples. | |||||
| # | |||||
| # language: python | |||||
| # python: | |||||
| # - "2.7" | |||||
| # | |||||
| # sudo: false | |||||
| # cache: | |||||
| # directories: | |||||
| # - "~/.platformio" | |||||
| # | |||||
| # env: | |||||
| # - PLATFORMIO_CI_SRC=path/to/test/file.c | |||||
| # - PLATFORMIO_CI_SRC=examples/file.ino | |||||
| # - PLATFORMIO_CI_SRC=path/to/test/directory | |||||
| # | |||||
| # install: | |||||
| # - pip install -U platformio | |||||
| # - platformio update | |||||
| # | |||||
| # script: | |||||
| # - platformio ci --lib="." --board=ID_1 --board=ID_2 --board=ID_N |
| .. Copyright 2014-present PlatformIO <contact@platformio.org> | |||||
| Licensed under the Apache License, Version 2.0 (the "License"); | |||||
| you may not use this file except in compliance with the License. | |||||
| You may obtain a copy of the License at | |||||
| http://www.apache.org/licenses/LICENSE-2.0 | |||||
| Unless required by applicable law or agreed to in writing, software | |||||
| distributed under the License is distributed on an "AS IS" BASIS, | |||||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
| See the License for the specific language governing permissions and | |||||
| limitations under the License. | |||||
| How to build PlatformIO based project | |||||
| ===================================== | |||||
| 1. `Install PlatformIO Core <http://docs.platformio.org/page/core.html>`_ | |||||
| 2. Download `development platform with examples <https://github.com/platformio/platform-teensy/archive/develop.zip>`_ | |||||
| 3. Extract ZIP archive | |||||
| 4. Run these commands: | |||||
| .. code-block:: bash | |||||
| # Change directory to example | |||||
| > cd platform-teensy/examples/mbed-serial | |||||
| # Build project | |||||
| > platformio run | |||||
| # Upload firmware | |||||
| > platformio run --target upload | |||||
| # Clean build files | |||||
| > platformio run --target clean |
| This directory is intended for project header files. | |||||
| A header file is a file containing C declarations and macro definitions | |||||
| to be shared between several project source files. You request the use of a | |||||
| header file in your project source file (C, C++, etc) located in `src` folder | |||||
| by including it, with the C preprocessing directive `#include'. | |||||
| ```src/main.c | |||||
| #include "header.h" | |||||
| int main (void) | |||||
| { | |||||
| ... | |||||
| } | |||||
| ``` | |||||
| Including a header file produces the same results as copying the header file | |||||
| into each source file that needs it. Such copying would be time-consuming | |||||
| and error-prone. With a header file, the related declarations appear | |||||
| in only one place. If they need to be changed, they can be changed in one | |||||
| place, and programs that include the header file will automatically use the | |||||
| new version when next recompiled. The header file eliminates the labor of | |||||
| finding and changing all the copies as well as the risk that a failure to | |||||
| find one copy will result in inconsistencies within a program. | |||||
| In C, the usual convention is to give header files names that end with `.h'. | |||||
| It is most portable to use only letters, digits, dashes, and underscores in | |||||
| header file names, and at most one dot. | |||||
| Read more about using header files in official GCC documentation: | |||||
| * Include Syntax | |||||
| * Include Operation | |||||
| * Once-Only Headers | |||||
| * Computed Includes | |||||
| https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html |
| This directory is intended for project specific (private) libraries. | |||||
| PlatformIO will compile them to static libraries and link into executable file. | |||||
| The source code of each library should be placed in a an own separate directory | |||||
| ("lib/your_library_name/[here are source files]"). | |||||
| For example, see a structure of the following two libraries `Foo` and `Bar`: | |||||
| |--lib | |||||
| | | | |||||
| | |--Bar | |||||
| | | |--docs | |||||
| | | |--examples | |||||
| | | |--src | |||||
| | | |- Bar.c | |||||
| | | |- Bar.h | |||||
| | | |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html | |||||
| | | | |||||
| | |--Foo | |||||
| | | |- Foo.c | |||||
| | | |- Foo.h | |||||
| | | | |||||
| | |- README --> THIS FILE | |||||
| | | |||||
| |- platformio.ini | |||||
| |--src | |||||
| |- main.c | |||||
| and a contents of `src/main.c`: | |||||
| ``` | |||||
| #include <Foo.h> | |||||
| #include <Bar.h> | |||||
| int main (void) | |||||
| { | |||||
| ... | |||||
| } | |||||
| ``` | |||||
| PlatformIO Library Dependency Finder will find automatically dependent | |||||
| libraries scanning project source files. | |||||
| More information about PlatformIO Library Dependency Finder | |||||
| - https://docs.platformio.org/page/librarymanager/ldf.html |
| ; PlatformIO Project Configuration File | |||||
| ; | |||||
| ; Build options: build flags, source filter, extra scripting | |||||
| ; Upload options: custom port, speed and extra flags | |||||
| ; Library options: dependencies, extra library storages | |||||
| ; | |||||
| ; Please visit documentation for the other options and examples | |||||
| ; http://docs.platformio.org/page/projectconf.html | |||||
| [env:teensy31] | |||||
| platform = teensy | |||||
| framework = mbed | |||||
| board = teensy31 |
| #include "mbed.h" | |||||
| Serial pc(USBTX, USBRX); // tx, rx | |||||
| int main() { | |||||
| pc.printf("Hello World!\n\r"); | |||||
| while(1) { | |||||
| pc.putc(pc.getc() + 1); // echo input back to terminal | |||||
| } | |||||
| } |
| This directory is intended for PIO Unit Testing and project tests. | |||||
| Unit Testing is a software testing method by which individual units of | |||||
| source code, sets of one or more MCU program modules together with associated | |||||
| control data, usage procedures, and operating procedures, are tested to | |||||
| determine whether they are fit for use. Unit testing finds problems early | |||||
| in the development cycle. | |||||
| More information about PIO Unit Testing: | |||||
| - https://docs.platformio.org/page/plus/unit-testing.html |
| { | |||||
| "name": "teensy-gcc", | |||||
| "title": "Teensy", | |||||
| "description": "Teensy is a complete USB-based microcontroller development system, in a very small footprint, capable of implementing many types of projects. All programming is done via the USB port. No special programmer is needed, only a standard USB cable and a PC or Macintosh with a USB port.", | |||||
| "homepage": "https://www.pjrc.com/teensy", | |||||
| "license": "Apache-2.0", | |||||
| "keywords": [ | |||||
| "dev-platform", | |||||
| "ARM", | |||||
| "AVR", | |||||
| "Cortex-M", | |||||
| "NXP Semiconductors", | |||||
| "Microchip" | |||||
| ], | |||||
| "engines": { | |||||
| "platformio": "^5" | |||||
| }, | |||||
| "repository": { | |||||
| "type": "git", | |||||
| "url": "https://github.com/platformio/platform-teensy.git" | |||||
| }, | |||||
| "version": "4.17.0", | |||||
| "frameworks": { | |||||
| "arduino": { | |||||
| "package": "framework-arduinoteensy-cxx17", | |||||
| "script": "builder/frameworks/arduino.py" | |||||
| }, | |||||
| "mbed": { | |||||
| "package": "framework-mbed", | |||||
| "script": "builder/frameworks/mbed.py" | |||||
| } | |||||
| }, | |||||
| "packages": { | |||||
| "toolchain-atmelavr": { | |||||
| "type": "toolchain", | |||||
| "optional": false, | |||||
| "owner": "platformio", | |||||
| "version": "~1.50400.0" | |||||
| }, | |||||
| "toolchain-gcc-arm-embedded": { | |||||
| "type": "toolchain", | |||||
| "optional": false, | |||||
| "owner": "skepto", | |||||
| "version": "~0.1.0" | |||||
| }, | |||||
| "framework-arduinoteensy-cxx17": { | |||||
| "type": "framework", | |||||
| "optional": true, | |||||
| "owner": "skepto", | |||||
| "version": "~0.1.0" | |||||
| }, | |||||
| "framework-mbed": { | |||||
| "type": "framework", | |||||
| "optional": true, | |||||
| "owner": "platformio", | |||||
| "version": "~6.51506.0" | |||||
| }, | |||||
| "tool-teensy": { | |||||
| "type": "uploader", | |||||
| "optional": true, | |||||
| "owner": "platformio", | |||||
| "version": "<2" | |||||
| }, | |||||
| "tool-jlink": { | |||||
| "type": "uploader", | |||||
| "optional": true, | |||||
| "owner": "platformio", | |||||
| "version": "^1.63208.0" | |||||
| } | |||||
| } | |||||
| } |
| # Copyright 2014-present PlatformIO <contact@platformio.org> | |||||
| # | |||||
| # Licensed under the Apache License, Version 2.0 (the "License"); | |||||
| # you may not use this file except in compliance with the License. | |||||
| # You may obtain a copy of the License at | |||||
| # | |||||
| # http://www.apache.org/licenses/LICENSE-2.0 | |||||
| # | |||||
| # Unless required by applicable law or agreed to in writing, software | |||||
| # distributed under the License is distributed on an "AS IS" BASIS, | |||||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
| # See the License for the specific language governing permissions and | |||||
| # limitations under the License. | |||||
| from platform import system | |||||
| from platformio.managers.platform import PlatformBase | |||||
| class TeensygccPlatform(PlatformBase): | |||||
| def configure_default_packages(self, variables, targets): | |||||
| if variables.get("board"): | |||||
| board_config = self.board_config(variables.get("board")) | |||||
| del_toolchain = "toolchain-gcc-arm-embedded" | |||||
| if board_config.get("build.core") != "teensy": | |||||
| del_toolchain = "toolchain-atmelavr" | |||||
| if del_toolchain in self.packages: | |||||
| del self.packages[del_toolchain] | |||||
| if "mbed" in variables.get("pioframework", []): | |||||
| self.packages["toolchain-gccarmnoneeabi"][ | |||||
| 'version'] = ">=1.60301.0,<1.80000.0" | |||||
| # configure J-LINK tool | |||||
| jlink_conds = [ | |||||
| "jlink" in variables.get(option, "") | |||||
| for option in ("upload_protocol", "debug_tool") | |||||
| ] | |||||
| if variables.get("board"): | |||||
| board_config = self.board_config(variables.get("board")) | |||||
| jlink_conds.extend([ | |||||
| "jlink" in board_config.get(key, "") | |||||
| for key in ("debug.default_tools", "upload.protocol") | |||||
| ]) | |||||
| jlink_pkgname = "tool-jlink" | |||||
| if not any(jlink_conds) and jlink_pkgname in self.packages: | |||||
| del self.packages[jlink_pkgname] | |||||
| return PlatformBase.configure_default_packages( | |||||
| self, variables, targets) | |||||
| def get_boards(self, id_=None): | |||||
| result = PlatformBase.get_boards(self, id_) | |||||
| if not result: | |||||
| return result | |||||
| if id_: | |||||
| return self._add_default_debug_tools(result) | |||||
| else: | |||||
| for key, value in result.items(): | |||||
| result[key] = self._add_default_debug_tools(result[key]) | |||||
| return result | |||||
| def _add_default_debug_tools(self, board): | |||||
| debug = board.manifest.get("debug", {}) | |||||
| upload_protocols = board.manifest.get("upload", {}).get( | |||||
| "protocols", []) | |||||
| if "tools" not in debug: | |||||
| debug['tools'] = {} | |||||
| if "jlink" in upload_protocols and "jlink" not in debug['tools']: | |||||
| assert debug.get("jlink_device"), ( | |||||
| "Missed J-Link Device ID for %s" % board.id) | |||||
| debug['tools']['jlink'] = { | |||||
| "server": { | |||||
| "package": "tool-jlink", | |||||
| "arguments": [ | |||||
| "-singlerun", | |||||
| "-if", "SWD", | |||||
| "-select", "USB", | |||||
| "-device", debug.get("jlink_device"), | |||||
| "-port", "2331" | |||||
| ], | |||||
| "executable": ("JLinkGDBServerCL.exe" | |||||
| if system() == "Windows" else | |||||
| "JLinkGDBServer") | |||||
| } | |||||
| } | |||||
| board.manifest['debug'] = debug | |||||
| return board |