<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Energia on 云雾海的博客</title><link>https://blog.yunwuhai.com/tags/energia/</link><description>Recent content in Energia on 云雾海的博客</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Sat, 07 Nov 2020 19:46:09 +0800</lastBuildDate><atom:link href="https://blog.yunwuhai.com/tags/energia/index.xml" rel="self" type="application/rss+xml"/><item><title>MSP432在Energia上的使用（下）</title><link>https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/msp432%E5%9C%A8energia%E4%B8%8A%E7%9A%84%E4%BD%BF%E7%94%A8%E4%B8%8B/</link><pubDate>Sat, 07 Nov 2020 19:46:09 +0800</pubDate><guid>https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/msp432%E5%9C%A8energia%E4%B8%8A%E7%9A%84%E4%BD%BF%E7%94%A8%E4%B8%8B/</guid><description>&lt;img src="https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/msp432%E5%9C%A8energia%E4%B8%8A%E7%9A%84%E4%BD%BF%E7%94%A8%E4%B8%8B/cover.jpg" alt="Featured image of post MSP432在Energia上的使用（下）" /&gt;&lt;h1 id="msp432-在-energia-上的使用下"&gt;&lt;a href="#msp432-%e5%9c%a8-energia-%e4%b8%8a%e7%9a%84%e4%bd%bf%e7%94%a8%e4%b8%8b" class="header-anchor"&gt;&lt;/a&gt;MSP432 在 Energia 上的使用（下）&#10;&lt;/h1&gt;&lt;p&gt;&lt;em&gt;其实我自己都没想到我居然会来填坑，不过说实话这好像也算不上填坑，毕竟之前在&lt;a class="link" href="https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/msp430%E5%9C%A8energia%E4%B8%8A%E7%9A%84%E4%BD%BF%E7%94%A8%E4%B8%8A/" &gt;MSP430 在 Energia 上的使用（上）&lt;/a&gt;这个帖子里讲的是 MSP430，而且说的准备在 VSCode 里装 Energia 其实到现在还没弄，不过这里还是想介绍一下 Energia 的另一项功能，一个专属于 MSP432 的功能。&lt;/em&gt;&lt;/p&gt;&#10;&lt;!-- @import "[TOC]" {cmd="toc" depthFrom=1 depthTo=6 orderedList=false} --&gt;&#10;&lt;!-- code_chunk_output --&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="#msp432-%e5%9c%a8-energia-%e4%b8%8a%e7%9a%84%e4%bd%bf%e7%94%a8%e4%b8%8b" &gt;MSP432 在 Energia 上的使用（下）&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="#%e5%8f%91%e7%8e%b0" &gt;发现&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="#%e4%bd%bf%e7%94%a8%e6%96%b9%e6%b3%95" &gt;使用方法&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="#task1" &gt;TASK1&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="#task2" &gt;TASK2&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="#task3" &gt;TASK3&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;!-- /code_chunk_output --&gt;&#10;&lt;h2 id="发现"&gt;&lt;a href="#%e5%8f%91%e7%8e%b0" class="header-anchor"&gt;&lt;/a&gt;发现&#10;&lt;/h2&gt;&lt;p&gt;事实证明多看官网还是有好处的，之前我在使用 Energia 对 MSP430 进行编程时一直非常疑惑，为什么 TI 公司不直接使用 Arduino 已有的 IDE 而非要做个自己的 Energia 导致不为人知非常冷门，但是官网上的介绍回答了我这一点。打开&lt;a class="link" href="https://energia.nu/" target="_blank" rel="noopener"&#10; &gt;Energia 官网&lt;/a&gt;，进入 Guide 界面，翻阅一下可以看见一个名词——&lt;strong&gt;MultiTasking&lt;/strong&gt;，即多任务。众所周知如果单片机想要实现多任务并行，一般需要自己搭建 RTOS 或者更复杂一点进行专门的时分复用设计，这些方法往往需要较丰富的知识才能实现。而 Energia 就可以非常简单地（其实如果进行一些复杂操作也是挺复杂的）实现多任务操作。而官网在这里其实也给出了关于 Multitasking 的&lt;a class="link" href="https://energia.nu/guide/foundations/programming_technique/multitasking/" target="_blank" rel="noopener"&#10; &gt;介绍&lt;/a&gt;，值得注意的是&lt;strong&gt;目前该功能只能作用与 MSP432，MSP432E，CC3320 和 CC1310&lt;/strong&gt;几种芯片，这也是为什么我把这一章名字改成了 MSP432 而不是 MSP430。（说起来每次打开 Energia 它的启动显示里面也写到了 Energia MT，实际上就是说的这个功能，不过我一直没咋注意）&lt;/p&gt;&#10;&lt;h2 id="使用方法"&gt;&lt;a href="#%e4%bd%bf%e7%94%a8%e6%96%b9%e6%b3%95" class="header-anchor"&gt;&lt;/a&gt;使用方法&#10;&lt;/h2&gt;&lt;p&gt;其实官网原文就有一个大概介绍了，我这里就重复一下。关于 MultiTasking（以下简称 MT）的使用其实非常简单（如果不想做太复杂的话）。&lt;/p&gt;&#10;&lt;p&gt;每次新建工程后，我们会有一个初始界面，上面写的 void setup()和 void loop()（其实就是正常 Energia 或 Arduino IDE 在新建后的工程界面），我们可以把这个界面称之为工程主界面。如果只使用工程主界面写一个程序，那么它只是普通的单线程程序，但是如果你使用的是 MSP432 这类单片机，你可以点击 IDE 右上角的倒三角符号，新建一个 task，随便输入一个名字作为新任务（Task）的名字（注意不要输入后缀，IDE 会自动将其生成为 ino）然后你可以在里面写两个函数，他们便可以当成一个新的 setup 和 loop 函数了，此时如果烧录进芯片后，芯片便会同时运行两个任务（实际上并不是同时运行，只是通过快速转换两个任务的运行最后看上去是同时运行）。&lt;/p&gt;&#10;&lt;p&gt;示例程序有很多，这里介绍其中最简单的 MultiBlink 的程序。&lt;/p&gt;&#10;&lt;img alt="在这里插入图片描述" class="gallery-image" data-flex-basis="768px" data-flex-grow="320" height="250" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/msp432%E5%9C%A8energia%E4%B8%8A%E7%9A%84%E4%BD%BF%E7%94%A8%E4%B8%8B/img/e7c8578e4b34b19fce183c3a6cf317c1.webp" width="800"&gt;&lt;h4 id="task1"&gt;&lt;a href="#task1" class="header-anchor"&gt;&lt;/a&gt;TASK1&#10;&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-C++" data-lang="C++"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define LED BLUE_LED&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;setup&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// initialize the digital pin as an output.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;pinMode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;LED&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;OUTPUT&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;loop&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;digitalWrite&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;LED&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;HIGH&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//turn the LED on by making the voltage HIGH&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// wait for a second&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;digitalWrite&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;LED&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;LOW&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//turn the LED off by making the voltage LOW&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// wait for a second&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="task2"&gt;&lt;a href="#task2" class="header-anchor"&gt;&lt;/a&gt;TASK2&#10;&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-C++" data-lang="C++"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define LED GREEN_LED&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;setupGreenLed&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// initialize the digital pin as an output.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;pinMode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;LED&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;OUTPUT&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;loopGreenLed&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;digitalWrite&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;LED&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;HIGH&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// turn the LED on&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// wait for half a second&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;digitalWrite&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;LED&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;LOW&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// turn the LED off&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// wait for half a second&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="task3"&gt;&lt;a href="#task3" class="header-anchor"&gt;&lt;/a&gt;TASK3&#10;&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-C++" data-lang="C++"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define LED RED_LED&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;setupRedLed&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// initialize the digital pin as an output.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;pinMode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;LED&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;OUTPUT&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;loopRedLed&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;digitalWrite&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;LED&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;HIGH&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// turn the LED on&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// wait for 1/10 second&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;digitalWrite&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;LED&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;LOW&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// turn the LED off&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// wait for 1/10 second&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;该程序可以让 LaunchPad 上的三色 LED 以多种不同颜色的组合进行闪烁，有一说一还挺炫酷。&lt;/p&gt;&#10;</description></item><item><title>MSP430在Energia上的使用（上）</title><link>https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/msp430%E5%9C%A8energia%E4%B8%8A%E7%9A%84%E4%BD%BF%E7%94%A8%E4%B8%8A/</link><pubDate>Wed, 26 Aug 2020 17:32:10 +0800</pubDate><guid>https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/msp430%E5%9C%A8energia%E4%B8%8A%E7%9A%84%E4%BD%BF%E7%94%A8%E4%B8%8A/</guid><description>&lt;img src="https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/msp430%E5%9C%A8energia%E4%B8%8A%E7%9A%84%E4%BD%BF%E7%94%A8%E4%B8%8A/cover.jpg" alt="Featured image of post MSP430在Energia上的使用（上）" /&gt;&lt;h1 id="msp430-在-energia-上的使用上"&gt;&lt;a href="#msp430-%e5%9c%a8-energia-%e4%b8%8a%e7%9a%84%e4%bd%bf%e7%94%a8%e4%b8%8a" class="header-anchor"&gt;&lt;/a&gt;MSP430 在 Energia 上的使用（上）&#10;&lt;/h1&gt;&lt;p&gt;说实话我也不确定会不会有后面的笔记，但是这次实验的确相当于没有做完。&lt;/p&gt;&#10;&lt;!-- @import "[TOC]" {cmd="toc" depthFrom=1 depthTo=6 orderedList=false} --&gt;&#10;&lt;!-- code_chunk_output --&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="#msp430-%e5%9c%a8-energia-%e4%b8%8a%e7%9a%84%e4%bd%bf%e7%94%a8%e4%b8%8a" &gt;MSP430 在 Energia 上的使用（上）&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="#%e5%87%86%e5%a4%87%e5%b7%a5%e4%bd%9c" &gt;准备工作&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="#%e9%97%ae%e9%a2%98%e6%84%8f%e4%b9%89" &gt;问题意义&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="#%e5%ae%9e%e9%aa%8c%e4%b8%80%e6%b5%8b%e8%af%95%e4%bc%a0%e8%be%93%e6%8e%a5%e5%8f%a3" &gt;实验一：测试传输接口&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="#%e5%ae%9e%e9%aa%8c%e7%8e%b0%e8%b1%a1" &gt;实验现象：&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="#%e5%ae%9e%e9%aa%8c%e7%bb%93%e8%ae%ba" &gt;实验结论：&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="#%e5%ae%9e%e9%aa%8c%e4%ba%8c%e7%a7%bb%e6%a4%8d%e5%88%b0-arduinoide" &gt;实验二：移植到 ArduinoIDE&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="#%e5%a4%87%e6%b3%a8" &gt;备注&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;!-- /code_chunk_output --&gt;&#10;&lt;h2 id="准备工作"&gt;&lt;a href="#%e5%87%86%e5%a4%87%e5%b7%a5%e4%bd%9c" class="header-anchor"&gt;&lt;/a&gt;准备工作&#10;&lt;/h2&gt;&lt;p&gt;终于狠下心花了百元大洋买了块 MSP430F5529LP 板子，准备研究一下板载仿真器在 Energia 中是如何进行烧录的。&lt;/p&gt;&#10;&lt;p&gt;通过 TI 公司的官方文件《MSP430F5529 LaunchPad Development Kit……》，我们其实可以得到 LaunchPad 的原理图，因为整个原理图用了四页，这里就不详细展示了，有需要可以在 TI 官网找。我只截取板载仿真器和 MSP430F5529 芯片的接口部分的图&lt;/p&gt;&#10;&lt;img alt="在这里插入图片描述" class="gallery-image" data-flex-basis="241px" data-flex-grow="100" height="417" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/msp430%E5%9C%A8energia%E4%B8%8A%E7%9A%84%E4%BD%BF%E7%94%A8%E4%B8%8A/img/ce2078a0f1addb14d8380c3564acccfa.webp" width="420"&gt;&lt;p&gt;其中板载仿真器被 TI 公司命名为 ezFET，应该是简版仿真器的意思，除去电源线部分，我们可以看到信息传输分为两部分——SBW 和 UART。其中 SBW 相当于两线 JTAG，可以当做仿真器接口，而 UART 则是使用的 MSP430 的 BSL 接口，其只能作为烧录口。&lt;/p&gt;&#10;&lt;p&gt;那么看到这其实问题就很简单了，我们需要确定 Energia 在烧录的时候具体是用的哪个接口。&lt;/p&gt;&#10;&lt;h2 id="问题意义"&gt;&lt;a href="#%e9%97%ae%e9%a2%98%e6%84%8f%e4%b9%89" class="header-anchor"&gt;&lt;/a&gt;问题意义&#10;&lt;/h2&gt;&lt;p&gt;一般情况下，我们在使用 LaunchPad 时，是不需要管这个仿真器是如何工作的，但是如果当我们手里只有一块没有板载仿真器的开发板或者甚至只有一块芯片的时候，我们又该如何对其使用 Energia 呢，是应该用 JTAG 连接吗，还是使用 SBW，亦或是使用 BSL？我们是否能将 EnergiaIDE 的移植到 ArduinoIDE 上呢（因为 Energia 事实上能够使用的资源远远不及 Arduino，而且无法用 VSCode 这个大杀器）？&lt;/p&gt;&#10;&lt;h2 id="实验一测试传输接口"&gt;&lt;a href="#%e5%ae%9e%e9%aa%8c%e4%b8%80%e6%b5%8b%e8%af%95%e4%bc%a0%e8%be%93%e6%8e%a5%e5%8f%a3" class="header-anchor"&gt;&lt;/a&gt;实验一：测试传输接口&#10;&lt;/h2&gt;&lt;p&gt;这个工作其实很简单，因为板子在设计的时候就是通过跳线进行连接的，所以我们只需要调整跳线位置即可进行测试。&lt;/p&gt;&#10;&lt;img alt="在这里插入图片描述" class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1400" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/msp430%E5%9C%A8energia%E4%B8%8A%E7%9A%84%E4%BD%BF%E7%94%A8%E4%B8%8A/img/441189fa41578c8341549dbe5ee0fbf8.webp" width="1050"&gt;&lt;h3 id="实验现象"&gt;&lt;a href="#%e5%ae%9e%e9%aa%8c%e7%8e%b0%e8%b1%a1" class="header-anchor"&gt;&lt;/a&gt;实验现象：&#10;&lt;/h3&gt;&lt;ol&gt;&#10;&lt;li&gt;在安装好 Energia 以及板子驱动等之后，连接电脑 USB 与 ezFET 的 MicroUSB 接口，选择好端口和板子型号，选择示例程序 blink，直接点击上传程序。（上传成功，红灯闪烁）&lt;/li&gt;&#10;&lt;li&gt;取下 RX 和 TX 跳线，剩下 SBWTCK 和 SBWTDIO，然后再次上传。（上传成功，红灯闪烁）&lt;/li&gt;&#10;&lt;li&gt;取下 SBWTCK 和 SBWTDIO，剩下 RX 和 TX 跳线，然后再次上传。（上传失败，显示未检测到链接报错）&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h3 id="实验结论"&gt;&lt;a href="#%e5%ae%9e%e9%aa%8c%e7%bb%93%e8%ae%ba" class="header-anchor"&gt;&lt;/a&gt;实验结论：&#10;&lt;/h3&gt;&lt;p&gt;在 Energia 中，默认通过板载仿真器 ezFET 得 SBW 接口对 MSP430 芯片进行烧录。&lt;/p&gt;&#10;&lt;h2 id="实验二移植到-arduinoide"&gt;&lt;a href="#%e5%ae%9e%e9%aa%8c%e4%ba%8c%e7%a7%bb%e6%a4%8d%e5%88%b0-arduinoide" class="header-anchor"&gt;&lt;/a&gt;实验二：移植到 ArduinoIDE&#10;&lt;/h2&gt;&lt;p&gt;ArduinoIDE 本身自带了非常多的库，但是因为兼容性问题，并不支持直接移植到 Energia 上，所以 Energia 上目前可以直接使用的库可谓是非常少。而且无论是 ArduinoIDE 还是 EnergiaIDE 的代码辅助功能都非常垃圾，而如果能使用 VSCode 的 Arduino 插件就可以大大减轻这一问题。&lt;/p&gt;&#10;&lt;p&gt;移植方法很简单，打开 Energia 的目录，找到 hardware，把其中 Energia 文件夹复制到 ArduinoIDE 目录的 hardware 文件夹里。再把 Energia 的 tools 里的东西放在 ArduinoIDE 的 hardware-tools 里即可。这里需要说明的是，在复制完后可以点开 ArduinoIDE，简单做个 demo 或者直接用 energia 的 blink 作为测试，如果出现&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;exec: &amp;#34;/bin/msp430-g++&amp;#34;: file does not exist&#10;为开发板 MSP-EXP430F5529LP 编译时出错。&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;需要修改 hardware-energia-msp430 文件夹里的 Platform.txt 文件，这个文件定义了 CPU 体系结构等（包括编译器、生成过程参数、用于上载的工具等），可能和 ArduinoIDE 无法直接兼容。&lt;/p&gt;&#10;&lt;p&gt;具体修改规范可以参考 Arduino 官方的这个网址（需要科学上网）：https://arduino.github.io/arduino-cli/platform-specification/&lt;/p&gt;&#10;&lt;p&gt;如果暂时不想看这么麻烦的东西（像我一样），可以参考这个帖子：&lt;a class="link" href="http://bbs.mydigit.cn/read.php?tid=1792962" target="_blank" rel="noopener"&#10; &gt;[MSP]将 MSP430 纳入 ARDUINO IDE: 让 arduino 支持 MSP430F5438A&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;不过他里面给出的 Platform.txt 有点古老，ArduinoIDE 可能会给出警告，不过警告一般也可以不听，所以凑合着用吧。同时按照他的方法，可能无法完成直接烧录，因为我试了一下报错了。&lt;/p&gt;&#10;&lt;p&gt;移植并不算很成功，然后在 VSCode 里试了一下，一些定义会有点问题，暂时不确定是什么原因……说实话这个实验有点失败，还是能力欠缺了。&lt;/p&gt;&#10;&lt;p&gt;另外我也看了看 PlatformIO，里面对 MSP430 的支持同样很差，果然 MSP430 这种老古董还是有点过气了吗……&lt;/p&gt;&#10;&lt;p&gt;关于移植的方法我后面会再详细研究的（大概），如果研究好了再写这一篇的下章吧（意思是可 bi 能 si 会 qiang 没 po 有 zheng）。&lt;/p&gt;&#10;&lt;h2 id="备注"&gt;&lt;a href="#%e5%a4%87%e6%b3%a8" class="header-anchor"&gt;&lt;/a&gt;备注&#10;&lt;/h2&gt;&lt;p&gt;关于仿真器的问题，如果买到了没有仿真器的板子或者自己做板子，而手里又没有仿真器，除了 BSL 烧录的方法以外，也可以通过用 LaunchPad 板子直接把跳线那里外接出去，也可以当仿真器用。另外，ezFET 是一个开源硬件，详情可以参考&lt;a class="link" href="https://processors.wiki.ti.com/index.php/EZ-FET_lite" target="_blank" rel="noopener"&#10; &gt;官方文件&lt;/a&gt;，当然网上也有一些帖子讲了这个玩意的做法，同样可以参考。&lt;/p&gt;&#10;</description></item></channel></rss>