This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 编译器/TM4C1294NCPDT:QS_IOT

Guru**** 2439710 points
Other Parts Discussed in Thread: EK-TM4C1294XL

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/611098/compiler-tm4c1294ncpdt-qs_iot

器件型号:EK-TM4C1294XL

工具/软件:TI C/C++编译器

请帮助编辑  10个 LED 灯的"QS_IoT"程序("ti\TivaWare_C_Series-2.1.4.178\examples\boards\ek-tm4c1294xl\QS_IoT")...

我正在尝试,但有一些错误,我无法解决错误....

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    QS_IoT 是 Exosite 与云服务器进行交互的唯一示例。 您可以根据自己的应用程序自由参考和修改。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我知道,但我正在为4个 LED 编辑此程序,由于一些错误,我尝试 使用调试过程查找错误,但我不能识别错误(生成了 FLAUT INT)。

    相关帮助。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [报价用户="Kishan Patel"]我不能识别错误(生成 FLAUT INT)

    您能不能澄清您遇到了什么错误? 什么是 FLAUT INT? 您遇到意外的硬故障还是没有收到预期的中断? 您在运行代码时是否收到此错误、或者在调试时是否仅收到此错误(即单步执行或到达断点)?  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我尝试单步执行或到达断点、但它不起作用...
    我将向您发送程序代码,并提供您的邮件 ID。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    器件型号:EK-TM4C1294XL

    工具/软件:TI C/C++编译器

    我上载2个屏幕快照、并且我编辑过的 QS_IoT.c 文件构建无错误、并且我在此之后调试程序 FSR 例程" if (SyncWithExosite (g_psDeviceStatistics))
               {
                   //
                   //如果同步成功,请将“重试”计数重置为零
                   e2e.ti.com/.../qs_5F00_iot.c
                   G_ui32LinkRetries = 0;
               }"

     

     

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Kishan,

    我将您的最新帖子与您几天制作的主题合并在一起、因为我认为需要您提供的先前信息以及您提供的主题才能理解您的这篇新帖子。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    先生、请给我一个解决方案...
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Kishan,

    运行至 if (SyncWithExosite (g_psDeviceStatistics)时会发生什么情况?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在这个步骤中的"if (SyncWithExosite (g_psDeviceStatistics)"文件在 CPU 进入" FaultISR"后开始执行...

    QS_IOT 仅用于使用 Exosite 的2 LED 控制。 在这里、我应该使用 Exosite 服务器编辑此程序以进行4 LED 控制、但当我再添加一个 LED 时、会生成此问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    有多种原因会导致您出现软件故障。 有时是由于堆栈溢出造成的。 您可以快速尝试增加堆栈大小、看看这是否有用。 您需要倒带代码并查看 LR 寄存器、以了解导致故障的指令。 请参阅应用手册 www.ti.com/.../spma043.pdf 、以跟踪故障的根本原因。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    主席先生,这不起作用
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Kp、

    您不能在不修改(stats.c)的情况下将 LED 添加到(ports.c)或 IOT 服务器客户端中、例如添加2个新的唯一 LED 别名(名称)以发送到云。 (stats.c)中使用的别名必须与 IOT s服务器 LED 别名完全匹配。 您还必须更改#defined [NUM_STATS]值、以匹配所有 Tstat (stats.h)的总数、或者很可能在连接中遇到 IOT 故障。

    希望这对您有所帮助。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、先生、
    我应该在"stats.C"文件中修改哪些内容,您应该说已经修改了"#Defined[NUM_STATS]=15",我已经修改并尝试了...
    您为"6-LED"编辑"QS_IoT"程序。此程序中的修改是什么、您将修改提供给我。
    我已经尝试在几周内修改此程序...
    请提供在"QS_IoT"程序"6 LED"接口中实际有用的建议。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、BP101、非常感谢您的参与、因为我对该示例代码的复杂性没有太多经验。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    NUM_STATS 是一个关键值、 如果关闭 MCU 、它将对 MCU 进行一次故障排除 、 始终比列表中的 tStat 总数多1

    您必须将6个 LED 添加到现有 tStat 列表(stats.c/h)中、因为唯一别名与定义的示例统计数据非常相似、但使用您自己的名称、 复制 现有语法格式。  6 个 LED 服务器名称 必须具有您 在(stats.c)中命名的相同别名、 例如 LED1=(myaliasforled1)、LED2 (myaliasforled2)等。 根据 LED 功能是否为双向 控制、LED 状态更新可定义为读取/写入或其他您选择的状态。 这意味着您可以从云服务器打开 LED、    在物联网 应用中进行读取功能更新、并从物联网应用到服务器进行 LED 写入更新。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    BTW 如果服务器别名与应用程序统计数据不完全匹配、则 IOT 服务器可能不会对您的 CIK 进行身份验证。 在这种情况下,您的应用程序可能无法激活 CIK,您必须在服务器上重新分配新的 CIK 并在客户端控制台上激活它。 当 EEROM 中的客户机 CIK 与服务器上的 CIK 不匹配时、会发生这种情况、请确保它们在连接的两端是相同的。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢先生...
    当我在不起作用的情况下再添加一个 LED 时,我会尝试使用4led。 您实际上尝试在该板上使用5或6个 LED 灯,然后确定问题并告诉我什么是问题。

    //
    //
    // QS_IoT.c -连接到云服务器的快速启动应用程序。
    //
    //版权所有(c) 2013-2017 Texas Instruments Incorporated。 保留所有权利。
    //软件许可协议
    //
    //德州仪器(TI)仅提供和使用此软件
    //专门用于 TI 的微控制器产品。 该软件归其所有
    // TI 和/或其供应商、受适用版权保护
    //法律。 您不能将此软件与"病毒"开源软件结合使用
    //软件,以便形成一个更大的程序。
    //
    //此软件按“原样”提供,且存在所有故障。
    //不作任何明示、暗示或法定的保证,包括但
    //不限于对适销性和适用性的暗示保证
    //此软件的特定用途。 TI 不得以任何方式进行
    //情况,对特殊、偶然或从属事件负责
    //任何原因造成的损害。
    //
    //这是 EK-TM4C1294XL 固件包版本2.1.4.178的一部分。
    //
    //

    #include
    #include
    #include
    #include "inc/hw_memmap.h"
    #include "inc/hw_types.h"
    #include "inc/hw_ints.h"
    #include "inc/hw_adc.h"
    #include "driverlib/adc.h"
    #include "driverlib/gpio.h"
    #include "driverlib/pin_map.h"
    #include "driverlib/rom.h"
    #include "driverlib/rom_map.h"
    #include "driverlib/sysctl.h"
    #include "driverlib/SysTick .h"
    #include "driverlib/uart.h"
    #include "driverlib/interrupt.h"
    #include "driverlib/timer.h"
    #include "utils/cmdline.h"
    #include "utils/uartstdio.h"
    #include "utils/ustdlib.h"
    #include "utils/lwiplib.h"
    #include "drivers/pinout.h"
    #include "drivers/buttons.h"
    #include "drivers/exosite_hal_lwip.h"
    #include "drivers/eth_client_lwip.h"
    #include "exosite.h"
    #include "stats.h"
    #include "qs_IoT.h"
    #include "requests.h"
    #include "commands.h"
    #include "tickets.h"

    //
    //
    //! \addtogroup example_list
    //!

    物联网快速入门(QS_IoT)


    //!
    //!
    //! 此应用程序会在上记录有关用户活动的各种信息
    //! 并定期将其报告到 Exosite 管理的云服务器。
    //! 要使用此应用程序的所有功能、您需要
    //! 拥有 Exosite 帐户、并确保您正在使用的设备
    //! 注册到 Exosite 配置文件、其原始 MAC 地址来自
    //! 工厂。
    //!
    //! 如果您尚未拥有 Exosite 帐户、则可以在创建一个帐户
    //! http://ti.exosite.com。其中的 Web 界面将帮助指导您完成
    //! 帐户创建过程。 Quickstart 中也提供了相关信息
    //! EK-TM4C1294XL 评估套件随附的文档。
    //!
    //! 此应用程序通过虚拟 COM 使用基于命令行的接口
    //! 端口、设置为115、200-8-N-1。 该应用
    //! 需要有线以太网连接和互联网访问才能执行
    //! 云连接活动。
    //!
    //! 应用程序运行后、您应该能够看到程序输出
    //! 并与命令行交互。 命令
    //! Line (行)允许您查看从 Exosite 发送的信息
    //! 服务器、更改 LED 的状态以及玩 tic-TAC-TTOE 游戏。 如果你
    //! 遇到互联网连接问题、需要查找您的 MAC 地址或需要
    //! 要使用 Exosite 重新激活 EK-TM4C1294XL 板、请使用命令行
    //! 接口还具有支持这些操作的选项。 类型
    //! 命令提示符处的"help"以查看可用命令列表。
    //!
    //! 如果您的本地互联网连接需要使用代理服务器、您可以
    //! 需要在之前通过虚拟 COM 端口终端输入命令
    //! 器件将能够连接到 Exosite。 出现提示时
    //! 应用程序中、键入'setproxy help'以获取有关如何配置的信息
    //! 代理。 或者、您可以取消注释以下的 define 语句
    //! "custom_proxy"设置、填写您本地的正确信息
    //! HTTP 代理服务器、然后重新编译此示例。 这将被永久置位
    //! 作为默认连接点的代理。
    //!
    //
    //

    //
    //
    //驱动程序库遇到错误时调用的错误例程。
    //
    //
    #ifdef 调试
    无效
    _error__(char * pcFilename、uint32_t ui32Line)


    #endif

    //
    //
    //全局宏定义。
    //
    //
    #define MAX_SYNC_RETESS 20.

    //#define custom_proxy
    //#define proxy_address " your.proxy.address"
    //#define proxy_port 80

    //
    //
    //将链接到 Exosite 的全局变量。
    //
    //
    uint32_t g_ui32SW1 Presses = 0;
    uint32_t g_ui32SW2 Presses = 0;
    uint32_t g_ui32 InternalTempF = 0;
    uint32_t g_ui32InternalTempC = 0;
    uint32_t g_ui32TimerIntCount = 0;
    uint32_t g_ui32第二 OnTime = 0;
    uint32_t g_ui32LEDD1 = 0;
    uint32_t g_ui32LEDD2 = 0;
    uint32_t g_ui32LEDD3 = 0;
    uint32_t g_ui32LEDD4 = 0;
    uint32_t g_ui32LEDD5 = 0;

    char g_pcLocation[50]="";
    char g_pcContactEmail[100]="";
    char g_pcAlert[140]="";

    //
    //
    //用于连接 Exosite 的全局结构。
    //
    //
    tStat g_sSW1 Presses =
    {"SW1-PRESS"、&g_ui32SW1 Presses、"usrsw1"、INT、WRITE_ONLY};

    tStat g_sSW2 Presses =
    {"SW2-presss"、&g_ui32SW2Presses、"usrsw2"、INT、write_only};

    tStat g_sInternalTempF =
    {"Temp (F)"、&g_ui32InternalTempF、0、INT、WRITE_ONLY};

    tStat g_sInternalTempC =
    {"Temp (C)"、&g_ui32InternalTempC、"jtemp"、INT、write_only};

    tStat g_sSecondsOnTime =
    {"复位后的时间"、&g_ui32SecondsOnTime、"ontime"、INT、write_only};

    tStat g_sLEDD1 =
    {"LED D1"、&g_ui32LEDD1、"ledd1"、INT、READ_WRITE};

    tStat g_sLEDD2 =
    {"LED D2"、&g_ui32LEDD2、"ledd2"、INT、Read_write};

    tStat g_sLEDD3 =
    {"LED D3"、&g_ui32LEDD3、"ledd3"、INT、Read_write};

    tStat g_sLEDD4 =
    {"LED D4"、&g_ui32LEDD4、"ledd4"、INT、Read_write};

    tStat g_sLEDD5 =
    {"LED D5"、&g_ui32LEDD5、"ledd5"、INT、Read_write};

    tStat g_sLocation =
    {"location"、g_pcLocation、"location"、string、read_only};

    tStat g_sBoardState =
    {NULL、&g_ui32BoardState、"gamest"、hex、write_only};

    tStat g_sContactEmail =
    {"Contact Email"、g_pContactEmail、"emailaddr"、string、read_write};

    tStat g_sAlert =
    {"Alert Message"、g_pcAlert、"alert"、string、none};

    //
    //
    //要与 Exosite 同步的所有 tStat 结构的全局指针数组。
    //
    //
    tStat *g_psDeviceStatistics (tStat *g_psDeviceStatistics)[NUM_STATS]=

    &g_sSW1演示、
    &g_sSW2演示、
    &g_sInternalTempF、
    &g_sInternalTempC、
    g_sSecondsOnTime (&G)、
    &g_sLEDD1、
    &g_sLEDD2、
    &g_sLEDD3、
    &g_sLEDD4、
    &g_sLEDD5、
    g_sLocation (&G)、
    g_sBoardState (&G)、
    &g_sContactEmail、
    g_sAlert (&G)、
    null
    };

    //
    //
    //用于跟踪系统时钟的全局变量。
    //
    //
    uint32_t g_ui32SysClock = 0;

    //
    //
    //用于跟踪 IP 地址的全局变量。
    //
    //
    uint32_t g_ui32IPAddr;

    //
    //
    //用于跟踪应用程序状态的标志。
    //
    //
    bool g_bPrintingData = false;
    bool g_bGameActive = false;
    volatile bool g_BOnline = false;

    //
    //
    //用于跟踪错误条件的全局变量。
    //
    //
    枚举

    ERR_IP_ADDR、
    ERR_CIK、
    ERR_UNKNOWN、
    ERR_NO_ERR
    } g_ui32Err = ERR_NO_ERR;

    uint32_t g_ui32LinkRetries = 0;

    //
    //
    //命令行解释器的输入缓冲区。
    //
    //
    char g_cInput[APP_INPUT_BUF_SIZE];

    //
    //
    //给定统计信息列表,将每个项目打印到 UART 中。
    //
    //
    无效
    PrintStats (tStat ** psStats)

    uint32_t ui32Index;
    char pcStatValue[256];
    char *pcStatName;

    //
    //循环显示列表中的所有统计信息。
    //
    for (ui32Index = 0;psStats[ui32Index]!= NULL;ui32Index++)

    if (psStats[ui32Index]->pcName)

    //
    //对于每个统计信息,将名称和当前值打印到 UART。
    //
    pcStatName = psStats[ui32Index]->pcName;
    StatPrintValue (psStats[ui32Index]、pcStatValue);

    UARTprintf ("%25s=%s\n"、pcStatName、pcStatValue);




    //
    //
    //将当前 MAC 地址打印到 UART。
    //
    //
    无效
    PrintMac (空)

    uint8_t ui8Idx;
    uint8_t pui8MACAddr[6];

    //
    //从以太网客户端层获取 MAC 地址。
    //
    EthClientMACAddrGet (pui8MACAddr);

    UARTprintf ("当前 MAC:");

    //
    //提取每对字符并将其打印到 UART 中。
    //
    对于(ui8Idx = 0;ui8Idx < 6;ui8Idx++)

    UARTprintf ("%02x"、pui8MACAddr[ui8Idx]);


    UARTprintf ("\n");


    //
    //
    //此函数打印此电路板的本地统计信息列表。
    //
    //
    无效
    PrintAllData (空)

    char cExositeCIK[CIK_length];

    if (UARTPeek ('\r')!=-1)

    G_bPrintingData = false;

    //
    //返回用户命令
    //
    UARTgets (g_cInput、APP_INPUT_BUF_SIZE);

    //
    //打印提示
    //
    UARTprintf ("\n>");

    返回;


    UARTprintf ("\033[2J\033[H");
    UARTprintf ("欢迎使用连接的 LaunchPad!!!!\n");
    UARTprintf ("物联网演示"\n);
    UARTprintf ("键入"帮助"以获取帮助。\n\n");

    //
    //打印出 MAC 地址以供参考
    //
    PrintMac();

    //
    //检查我们是否已经有 CIK,并将其打印到 UART
    //
    if (Exosite_GetCIK (cExositeCIK))

    UARTprintf ("当前 CIK:%s\n"、cExositeCIK);

    其他

    UARTprintf ("未找到 CIK。 连接到 Exosite 以获取一个。\n");


    //
    //检查我们未能连接到的次数(如果有)
    //服务器。
    //
    if ((g_ui32LinkRetries =0)&& g_BOnline)

    //
    //对于零故障,报告“链路正常”
    //
    UARTprintf ("链接状态:确定\n");

    否则、如果((g_ui32LinkRetries < MAX_SYNC_retries)&& g_BOnline)

    //
    //对于前几个故障,报告我们正在尝试的情况
    //重新建立链接。
    //
    UARTprintf ("链接状态:丢失(重试次数:%d)\n"、g_ui32LinkRetries);

    其他

    //
    //如果我们超过了最大重试次数,则将状态显示为
    //离线。
    //
    UARTprintf ("链接状态:脱机");


    //
    //打印一些标题文本。
    //
    UARTprintf ("\n 收集的统计信息\n");
    UARTprintf ("-------------------- \n");

    PrintStats (g_psDeviceStatistics);

    UARTprintf ("\n 按 Enter 键返回命令提示符...\n");

    UARTFlushTx (0);

    返回;


    //
    //
    //向 UART 打印一条帮助消息以帮助排除 Exosite 故障
    //连接问题。
    //
    //
    无效
    PrintConnectionHelp (空)

    UARTprintf ("排除外部连接故障:\n\n");

    UARTprintf ("+确保您已连接到互联网。\n\n");

    UARTprintf ("+确保已创建 Exosite 配置文件。\n\n");

    UARTprintf ("+确保您有一个\"已连接 LaunchPad\"设备\n");
    UARTprintf (" 在您的 Exosite 配置文件中创建。\n\n");

    UARTprintf ("+确保电路板的 MAC 地址为\n"\});
    UARTprintf (" 已正确注册您的 Exosite 配置文件。\n\n");

    UARTprintf ("+如果您有 CIK、请确保它与 CIK 匹配、\n);
    UARTprintf (" 此设备位于您的在线配置文件中。\n\n");

    UARTprintf ("+如果您有代理,请确保使用\n"\}配置它);
    UARTprintf (" 这个终端。 键入'setproxy help'以开始。\n");
    UARTprintf (" 设置代理后、键入"active"以获取\n");
    UARTprintf (" 新建 CIK、或"连接"、使用"n"连接到 exosite);
    UARTprintf (" 现有 CIK。\n\n");

    UARTprintf ("+确保您的器件可用于配置。\n");
    UARTprintf (" 如果您不确定是否启用了配置、\n");
    UARTprintf (" 请查看"请先读我"文档或联机文档\n");
    UARTprintf (" exosite 门户以了解更多信息。\n\n");


    //
    //
    //尝试在 EEPROM 中查找 CIK。 报告此操作的状态
    //连接到 UART。
    //
    //
    布尔
    GetEEPROMCIK (空)

    字符 pcExositeCIK[50];

    //
    //尝试从 EEPROM 读取 CIK,并根据我们的情况提醒用户
    //查找。
    //
    if (Exosite_GetCIK (pcExositeCIK))

    //
    //如果找到 CIK,请继续以确保 CIK 有效。
    //
    UARTprintf ("CIK 在 EEPROM 存储中找到。\n\nCIK:%s\n\n "、
    pcExositeCIK);

    其他

    //
    //如果未找到 CIK,请立即返回并指示故障。
    //
    UARTprintf ("在 EEPROM 中找不到 CIK。\n");
    返回0;


    UARTprintf ("正在连接到 Exosite ...\r");

    //
    //如果找到 CIK,请尝试与 Exosite 同步。 这应该告诉我们
    // CIK 是否有效。
    //
    if (SyncWithExosite (g_psDeviceStatistics))

    //
    //如果同步成功,则 CIK 有效。 提醒呼叫者。
    //
    UARTprintf ("已连接! 键入"stats"可查看此电路板的数据。");
    返回1;

    其他

    //
    //如果同步失败,则 CIK 可能无效,因此传递错误
    //返回到呼叫者。
    //
    UARTprintf ("初始同步失败。 Cik 可能无效。\n");
    返回0;



    //
    //
    //尝试通过请求向 Exosite 的服务器提供新的 CIK。 这种情况
    //应在 Exosite 的 CIK 与此器件的 CIK 不匹配时使用,或
    //在 EEPROM 中找不到 CIK 时。
    //
    //
    布尔
    ProvisionCIK (空)

    uint32_t ui32Idx;
    字符 pcExositeCIK[50];

    //
    //如果我们到达这里,在 EEPROM 存储中找不到 CIK。 我们可能需要
    //从服务器获取 CIK。
    //
    UARTprintf ("正在连接到 exosite 以获取新的 CIK... \n");

    //
    //尝试使用 Exosite 激活几次。 如果我们成功、请继续
    //新 CIK。 否则、失败。
    //
    对于(ui32Idx = 0;ui32Idx < 1;ui32Idx++)

    if (Exosite_Activate())

    //
    //如果 Exosite 为我们提供了 CIK,请向用户发送反馈
    //
    UARTprintf ("CIK 已获得!\n\n");

    if (Exosite_GetCIK (pcExositeCIK))

    UARTprintf ("CIK:%s\n"pcExositeCIK);
    UARTprintf ("已连接! ");
    UARTprintf ("键入"stats"以查看此电路板的数据。");

    其他

    //
    //这不应该发生,但在中打印错误消息
    //情况。
    //
    UARTprintf ("从 EEPROM 读取新的 CIK 时出错。\n"\});


    //
    //返回"true",表示我们找到了有效的 CIK。
    //
    返回 true;

    其他

    //
    //如果激活失败,请至少等待一秒钟
    //重试。
    //
    //rom_SysCtlDelay (g_ui32SysClock/3);
    if (Exosite_StatusCode ()=EXO_STATUS_Conflict)

    //
    //如果此电路板的 MAC 地址已经存在,则可能会发生这种情况
    //已激活,且设备尚未重新启用
    //新 CIK。
    //
    UARTprintf ("\n Exosite 报告此设备不是\n");
    UARTprintf ("可用于配置。 检查以确保\n");
    UARTprintf ("您具有正确的 MAC 地址、并且该地址为\n");
    UARTprintf ("此器件已启用、可在中进行配置\n");
    UARTprintf ("Exosite profile.\n\n");

    返回 false;




    //
    // Exosite 没有响应,所以请告知用户。
    //
    UARTprintf ("无法获取 CIK。\n\n");

    PrintConnectionHelp();

    //
    //返回"false",表示未找到 CIK。
    //
    返回 false;


    //
    //
    //尝试通过请求向 Exosite 的服务器提供新的 CIK。 这种情况
    //应在 Exosite 的 CIK 与此器件的 CIK 不匹配时使用,或
    //在 EEPROM 中找不到 CIK 时。
    //
    //
    布尔
    LocateValidCIK (空)

    //
    //尝试获取有效的 CIK。
    //
    UARTprintf ("正在查找 CIK... ");

    //
    //首先检查 EEPROM 是否有有效的 CIK。 如果找不到任何内容
    //在这里,尝试从 Exosite 提供 CIK。 如果我们可以获得
    // CIK、确保设置指示的全局状态变量
    //我们可以连接到 exosite。
    //
    if (GetEEPROMCIK ())

    返回 true;

    否则 if (ProvisionCIK ())

    返回 true;

    其他

    //
    //如果上述两种情况都失败,则返回 false,表示我们没有失败
    //查找 CIK。
    //
    返回 false;



    //
    //
    //从内部温度传感器获取读数,并更新
    //相应的全局统计数据。
    //
    //
    无效
    UpdateInternalTemp (空)

    uint32_t pui32ADC0Value[1]、ui32TempValueC、ui32TempValueF;

    //
    //使用 ADC 读取温度读数。
    //
    ROM_ADCProcessorTrigger (ADC0_BASE、3);

    //
    //等待 ADC 完成采样
    //
    while (!ROM_ADCIntStatus (ADC0_BASE、3、false))



    //
    //清除中断
    //
    ROM_ADCIntClear (ADC0_BASE、3);

    //
    //读取模拟电压测量值。
    //
    ROM_ADCSequenceDataGet (ADC0_BASE、3、pui32ADC0Value);

    //
    //将测量值转换为摄氏度和华氏度,并保存到
    //全局状态变量。
    //
    ui32TempValueC =((1475 * 4096)-(2250 * pui32ADC0Value[0]))/ 40960;
    G_ui32InternalTempC = ui32TempValueC;
    ui32TempValueF =((ui32TempValueC * 9)+ 160)/5;
    G_ui32InternalTempF = ui32TempValueF;


    //
    //
    //轮询按钮,并相应地更新全局状态。
    //
    //
    无效
    UpdateButtons (空)

    uint8_t ui8Buttons、ui8ButtonChanged;

    //
    //检查按钮的当前消抖状态。
    //
    ui8Buttons = ButtonPoll (&ui8ButtonChanged、0);

    //
    //如果任一按钮已被按下,请将该状态记录到
    //相应的全局变量。
    //
    if (button_pressed (usr_SW1、ui8Buttons、ui8ButtonChanged))

    G_ui32SW1演示++;

    否则 if (button_pressed (usr_sw2、ui8Buttons、ui8ButtonChanged))

    G_ui32SW2演示++;



    //
    //
    //根据全局状态变量打开或关闭 LED。
    //
    //
    无效
    UpdateLED (空)

    //
    //如果任一 LED 的全局标志都被置位,则打开该 LED。 否则、转弯
    //它们关闭。
    //
    if (g_ui32LEDD1)

    ROM_GPIOPinWrite (GPIO_PORTK_base、GPIO_PIN_1、GPIO_PIN_1);

    其他

    ROM_GPIOPinWrite (GPIO_PORTK_base、GPIO_PIN_1、0);


    if (g_ui32LEDD2)

    ROM_GPIOPinWrite (GPIO_PORTK_base、GPIO_PIN_0、GPIO_PIN_0);

    其他

    ROM_GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_0、0);


    if (g_ui32LEDD3)

    ROM_GPIOPinWrite (GPIO_PORTK_base、GPIO_PIN_2、GPIO_PIN_2);

    其他

    ROM_GPIOPinWrite (GPIO_PORTK_base、GPIO_PIN_2、0);

    if (g_ui32LEDD4)

    ROM_GPIOPinWrite (GPIO_PORTK_base、GPIO_PIN_3、GPIO_PIN_3);


    其他

    ROM_GPIOPinWrite (GPIO_PORTK_base、GPIO_PIN_3、0);

    if (g_ui32LEDD5)

    ROM_GPIOPinWrite (GPIO_PORTK_base、GPIO_PIN_4、GPIO_PIN_4);

    其他

    ROM_GPIOPinWrite (GPIO_PORTK_base、GPIO_PIN_4、0);




    //
    //
    //提示用户输入命令,并在等待用户时阻止
    //输入。 此函数将在执行单个命令后返回。
    //
    //
    无效
    CheckForUserCommands (空)

    Int iStatus;

    //
    // Peek 以查看完整命令是否已准备好进行处理
    //
    if (UARTPeek ('\r')=-1)

    //
    //如果没有,则返回,以便其它函数有机会运行。
    //
    返回;


    //
    //如果我们确实有命令,请按照它们的顺序立即处理它们
    //已收到。
    //
    while (UARTPeek ('\r')!=-1)

    //
    //返回用户命令
    //
    UARTgets (g_cInput、APP_INPUT_BUF_SIZE);

    //
    //处理接收到的命令
    //
    iStatus = CmdLineProcess (g_cInput);

    //
    //处理命令错误的情况。
    //
    if (iStatus = CMDLINE_BAD_CMD)

    UARTprintf ("命令错误!\n");


    //
    //处理过多参数的情况。
    //
    否则、如果(iStatus = CMDLINE_TOW_LOAD_ARGs)

    UARTprintf ("命令处理器的参数太多!\n");



    //
    //打印提示
    //
    UARTprintf ("\n>");




    //
    //
    // Timer0A 的中断处理程序。
    //
    //此函数将在 Timer0A 到期时定期调用
    //执行周期性任务,例如查找物理按钮上的输入,
    //并向云报告使用统计信息。
    //
    //
    无效
    Timer0IntHandler (空)

    //
    //清除计时器中断。
    //
    ROM_TimerIntClear (TIMER0_BASE、TIMER_TINA_TIMEOUT);

    //
    //跟踪此中断处理程序的次数
    //被调用。
    //
    G_ui32TimerIntCount++;

    //
    //轮询 GPIO 以查看按压事件。 全局更新
    //根据需要变量。
    //
    UpdateButtons();

    if (!g_bPrintingData)&&(!g_bGameActive)

    CheckForUserCommands();


    //
    //每秒执行以下操作。
    //
    if (!(g_ui32TimerIntCount % app_tICKS_PER_SEC))

    //
    //跟踪导通时间的总秒数
    //
    G_ui32第二 OnTime++;

    //
    //从内部温度传感器读取读数。
    //
    UpdateInternalTemp();

    //
    //将 LED 设置为正确的状态。
    //
    UpdateLEDs();

    //
    //检查我们是否有任何需要 UART 的正在进行的操作
    //
    if (g_BPrintingData)(如果(g_BPrintingData))

    //
    //如果用户已请求打印数据,请在此处执行该操作。
    //
    PrintAllData();

    否则 if (g_BGameActive)

    //
    //如果用户正在玩 tic-tac-脚趾 游戏,请进入游戏
    //状态机。
    //
    if (AdvanceGameState())

    //
    //当 tic-tac-脚趾 游戏状态函数返回'1'时,
    //游戏已结束。 打印换行符、删除"G_BGameActive"
    //标记、然后恢复正常操作。
    //
    UARTprintf ("\n>");
    G_bGameActive = 0;




    //
    //确保中断数量的运行计数不会
    //溢出。
    //
    if (g_ui32TimerIntCount =(20 * APP_TICKS_PER_SEC))

    //
    //将中断计数重置为零。
    //
    G_ui32TimerIntCount = 0;





    //
    //
    //将 Timer 0配置为通用的周期定时器,用于处理按钮
    //按键。
    //
    //
    无效
    配置定时器0 (空)

    //
    //启用此示例使用的外设。
    //
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_TIMER0);

    //
    //配置两个32位周期定时器。
    //
    ROM_TimerConfigure (TIMER0_BASE、TIMER_CFG_PERIODICASE);
    ROM_TimerLoadSet (TIMER0_BASE、TIMER_A、g_ui32SysClock / APP_TICKS_PER_SEC);

    //
    //降低此中断的优先级
    //
    ROM_IntPriorityGroupingSet (4);
    ROM_IntPrioritySet (INT_TIMER0A、0xE0);

    //
    //设置计时器超时的中断。
    //
    ROM_IntEnable (INT_TIMER0A);
    ROM_TimerIntEnable (TIMER0_BASE、TIMER_TINA_TIMEOUT);


    //
    //
    //启用并配置 ADC0以将内部温度传感器读取到中
    //采样序列发生器3。
    //
    //
    无效
    配置 ADC0 (空)

    //
    //启用 ADC0的时钟。
    //
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_ADC0);

    //
    //为处理器触发操作配置 ADC0采样序列发生器3。
    //
    ROM_ADCSequenceConfigure (ADC0_BASE、3、ADC_TRIGGER_PROCESSOR、0);

    //
    //增加此采样序列发生器的保持时间以解决问题
    //温度传感器勘误表(ADC#09)。
    //
    HWREG (ADC0_BASE + ADC_O_SSTSH3)= 0x4;

    //
    //为单个温度样本配置 ADC0序列发生器3
    //传感器。
    //
    ROM_ADCSequenceStepConfigure (ADC0_BASE、3、0、ADC_CTL_TS | ADC_CTL_IE |
    ADC_CTL_END);

    //
    //启用序列发生器。
    //
    ROM_ADCSequenceEnable (ADC0_BASE、3);

    //
    //清除序列发生器3的中断位以确保它未被置位
    //在采集第一个样本之前。
    //
    ROM_ADCIntClear (ADC0_BASE、3);


    //
    //
    //主函数。
    //
    //
    内部
    main (空)

    uint32_t ui32Timeout、ui32CIKRetries、ui32IPAddr;

    //
    //从 PLL 以120MHz 运行。
    //
    G_ui32SysClock = MAP_SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz |
    SYSCTL_OSC_MAIN |
    SYSCTL_USE_PLL |
    SYSCTL_CFG_VCO_480)、120000000);

    //
    //设置电路板的引脚排列,包括以太网所需的引脚
    //操作。
    //
    PinoutSet (1、0);

    //
    //启用 UART,清除终端,然后打印一条简短的消息。
    //
    UARTStdioConfig (0、115200、g_ui32SysClock);

    //
    //配置必要的外设。
    //
    ConfigureTimer0();
    ConfigureADC0();

    //
    //获取内部温度的初始读数
    //
    UpdateInternalTemp();

    //
    //初始化按钮
    //
    ButtonInit();

    //
    //如果已预先定义代理,请在此处启用它。
    //
    #ifdef custom_proxy
    usprintf (g_pcProxyAddress、proxyaddress);
    G_ui16ProxyPort = proxy_port;
    G_bUseProxy = true;
    #endif

    //
    //清除屏幕,然后打印欢迎消息。
    //
    UARTprintf ("\033[2J\033[H");
    UARTprintf ("欢迎使用连接的 LaunchPad!!!!\n");
    UARTprintf ("物联网演示"\n);
    UARTprintf ("键入\'help\'以获取帮助。\n\n");

    //
    //初始化 Exosite 层以允许以后使用基于 Exosite 的用户命令。
    //
    Exosite_Init ("texasinstruments"、"EK-tm4c1294xl"、if_ENET、0);

    //
    //首先假设我们尚未在线。
    //
    G_bOnline = false;

    //
    //假设未获取 IP 地址。
    //
    G_ui32IPAddr = 0;
    ui32IPAddr = 0;
    G_ui32Err = ERR_IP_ADDR;

    //
    //清除错误变量。
    //
    ui32IKRetries = 0;

    //
    //打印 MAC 地址,用户需要在 Exosite 注册该地址。
    //
    PrintMac();

    //
    //通知用户我们正在获取 IP 地址。
    //
    UARTprintf ("正在获取 IP... \n");

    //
    //循环几次以确保 DHCP 有时间查找 IP。
    //
    for (ui32Timeout = 10;ui32Timeout > 0;ui32Timeout -)

    //
    //检查我们是否有 IP。
    //
    if ((lwIPLocalIPAddrGet ()!= 0xffffffff)&&
    (lwIPLocalIPAddrGet ()!= 0x00000000))

    //
    //报告我们找到了 IP 地址。
    //
    UARTprintf ("IP 地址已获取:");
    ui32IPAddr = lwIPLocalIPAddrGet ();
    UARTprintf ("%d."、ui32IPAddr & 0xFF);
    UARTprintf ("%d."、ui32IPAddr >> 8 & 0xFF);
    UARTprintf ("%d."、ui32IPAddr >> 16 & 0xFF);
    UARTprintf ("%d\n"、ui32IPAddr >> 24和0xFF);

    //
    //更新全局 IP 地址变量。 同时更新全局变量
    //误差变量。
    //
    g_ui32IPAddr = ui32IPAddr;
    G_ui32Err = ERR_NO_ERR;

    //
    //如果我们可以找到并验证带有 Exosite 的 CIK,请将标志设置为
    //表示与云的连接有效。
    //
    G_bOnline = LocateValidCIK ();

    中断;

    否则、如果(ui32Timeout = 0)

    //
    //如果需要很长时间才能找到 IP 地址,请通知用户。 一个
    //以后仍可以找到 IP 地址,因此这不是
    //故障指示。
    //
    UARTprintf ("未找到 IP 地址、继续\n")
    "在后台搜索\n");


    //
    //延迟一秒钟,以允许 DHCP 找到 IP 地址。
    //
    ROM_SysCtlDelay (g_ui32SysClock / 3);


    //
    //如果我们没有有效的 Exosite 连接,请让用户知道
    //设备处于“脱机”状态,并且未与执行任何数据同步
    //云。
    //
    if (!g_bOnline)

    UARTprintf ("在脱机模式下继续。\n\n");


    //
    //打印提示
    //
    UARTprintf ("\n>");

    //
    //启用中断并启动计时器。 这将启用 UART 控制台
    //输入、还可以更新各种支持云的变量。
    //
    ROM_IntMasterEnable();
    ROM_TimerEnable (TIMER0_BASE、TIMER_A);

    //
    //主应用程序循环。
    //
    while (1)

    //
    //只有在我们与有有效连接时才运行以下循环
    // Exosite。
    //
    if (g_bOnline)

    //
    //尝试与 Exosite 同步数据
    //
    if (SyncWithExosite (g_psDeviceStatistics))

    //
    //如果同步成功,请将“重试”计数重置为零
    //
    G_ui32LinkRetries = 0;

    否则 if (Exosite_StatusCode ()=EXO_STATUS_NOAUTH)

    //
    //无法拥有旧的 CIK。 清除 UART 输出、和
    //停止任何数据打印操作。
    //
    G_bPrintingData = 0;
    UARTFlushTx (0);

    //
    //提醒用户 CIK 已过期。
    //
    UARTprintf ("\nCIK 不再有效。\n"\});
    UARTprintf ("应用程序将自动尝试");
    UARTprintf ("获取新的 CIK。\n");
    UARTprintf ("\n>");

    //
    //我们连接到 Exosite,所以链接仍然有效,但是
    //数据同步将不起作用。 请勿增加的数量
    //重试链接,但要考虑电路板的数据“脱机”
    //同步。
    //
    G_bOnline = false;
    G_ui32Err = ERR_CIK;
    ui32IKRetries = 0;

    //
    //将 LED 置于错误指示模式。 关闭 LED D1。
    //在本例中,LED D2用作错误指示器。
    //
    G_ui32LEDD1 = 0;

    其他

    //
    //同步由于其他原因失败。 因为我们不知道
    //失败原因,请尝试与 Exosite 服务器同步
    //再次。 递增故障计数器以辅助调试。
    //
    G_ui32LinkRetries ++;


    //
    //检查 IP 地址是否已更改。
    //
    ui32IPAddr = lwIPLocalIPAddrGet ();
    if (g_ui32IPAddr!= ui32IPAddr)

    //
    //是的,然后让应用程序知道链接丢失了,我们也是这样
    //离线。
    //
    G_bOnline = false;
    G_ui32Err = ERR_IP_ADDR;

    //
    //警告用户 IP 地址丢失。
    //
    G_bPrintingData = 0;
    UARTFlushTx (0);
    UARTprintf ("\nip 地址丢失/更改。\n");

    //
    //将 LED 置于错误指示模式。 关闭 LED D2。
    //在本例中,LED D1用作错误指示器。
    //
    G_ui32LEDD2 = 0;


    其他

    //
    //如果我们在这里,则意味着与 Exosite 的连接丢失。
    //处理可能导致这种情况的不同情况。
    //
    开关(g_ui32Err)

    案例 ERR_IP_ADDR:

    //
    //检查是否已获取 IP 地址。
    //
    ui32IPAddr = lwIPLocalIPAddrGet ();
    if ((ui32IPAddr =0xffffffff)||(ui32IPAddr ==0x00000000)

    //
    //否-延迟一秒钟以允许 DHCP 查找 IP
    //地址。
    //
    ROM_SysCtlDelay (g_ui32SysClock / 3);

    //
    //更改 LED D1的状态,使其闪烁,
    //表示 IP 地址丢失。
    //
    G_ui32LEDD1 ^= 1;
    中断;


    //
    //向用户报告 IP 地址。
    //
    UARTprintf ("IP 地址已获取:");
    UARTprintf ("%d."、ui32IPAddr & 0xFF);
    UARTprintf ("%d."、ui32IPAddr >> 8 & 0xFF);
    UARTprintf ("%d."、ui32IPAddr >> 16 & 0xFF);
    UARTprintf ("%d\n"、ui32IPAddr >> 24和0xFF);

    //
    //更新全局 IP 地址变量。
    //
    g_ui32IPAddr = ui32IPAddr;

    //
    //检查 CIK 是否有效。 这也有助于验证
    //与 Exosite 连接。
    //
    G_bOnline = LocateValidCIK ();
    if (!g_bOnline)

    //
    //无法连接到 Exosite。 假设 CIK 为
    //无效。
    //
    G_ui32Err = ERR_CIK;
    ui32IKRetries = 0;
    中断;


    //
    //打印提示
    //
    UARTprintf ("\n>");

    //
    //重置必要的变量以通知应用程序
    //清除错误。
    //
    G_ui32Err = ERR_NO_ERR;
    G_ui32LinkRetries = 0;

    中断;


    案例 ERR_CIK:

    //
    //尝试从 Exosite 获取新的 CIK。
    //
    if (ProvisionCIK ())

    //
    //成功-通知应用程序我们是
    //连接到 Exosite。 同时重置必要的
    //误差变量。
    //
    G_bOnline = true;
    G_ui32Err = ERR_NO_ERR;
    ui32IKRetries = 0;

    中断;


    //
    //由于我们未能获得新的 CIK,请尝试几次
    //然后放弃。
    //
    ui32CIKRetries ++;
    if (ui32CIKRetries > 5)

    //
    //向用户报告。
    //
    UARTprintf ("\nCIK 不再有效。 已尝试%d 次"、
    ui32IKRetries);
    UARTprintf ("要获取新的 CIK、但失败。\n");
    UARTprintf ("登录到 exosite 以检查");
    UARTprintf ("设备的状态。\n");

    //
    //尝试几次后无法获取新的 CIK。
    //因此停止尝试获取新的 CIK。
    //
    G_ui32Err = ERR_UNKNOWN;
    ui32IKRetries = 0;


    //
    //更改 LED D2的状态,使其闪烁,表示
    // CIK 不再有效。
    //
    G_ui32LEDD2 ^= 1;
    中断;


    案例 ERR_UNKNOWN:

    //
    //向用户报告。
    //
    UARTprintf ("\n 由于"而连接到 Exosite;
    UARTprintf ("未知原因.\n");

    //
    //显示 IP 地址。
    //
    UARTprintf ("IP 地址:");
    ui32IPAddr = lwIPLocalIPAddrGet ();
    UARTprintf ("%d."、ui32IPAddr & 0xFF);
    UARTprintf ("%d."、ui32IPAddr >> 8 & 0xFF);
    UARTprintf ("%d."、ui32IPAddr >> 16 & 0xFF);
    UARTprintf ("%d\n"、ui32IPAddr >> 24和0xFF);

    UARTprintf ("再次尝试与 Exosite 服务器同步。\n");
    UARTprintf ("\n>");

    //
    //设置相应的标志以重试与 Exosite 同步
    //服务器。
    //
    G_bOnline = true;
    G_ui32Err = ERR_NO_ERR;

    中断;


    ERR_NO_ERR 案例:
    默认值:

    中断;









    #define NUM_STATS 16.
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 BP101:
    我尝试您的建议、但在5个 LED 之后、它可以达到4个 LED、这是不可行的、您实际上尝试在 tm4c1294xl 电路板 QS_IoT 上针对高达6个 LED 的光源进行测试、并找到问题...并帮助我
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    //
    //
    // QS_IoT.c -连接到云服务器的快速启动应用程序。
    //
    //版权所有(c) 2013-2017 Texas Instruments Incorporated。 保留所有权利。
    //软件许可协议
    //
    //德州仪器(TI)仅提供和使用此软件
    //专门用于 TI 的微控制器产品。 该软件归其所有
    // TI 和/或其供应商、受适用版权保护
    //法律。 您不能将此软件与"病毒"开源软件结合使用
    //软件,以便形成一个更大的程序。
    //
    //此软件按“原样”提供,且存在所有故障。
    //不作任何明示、暗示或法定的保证,包括但
    //不限于对适销性和适用性的暗示保证
    //此软件的特定用途。 TI 不得以任何方式进行
    //情况,对特殊、偶然或从属事件负责
    //任何原因造成的损害。
    //
    //这是 EK-TM4C1294XL 固件包版本2.1.4.178的一部分。
    //
    //

    #include
    #include
    #include
    #include "inc/hw_memmap.h"
    #include "inc/hw_types.h"
    #include "inc/hw_ints.h"
    #include "inc/hw_adc.h"
    #include "driverlib/adc.h"
    #include "driverlib/gpio.h"
    #include "driverlib/pin_map.h"
    #include "driverlib/rom.h"
    #include "driverlib/rom_map.h"
    #include "driverlib/sysctl.h"
    #include "driverlib/SysTick .h"
    #include "driverlib/uart.h"
    #include "driverlib/interrupt.h"
    #include "driverlib/timer.h"
    #include "utils/cmdline.h"
    #include "utils/uartstdio.h"
    #include "utils/ustdlib.h"
    #include "utils/lwiplib.h"
    #include "drivers/pinout.h"
    #include "drivers/buttons.h"
    #include "drivers/exosite_hal_lwip.h"
    #include "drivers/eth_client_lwip.h"
    #include "exosite.h"
    #include "stats.h"
    #include "qs_IoT.h"
    #include "requests.h"
    #include "commands.h"
    #include "tickets.h"

    //
    //
    //! \addtogroup example_list
    //!

    物联网快速入门(QS_IoT)


    //!
    //!
    //! 此应用程序会在上记录有关用户活动的各种信息
    //! 并定期将其报告到 Exosite 管理的云服务器。
    //! 要使用此应用程序的所有功能、您需要
    //! 拥有 Exosite 帐户、并确保您正在使用的设备
    //! 注册到 Exosite 配置文件、其原始 MAC 地址来自
    //! 工厂。
    //!
    //! 如果您尚未拥有 Exosite 帐户、则可以在创建一个帐户
    //! http://ti.exosite.com。其中的 Web 界面将帮助指导您完成
    //! 帐户创建过程。 Quickstart 中也提供了相关信息
    //! EK-TM4C1294XL 评估套件随附的文档。
    //!
    //! 此应用程序通过虚拟 COM 使用基于命令行的接口
    //! 端口、设置为115、200-8-N-1。 该应用
    //! 需要有线以太网连接和互联网访问才能执行
    //! 云连接活动。
    //!
    //! 应用程序运行后、您应该能够看到程序输出
    //! 并与命令行交互。 命令
    //! Line (行)允许您查看从 Exosite 发送的信息
    //! 服务器、更改 LED 的状态以及玩 tic-TAC-TTOE 游戏。 如果你
    //! 遇到互联网连接问题、需要查找您的 MAC 地址或需要
    //! 要使用 Exosite 重新激活 EK-TM4C1294XL 板、请使用命令行
    //! 接口还具有支持这些操作的选项。 类型
    //! 命令提示符处的"help"以查看可用命令列表。
    //!
    //! 如果您的本地互联网连接需要使用代理服务器、您可以
    //! 需要在之前通过虚拟 COM 端口终端输入命令
    //! 器件将能够连接到 Exosite。 出现提示时
    //! 应用程序中、键入'setproxy help'以获取有关如何配置的信息
    //! 代理。 或者、您可以取消注释以下的 define 语句
    //! "custom_proxy"设置、填写您本地的正确信息
    //! HTTP 代理服务器、然后重新编译此示例。 这将被永久置位
    //! 作为默认连接点的代理。
    //!
    //
    //

    //
    //
    //驱动程序库遇到错误时调用的错误例程。
    //
    //
    #ifdef 调试
    无效
    _error__(char * pcFilename、uint32_t ui32Line)


    #endif

    //
    //
    //全局宏定义。
    //
    //
    #define MAX_SYNC_RETESS 20.

    //#define custom_proxy
    //#define proxy_address " your.proxy.address"
    //#define proxy_port 80

    //
    //
    //将链接到 Exosite 的全局变量。
    //
    //
    uint32_t g_ui32SW1 Presses = 0;
    uint32_t g_ui32SW2 Presses = 0;
    uint32_t g_ui32 InternalTempF = 0;
    uint32_t g_ui32InternalTempC = 0;
    uint32_t g_ui32TimerIntCount = 0;
    uint32_t g_ui32第二 OnTime = 0;
    uint32_t g_ui32LEDD1 = 0;
    uint32_t g_ui32LEDD2 = 0;
    uint32_t g_ui32LEDD3 = 0;
    uint32_t g_ui32LEDD4 = 0;
    uint32_t g_ui32LEDD5 = 0;

    char g_pcLocation[50]="";
    char g_pcContactEmail[100]="";
    char g_pcAlert[140]="";

    //
    //
    //用于连接 Exosite 的全局结构。
    //
    //
    tStat g_sSW1 Presses =
    {"SW1-PRESS"、&g_ui32SW1 Presses、"usrsw1"、INT、WRITE_ONLY};

    tStat g_sSW2 Presses =
    {"SW2-presss"、&g_ui32SW2Presses、"usrsw2"、INT、write_only};

    tStat g_sInternalTempF =
    {"Temp (F)"、&g_ui32InternalTempF、0、INT、WRITE_ONLY};

    tStat g_sInternalTempC =
    {"Temp (C)"、&g_ui32InternalTempC、"jtemp"、INT、write_only};

    tStat g_sSecondsOnTime =
    {"复位后的时间"、&g_ui32SecondsOnTime、"ontime"、INT、write_only};

    tStat g_sLEDD1 =
    {"LED D1"、&g_ui32LEDD1、"ledd1"、INT、READ_WRITE};

    tStat g_sLEDD2 =
    {"LED D2"、&g_ui32LEDD2、"ledd2"、INT、Read_write};

    tStat g_sLEDD3 =
    {"LED D3"、&g_ui32LEDD3、"ledd3"、INT、Read_write};

    tStat g_sLEDD4 =
    {"LED D4"、&g_ui32LEDD4、"ledd4"、INT、Read_write};

    tStat g_sLEDD5 =
    {"LED D5"、&g_ui32LEDD5、"ledd5"、INT、Read_write};

    tStat g_sLocation =
    {"location"、g_pcLocation、"location"、string、read_only};

    tStat g_sBoardState =
    {NULL、&g_ui32BoardState、"gamest"、hex、write_only};

    tStat g_sContactEmail =
    {"Contact Email"、g_pContactEmail、"emailaddr"、string、read_write};

    tStat g_sAlert =
    {"Alert Message"、g_pcAlert、"alert"、string、none};

    //
    //
    //要与 Exosite 同步的所有 tStat 结构的全局指针数组。
    //
    //
    tStat *g_psDeviceStatistics (tStat *g_psDeviceStatistics)[NUM_STATS]=

    &g_sSW1演示、
    &g_sSW2演示、
    &g_sInternalTempF、
    &g_sInternalTempC、
    g_sSecondsOnTime (&G)、
    &g_sLEDD1、
    &g_sLEDD2、
    &g_sLEDD3、
    &g_sLEDD4、
    &g_sLEDD5、
    g_sLocation (&G)、
    g_sBoardState (&G)、
    &g_sContactEmail、
    g_sAlert (&G)、
    null
    };

    //
    //
    //用于跟踪系统时钟的全局变量。
    //
    //
    uint32_t g_ui32SysClock = 0;

    //
    //
    //用于跟踪 IP 地址的全局变量。
    //
    //
    uint32_t g_ui32IPAddr;

    //
    //
    //用于跟踪应用程序状态的标志。
    //
    //
    bool g_bPrintingData = false;
    bool g_bGameActive = false;
    volatile bool g_BOnline = false;

    //
    //
    //用于跟踪错误条件的全局变量。
    //
    //
    枚举

    ERR_IP_ADDR、
    ERR_CIK、
    ERR_UNKNOWN、
    ERR_NO_ERR
    } g_ui32Err = ERR_NO_ERR;

    uint32_t g_ui32LinkRetries = 0;

    //
    //
    //命令行解释器的输入缓冲区。
    //
    //
    char g_cInput[APP_INPUT_BUF_SIZE];

    //
    //
    //给定统计信息列表,将每个项目打印到 UART 中。
    //
    //
    无效
    PrintStats (tStat ** psStats)

    uint32_t ui32Index;
    char pcStatValue[256];
    char *pcStatName;

    //
    //循环显示列表中的所有统计信息。
    //
    for (ui32Index = 0;psStats[ui32Index]!= NULL;ui32Index++)

    if (psStats[ui32Index]->pcName)

    //
    //对于每个统计信息,将名称和当前值打印到 UART。
    //
    pcStatName = psStats[ui32Index]->pcName;
    StatPrintValue (psStats[ui32Index]、pcStatValue);

    UARTprintf ("%25s=%s\n"、pcStatName、pcStatValue);




    //
    //
    //将当前 MAC 地址打印到 UART。
    //
    //
    无效
    PrintMac (空)

    uint8_t ui8Idx;
    uint8_t pui8MACAddr[6];

    //
    //从以太网客户端层获取 MAC 地址。
    //
    EthClientMACAddrGet (pui8MACAddr);

    UARTprintf ("当前 MAC:");

    //
    //提取每对字符并将其打印到 UART 中。
    //
    对于(ui8Idx = 0;ui8Idx < 6;ui8Idx++)

    UARTprintf ("%02x"、pui8MACAddr[ui8Idx]);


    UARTprintf ("\n");


    //
    //
    //此函数打印此电路板的本地统计信息列表。
    //
    //
    无效
    PrintAllData (空)

    char cExositeCIK[CIK_length];

    if (UARTPeek ('\r')!=-1)

    G_bPrintingData = false;

    //
    //返回用户命令
    //
    UARTgets (g_cInput、APP_INPUT_BUF_SIZE);

    //
    //打印提示
    //
    UARTprintf ("\n>");

    返回;


    UARTprintf ("\033[2J\033[H");
    UARTprintf ("欢迎使用连接的 LaunchPad!!!!\n");
    UARTprintf ("物联网演示"\n);
    UARTprintf ("键入"帮助"以获取帮助。\n\n");

    //
    //打印出 MAC 地址以供参考
    //
    PrintMac();

    //
    //检查我们是否已经有 CIK,并将其打印到 UART
    //
    if (Exosite_GetCIK (cExositeCIK))

    UARTprintf ("当前 CIK:%s\n"、cExositeCIK);

    其他

    UARTprintf ("未找到 CIK。 连接到 Exosite 以获取一个。\n");


    //
    //检查我们未能连接到的次数(如果有)
    //服务器。
    //
    if ((g_ui32LinkRetries =0)&& g_BOnline)

    //
    //对于零故障,报告“链路正常”
    //
    UARTprintf ("链接状态:确定\n");

    否则、如果((g_ui32LinkRetries < MAX_SYNC_retries)&& g_BOnline)

    //
    //对于前几个故障,报告我们正在尝试的情况
    //重新建立链接。
    //
    UARTprintf ("链接状态:丢失(重试次数:%d)\n"、g_ui32LinkRetries);

    其他

    //
    //如果我们超过了最大重试次数,则将状态显示为
    //离线。
    //
    UARTprintf ("链接状态:脱机");


    //
    //打印一些标题文本。
    //
    UARTprintf ("\n 收集的统计信息\n");
    UARTprintf ("-------------------- \n");

    PrintStats (g_psDeviceStatistics);

    UARTprintf ("\n 按 Enter 键返回命令提示符...\n");

    UARTFlushTx (0);

    返回;


    //
    //
    //向 UART 打印一条帮助消息以帮助排除 Exosite 故障
    //连接问题。
    //
    //
    无效
    PrintConnectionHelp (空)

    UARTprintf ("排除外部连接故障:\n\n");

    UARTprintf ("+确保您已连接到互联网。\n\n");

    UARTprintf ("+确保已创建 Exosite 配置文件。\n\n");

    UARTprintf ("+确保您有一个\"已连接 LaunchPad\"设备\n");
    UARTprintf (" 在您的 Exosite 配置文件中创建。\n\n");

    UARTprintf ("+确保电路板的 MAC 地址为\n"\});
    UARTprintf (" 已正确注册您的 Exosite 配置文件。\n\n");

    UARTprintf ("+如果您有 CIK、请确保它与 CIK 匹配、\n);
    UARTprintf (" 此设备位于您的在线配置文件中。\n\n");

    UARTprintf ("+如果您有代理,请确保使用\n"\}配置它);
    UARTprintf (" 这个终端。 键入'setproxy help'以开始。\n");
    UARTprintf (" 设置代理后、键入"active"以获取\n");
    UARTprintf (" 新建 CIK、或"连接"、使用"n"连接到 exosite);
    UARTprintf (" 现有 CIK。\n\n");

    UARTprintf ("+确保您的器件可用于配置。\n");
    UARTprintf (" 如果您不确定是否启用了配置、\n");
    UARTprintf (" 请查看"请先读我"文档或联机文档\n");
    UARTprintf (" exosite 门户以了解更多信息。\n\n");


    //
    //
    //尝试在 EEPROM 中查找 CIK。 报告此操作的状态
    //连接到 UART。
    //
    //
    布尔
    GetEEPROMCIK (空)

    字符 pcExositeCIK[50];

    //
    //尝试从 EEPROM 读取 CIK,并根据我们的情况提醒用户
    //查找。
    //
    if (Exosite_GetCIK (pcExositeCIK))

    //
    //如果找到 CIK,请继续以确保 CIK 有效。
    //
    UARTprintf ("CIK 在 EEPROM 存储中找到。\n\nCIK:%s\n\n "、
    pcExositeCIK);

    其他

    //
    //如果未找到 CIK,请立即返回并指示故障。
    //
    UARTprintf ("在 EEPROM 中找不到 CIK。\n");
    返回0;


    UARTprintf ("正在连接到 Exosite ...\r");

    //
    //如果找到 CIK,请尝试与 Exosite 同步。 这应该告诉我们
    // CIK 是否有效。
    //
    if (SyncWithExosite (g_psDeviceStatistics))

    //
    //如果同步成功,则 CIK 有效。 提醒呼叫者。
    //
    UARTprintf ("已连接! 键入"stats"可查看此电路板的数据。");
    返回1;

    其他

    //
    //如果同步失败,则 CIK 可能无效,因此传递错误
    //返回到呼叫者。
    //
    UARTprintf ("初始同步失败。 Cik 可能无效。\n");
    返回0;



    //
    //
    //尝试通过请求向 Exosite 的服务器提供新的 CIK。 这种情况
    //应在 Exosite 的 CIK 与此器件的 CIK 不匹配时使用,或
    //在 EEPROM 中找不到 CIK 时。
    //
    //
    布尔
    ProvisionCIK (空)

    uint32_t ui32Idx;
    字符 pcExositeCIK[50];

    //
    //如果我们到达这里,在 EEPROM 存储中找不到 CIK。 我们可能需要
    //从服务器获取 CIK。
    //
    UARTprintf ("正在连接到 exosite 以获取新的 CIK... \n");

    //
    //尝试使用 Exosite 激活几次。 如果我们成功、请继续
    //新 CIK。 否则、失败。
    //
    对于(ui32Idx = 0;ui32Idx < 1;ui32Idx++)

    if (Exosite_Activate())

    //
    //如果 Exosite 为我们提供了 CIK,请向用户发送反馈
    //
    UARTprintf ("CIK 已获得!\n\n");

    if (Exosite_GetCIK (pcExositeCIK))

    UARTprintf ("CIK:%s\n"pcExositeCIK);
    UARTprintf ("已连接! ");
    UARTprintf ("键入"stats"以查看此电路板的数据。");

    其他

    //
    //这不应该发生,但在中打印错误消息
    //情况。
    //
    UARTprintf ("从 EEPROM 读取新的 CIK 时出错。\n"\});


    //
    //返回"true",表示我们找到了有效的 CIK。
    //
    返回 true;

    其他

    //
    //如果激活失败,请至少等待一秒钟
    //重试。
    //
    //rom_SysCtlDelay (g_ui32SysClock/3);
    if (Exosite_StatusCode ()=EXO_STATUS_Conflict)

    //
    //如果此电路板的 MAC 地址已经存在,则可能会发生这种情况
    //已激活,且设备尚未重新启用
    //新 CIK。
    //
    UARTprintf ("\n Exosite 报告此设备不是\n");
    UARTprintf ("可用于配置。 检查以确保\n");
    UARTprintf ("您具有正确的 MAC 地址、并且该地址为\n");
    UARTprintf ("此器件已启用、可在中进行配置\n");
    UARTprintf ("Exosite profile.\n\n");

    返回 false;




    //
    // Exosite 没有响应,所以请告知用户。
    //
    UARTprintf ("无法获取 CIK。\n\n");

    PrintConnectionHelp();

    //
    //返回"false",表示未找到 CIK。
    //
    返回 false;


    //
    //
    //尝试通过请求向 Exosite 的服务器提供新的 CIK。 这种情况
    //应在 Exosite 的 CIK 与此器件的 CIK 不匹配时使用,或
    //在 EEPROM 中找不到 CIK 时。
    //
    //
    布尔
    LocateValidCIK (空)

    //
    //尝试获取有效的 CIK。
    //
    UARTprintf ("正在查找 CIK... ");

    //
    //首先检查 EEPROM 是否有有效的 CIK。 如果找不到任何内容
    //在这里,尝试从 Exosite 提供 CIK。 如果我们可以获得
    // CIK、确保设置指示的全局状态变量
    //我们可以连接到 exosite。
    //
    if (GetEEPROMCIK ())

    返回 true;

    否则 if (ProvisionCIK ())

    返回 true;

    其他

    //
    //如果上述两种情况都失败,则返回 false,表示我们没有失败
    //查找 CIK。
    //
    返回 false;



    //
    //
    //从内部温度传感器获取读数,并更新
    //相应的全局统计数据。
    //
    //
    无效
    UpdateInternalTemp (空)

    uint32_t pui32ADC0Value[1]、ui32TempValueC、ui32TempValueF;

    //
    //使用 ADC 读取温度读数。
    //
    ROM_ADCProcessorTrigger (ADC0_BASE、3);

    //
    //等待 ADC 完成采样
    //
    while (!ROM_ADCIntStatus (ADC0_BASE、3、false))



    //
    //清除中断
    //
    ROM_ADCIntClear (ADC0_BASE、3);

    //
    //读取模拟电压测量值。
    //
    ROM_ADCSequenceDataGet (ADC0_BASE、3、pui32ADC0Value);

    //
    //将测量值转换为摄氏度和华氏度,并保存到
    //全局状态变量。
    //
    ui32TempValueC =((1475 * 4096)-(2250 * pui32ADC0Value[0]))/ 40960;
    G_ui32InternalTempC = ui32TempValueC;
    ui32TempValueF =((ui32TempValueC * 9)+ 160)/5;
    G_ui32InternalTempF = ui32TempValueF;


    //
    //
    //轮询按钮,并相应地更新全局状态。
    //
    //
    无效
    UpdateButtons (空)

    uint8_t ui8Buttons、ui8ButtonChanged;

    //
    //检查按钮的当前消抖状态。
    //
    ui8Buttons = ButtonPoll (&ui8ButtonChanged、0);

    //
    //如果任一按钮已被按下,请将该状态记录到
    //相应的全局变量。
    //
    if (button_pressed (usr_SW1、ui8Buttons、ui8ButtonChanged))

    G_ui32SW1演示++;

    否则 if (button_pressed (usr_sw2、ui8Buttons、ui8ButtonChanged))

    G_ui32SW2演示++;



    //
    //
    //根据全局状态变量打开或关闭 LED。
    //
    //
    无效
    UpdateLED (空)

    //
    //如果任一 LED 的全局标志都被置位,则打开该 LED。 否则、转弯
    //它们关闭。
    //
    if (g_ui32LEDD1)

    ROM_GPIOPinWrite (GPIO_PORTK_base、GPIO_PIN_1、GPIO_PIN_1);

    其他

    ROM_GPIOPinWrite (GPIO_PORTK_base、GPIO_PIN_1、0);


    if (g_ui32LEDD2)

    ROM_GPIOPinWrite (GPIO_PORTK_base、GPIO_PIN_0、GPIO_PIN_0);

    其他

    ROM_GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_0、0);


    if (g_ui32LEDD3)

    ROM_GPIOPinWrite (GPIO_PORTK_base、GPIO_PIN_2、GPIO_PIN_2);

    其他

    ROM_GPIOPinWrite (GPIO_PORTK_base、GPIO_PIN_2、0);

    if (g_ui32LEDD4)

    ROM_GPIOPinWrite (GPIO_PORTK_base、GPIO_PIN_3、GPIO_PIN_3);


    其他

    ROM_GPIOPinWrite (GPIO_PORTK_base、GPIO_PIN_3、0);

    if (g_ui32LEDD5)

    ROM_GPIOPinWrite (GPIO_PORTK_base、GPIO_PIN_4、GPIO_PIN_4);

    其他

    ROM_GPIOPinWrite (GPIO_PORTK_base、GPIO_PIN_4、0);




    //
    //
    //提示用户输入命令,并在等待用户时阻止
    //输入。 此函数将在执行单个命令后返回。
    //
    //
    无效
    CheckForUserCommands (空)

    Int iStatus;

    //
    // Peek 以查看完整命令是否已准备好进行处理
    //
    if (UARTPeek ('\r')=-1)

    //
    //如果没有,则返回,以便其它函数有机会运行。
    //
    返回;


    //
    //如果我们确实有命令,请按照它们的顺序立即处理它们
    //已收到。
    //
    while (UARTPeek ('\r')!=-1)

    //
    //返回用户命令
    //
    UARTgets (g_cInput、APP_INPUT_BUF_SIZE);

    //
    //处理接收到的命令
    //
    iStatus = CmdLineProcess (g_cInput);

    //
    //处理命令错误的情况。
    //
    if (iStatus = CMDLINE_BAD_CMD)

    UARTprintf ("命令错误!\n");


    //
    //处理过多参数的情况。
    //
    否则、如果(iStatus = CMDLINE_TOW_LOAD_ARGs)

    UARTprintf ("命令处理器的参数太多!\n");



    //
    //打印提示
    //
    UARTprintf ("\n>");




    //
    //
    // Timer0A 的中断处理程序。
    //
    //此函数将在 Timer0A 到期时定期调用
    //执行周期性任务,例如查找物理按钮上的输入,
    //并向云报告使用统计信息。
    //
    //
    无效
    Timer0IntHandler (空)

    //
    //清除计时器中断。
    //
    ROM_TimerIntClear (TIMER0_BASE、TIMER_TINA_TIMEOUT);

    //
    //跟踪此中断处理程序的次数
    //被调用。
    //
    G_ui32TimerIntCount++;

    //
    //轮询 GPIO 以查看按压事件。 全局更新
    //根据需要变量。
    //
    UpdateButtons();

    if (!g_bPrintingData)&&(!g_bGameActive)

    CheckForUserCommands();


    //
    //每秒执行以下操作。
    //
    if (!(g_ui32TimerIntCount % app_tICKS_PER_SEC))

    //
    //跟踪导通时间的总秒数
    //
    G_ui32第二 OnTime++;

    //
    //从内部温度传感器读取读数。
    //
    UpdateInternalTemp();

    //
    //将 LED 设置为正确的状态。
    //
    UpdateLEDs();

    //
    //检查我们是否有任何需要 UART 的正在进行的操作
    //
    if (g_BPrintingData)(如果(g_BPrintingData))

    //
    //如果用户已请求打印数据,请在此处执行该操作。
    //
    PrintAllData();

    否则 if (g_BGameActive)

    //
    //如果用户正在玩 tic-tac-脚趾 游戏,请进入游戏
    //状态机。
    //
    if (AdvanceGameState())

    //
    //当 tic-tac-脚趾 游戏状态函数返回'1'时,
    //游戏已结束。 打印换行符、删除"G_BGameActive"
    //标记、然后恢复正常操作。
    //
    UARTprintf ("\n>");
    G_bGameActive = 0;




    //
    //确保中断数量的运行计数不会
    //溢出。
    //
    if (g_ui32TimerIntCount =(20 * APP_TICKS_PER_SEC))

    //
    //将中断计数重置为零。
    //
    G_ui32TimerIntCount = 0;





    //
    //
    //将 Timer 0配置为通用的周期定时器,用于处理按钮
    //按键。
    //
    //
    无效
    配置定时器0 (空)

    //
    //启用此示例使用的外设。
    //
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_TIMER0);

    //
    //配置两个32位周期定时器。
    //
    ROM_TimerConfigure (TIMER0_BASE、TIMER_CFG_PERIODICASE);
    ROM_TimerLoadSet (TIMER0_BASE、TIMER_A、g_ui32SysClock / APP_TICKS_PER_SEC);

    //
    //降低此中断的优先级
    //
    ROM_IntPriorityGroupingSet (4);
    ROM_IntPrioritySet (INT_TIMER0A、0xE0);

    //
    //设置计时器超时的中断。
    //
    ROM_IntEnable (INT_TIMER0A);
    ROM_TimerIntEnable (TIMER0_BASE、TIMER_TINA_TIMEOUT);


    //
    //
    //启用并配置 ADC0以将内部温度传感器读取到中
    //采样序列发生器3。
    //
    //
    无效
    配置 ADC0 (空)

    //
    //启用 ADC0的时钟。
    //
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_ADC0);

    //
    //为处理器触发操作配置 ADC0采样序列发生器3。
    //
    ROM_ADCSequenceConfigure (ADC0_BASE、3、ADC_TRIGGER_PROCESSOR、0);

    //
    //增加此采样序列发生器的保持时间以解决问题
    //温度传感器勘误表(ADC#09)。
    //
    HWREG (ADC0_BASE + ADC_O_SSTSH3)= 0x4;

    //
    //为单个温度样本配置 ADC0序列发生器3
    //传感器。
    //
    ROM_ADCSequenceStepConfigure (ADC0_BASE、3、0、ADC_CTL_TS | ADC_CTL_IE |
    ADC_CTL_END);

    //
    //启用序列发生器。
    //
    ROM_ADCSequenceEnable (ADC0_BASE、3);

    //
    //清除序列发生器3的中断位以确保它未被置位
    //在采集第一个样本之前。
    //
    ROM_ADCIntClear (ADC0_BASE、3);


    //
    //
    //主函数。
    //
    //
    内部
    main (空)

    uint32_t ui32Timeout、ui32CIKRetries、ui32IPAddr;

    //
    //从 PLL 以120MHz 运行。
    //
    G_ui32SysClock = MAP_SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz |
    SYSCTL_OSC_MAIN |
    SYSCTL_USE_PLL |
    SYSCTL_CFG_VCO_480)、120000000);

    //
    //设置电路板的引脚排列,包括以太网所需的引脚
    //操作。
    //
    PinoutSet (1、0);

    //
    //启用 UART,清除终端,然后打印一条简短的消息。
    //
    UARTStdioConfig (0、115200、g_ui32SysClock);

    //
    //配置必要的外设。
    //
    ConfigureTimer0();
    ConfigureADC0();

    //
    //获取内部温度的初始读数
    //
    UpdateInternalTemp();

    //
    //初始化按钮
    //
    ButtonInit();

    //
    //如果已预先定义代理,请在此处启用它。
    //
    #ifdef custom_proxy
    usprintf (g_pcProxyAddress、proxyaddress);
    G_ui16ProxyPort = proxy_port;
    G_bUseProxy = true;
    #endif

    //
    //清除屏幕,然后打印欢迎消息。
    //
    UARTprintf ("\033[2J\033[H");
    UARTprintf ("欢迎使用连接的 LaunchPad!!!!\n");
    UARTprintf ("物联网演示"\n);
    UARTprintf ("键入\'help\'以获取帮助。\n\n");

    //
    //初始化 Exosite 层以允许以后使用基于 Exosite 的用户命令。
    //
    Exosite_Init ("texasinstruments"、"EK-tm4c1294xl"、if_ENET、0);

    //
    //首先假设我们尚未在线。
    //
    G_bOnline = false;

    //
    //假设未获取 IP 地址。
    //
    G_ui32IPAddr = 0;
    ui32IPAddr = 0;
    G_ui32Err = ERR_IP_ADDR;

    //
    //清除错误变量。
    //
    ui32IKRetries = 0;

    //
    //打印 MAC 地址,用户需要在 Exosite 注册该地址。
    //
    PrintMac();

    //
    //通知用户我们正在获取 IP 地址。
    //
    UARTprintf ("正在获取 IP... \n");

    //
    //循环几次以确保 DHCP 有时间查找 IP。
    //
    for (ui32Timeout = 10;ui32Timeout > 0;ui32Timeout -)

    //
    //检查我们是否有 IP。
    //
    if ((lwIPLocalIPAddrGet ()!= 0xffffffff)&&
    (lwIPLocalIPAddrGet ()!= 0x00000000))

    //
    //报告我们找到了 IP 地址。
    //
    UARTprintf ("IP 地址已获取:");
    ui32IPAddr = lwIPLocalIPAddrGet ();
    UARTprintf ("%d."、ui32IPAddr & 0xFF);
    UARTprintf ("%d."、ui32IPAddr >> 8 & 0xFF);
    UARTprintf ("%d."、ui32IPAddr >> 16 & 0xFF);
    UARTprintf ("%d\n"、ui32IPAddr >> 24和0xFF);

    //
    //更新全局 IP 地址变量。 同时更新全局变量
    //误差变量。
    //
    g_ui32IPAddr = ui32IPAddr;
    G_ui32Err = ERR_NO_ERR;

    //
    //如果我们可以找到并验证带有 Exosite 的 CIK,请将标志设置为
    //表示与云的连接有效。
    //
    G_bOnline = LocateValidCIK ();

    中断;

    否则、如果(ui32Timeout = 0)

    //
    //如果需要很长时间才能找到 IP 地址,请通知用户。 一个
    //以后仍可以找到 IP 地址,因此这不是
    //故障指示。
    //
    UARTprintf ("未找到 IP 地址、继续\n")
    "在后台搜索\n");


    //
    //延迟一秒钟,以允许 DHCP 找到 IP 地址。
    //
    ROM_SysCtlDelay (g_ui32SysClock / 3);


    //
    //如果我们没有有效的 Exosite 连接,请让用户知道
    //设备处于“脱机”状态,并且未与执行任何数据同步
    //云。
    //
    if (!g_bOnline)

    UARTprintf ("在脱机模式下继续。\n\n");


    //
    //打印提示
    //
    UARTprintf ("\n>");

    //
    //启用中断并启动计时器。 这将启用 UART 控制台
    //输入、还可以更新各种支持云的变量。
    //
    ROM_IntMasterEnable();
    ROM_TimerEnable (TIMER0_BASE、TIMER_A);

    //
    //主应用程序循环。
    //
    while (1)

    //
    //只有在我们与有有效连接时才运行以下循环
    // Exosite。
    //
    if (g_bOnline)

    //
    //尝试与 Exosite 同步数据
    //
    if (SyncWithExosite (g_psDeviceStatistics))

    //
    //如果同步成功,请将“重试”计数重置为零
    //
    G_ui32LinkRetries = 0;

    否则 if (Exosite_StatusCode ()=EXO_STATUS_NOAUTH)

    //
    //无法拥有旧的 CIK。 清除 UART 输出、和
    //停止任何数据打印操作。
    //
    G_bPrintingData = 0;
    UARTFlushTx (0);

    //
    //提醒用户 CIK 已过期。
    //
    UARTprintf ("\nCIK 不再有效。\n"\});
    UARTprintf ("应用程序将自动尝试");
    UARTprintf ("获取新的 CIK。\n");
    UARTprintf ("\n>");

    //
    //我们连接到 Exosite,所以链接仍然有效,但是
    //数据同步将不起作用。 请勿增加的数量
    //重试链接,但要考虑电路板的数据“脱机”
    //同步。
    //
    G_bOnline = false;
    G_ui32Err = ERR_CIK;
    ui32IKRetries = 0;

    //
    //将 LED 置于错误指示模式。 关闭 LED D1。
    //在本例中,LED D2用作错误指示器。
    //
    G_ui32LEDD1 = 0;

    其他

    //
    //同步由于其他原因失败。 因为我们不知道
    //失败原因,请尝试与 Exosite 服务器同步
    //再次。 递增故障计数器以辅助调试。
    //
    G_ui32LinkRetries ++;


    //
    //检查 IP 地址是否已更改。
    //
    ui32IPAddr = lwIPLocalIPAddrGet ();
    if (g_ui32IPAddr!= ui32IPAddr)

    //
    //是的,然后让应用程序知道链接丢失了,我们也是这样
    //离线。
    //
    G_bOnline = false;
    G_ui32Err = ERR_IP_ADDR;

    //
    //警告用户 IP 地址丢失。
    //
    G_bPrintingData = 0;
    UARTFlushTx (0);
    UARTprintf ("\nip 地址丢失/更改。\n");

    //
    //将 LED 置于错误指示模式。 关闭 LED D2。
    //在本例中,LED D1用作错误指示器。
    //
    G_ui32LEDD2 = 0;


    其他

    //
    //如果我们在这里,则意味着与 Exosite 的连接丢失。
    //处理可能导致这种情况的不同情况。
    //
    开关(g_ui32Err)

    案例 ERR_IP_ADDR:

    //
    //检查是否已获取 IP 地址。
    //
    ui32IPAddr = lwIPLocalIPAddrGet ();
    if ((ui32IPAddr =0xffffffff)||(ui32IPAddr ==0x00000000)

    //
    //否-延迟一秒钟以允许 DHCP 查找 IP
    //地址。
    //
    ROM_SysCtlDelay (g_ui32SysClock / 3);

    //
    //更改 LED D1的状态,使其闪烁,
    //表示 IP 地址丢失。
    //
    G_ui32LEDD1 ^= 1;
    中断;


    //
    //向用户报告 IP 地址。
    //
    UARTprintf ("IP 地址已获取:");
    UARTprintf ("%d."、ui32IPAddr & 0xFF);
    UARTprintf ("%d."、ui32IPAddr >> 8 & 0xFF);
    UARTprintf ("%d."、ui32IPAddr >> 16 & 0xFF);
    UARTprintf ("%d\n"、ui32IPAddr >> 24和0xFF);

    //
    //更新全局 IP 地址变量。
    //
    g_ui32IPAddr = ui32IPAddr;

    //
    //检查 CIK 是否有效。 这也有助于验证
    //与 Exosite 连接。
    //
    G_bOnline = LocateValidCIK ();
    if (!g_bOnline)

    //
    //无法连接到 Exosite。 假设 CIK 为
    //无效。
    //
    G_ui32Err = ERR_CIK;
    ui32IKRetries = 0;
    中断;


    //
    //打印提示
    //
    UARTprintf ("\n>");

    //
    //重置必要的变量以通知应用程序
    //清除错误。
    //
    G_ui32Err = ERR_NO_ERR;
    G_ui32LinkRetries = 0;

    中断;


    案例 ERR_CIK:

    //
    //尝试从 Exosite 获取新的 CIK。
    //
    if (ProvisionCIK ())

    //
    //成功-通知应用程序我们是
    //连接到 Exosite。 同时重置必要的
    //误差变量。
    //
    G_bOnline = true;
    G_ui32Err = ERR_NO_ERR;
    ui32IKRetries = 0;

    中断;


    //
    //由于我们未能获得新的 CIK,请尝试几次
    //然后放弃。
    //
    ui32CIKRetries ++;
    if (ui32CIKRetries > 5)

    //
    //向用户报告。
    //
    UARTprintf ("\nCIK 不再有效。 已尝试%d 次"、
    ui32IKRetries);
    UARTprintf ("要获取新的 CIK、但失败。\n");
    UARTprintf ("登录到 exosite 以检查");
    UARTprintf ("设备的状态。\n");

    //
    //尝试几次后无法获取新的 CIK。
    //因此停止尝试获取新的 CIK。
    //
    G_ui32Err = ERR_UNKNOWN;
    ui32IKRetries = 0;


    //
    //更改 LED D2的状态,使其闪烁,表示
    // CIK 不再有效。
    //
    G_ui32LEDD2 ^= 1;
    中断;


    案例 ERR_UNKNOWN:

    //
    //向用户报告。
    //
    UARTprintf ("\n 由于"而连接到 Exosite;
    UARTprintf ("未知原因.\n");

    //
    //显示 IP 地址。
    //
    UARTprintf ("IP 地址:");
    ui32IPAddr = lwIPLocalIPAddrGet ();
    UARTprintf ("%d."、ui32IPAddr & 0xFF);
    UARTprintf ("%d."、ui32IPAddr >> 8 & 0xFF);
    UARTprintf ("%d."、ui32IPAddr >> 16 & 0xFF);
    UARTprintf ("%d\n"、ui32IPAddr >> 24和0xFF);

    UARTprintf ("再次尝试与 Exosite 服务器同步。\n");
    UARTprintf ("\n>");

    //
    //设置相应的标志以重试与 Exosite 同步
    //服务器。
    //
    G_bOnline = true;
    G_ui32Err = ERR_NO_ERR;

    中断;


    ERR_NO_ERR 案例:
    默认值:

    中断;




  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    #define NUM_STATS 18
    uint32_t g_ui32SW1 Presses = 0;
    uint32_t g_ui32SW2 Presses = 0;
    uint32_t g_ui32 InternalTempF = 0;
    uint32_t g_ui32InternalTempC = 0;
    uint32_t g_ui32TimerIntCount = 0;
    uint32_t g_ui32第二 OnTime = 0;
    uint32_t g_ui32LEDD1 = 0;
    uint32_t g_ui32LEDD2 = 0;
    uint32_t g_ui32LEDD3 = 0;
    uint32_t g_ui32LEDD4 = 0;
    uint32_t g_ui32LEDD5 = 0;

    char g_pcLocation[50]="";
    char g_pcContactEmail[100]="";
    char g_pcAlert[140]="";

    //
    //
    //用于连接 Exosite 的全局结构。
    //
    //
    tStat g_sSW1 Presses =
    {"SW1-PRESS"、&g_ui32SW1 Presses、"usrsw1"、INT、WRITE_ONLY};

    tStat g_sSW2 Presses =
    {"SW2-presss"、&g_ui32SW2Presses、"usrsw2"、INT、write_only};

    tStat g_sInternalTempF =
    {"Temp (F)"、&g_ui32InternalTempF、0、INT、WRITE_ONLY};

    tStat g_sInternalTempC =
    {"Temp (C)"、&g_ui32InternalTempC、"jtemp"、INT、write_only};

    tStat g_sSecondsOnTime =
    {"复位后的时间"、&g_ui32SecondsOnTime、"ontime"、INT、write_only};

    tStat g_sLEDD1 =
    {"LED D1"、&g_ui32LEDD1、"ledd1"、INT、READ_WRITE};

    tStat g_sLEDD2 =
    {"LED D2"、&g_ui32LEDD2、"ledd2"、INT、Read_write};

    tStat g_sLEDD3 =
    {"LED D3"、&g_ui32LEDD3、"ledd3"、INT、Read_write};

    tStat g_sLEDD4 =
    {"LED D4"、&g_ui32LEDD4、"ledd4"、INT、Read_write};

    tStat g_sLEDD5 =
    {"LED D5"、&g_ui32LEDD5、"ledd5"、INT、Read_write};

    tStat g_sLocation =
    {"location"、g_pcLocation、"location"、string、read_only};

    tStat g_sBoardState =
    {NULL、&g_ui32BoardState、"gamest"、hex、write_only};

    tStat g_sContactEmail =
    {"Contact Email"、g_pContactEmail、"emailaddr"、string、read_write};

    tStat g_sAlert =
    {"Alert Message"、g_pcAlert、"alert"、string、none};

    //
    //
    //要与 Exosite 同步的所有 tStat 结构的全局指针数组。
    //
    //
    tStat *g_psDeviceStatistics (tStat *g_psDeviceStatistics)[NUM_STATS]=

    &g_sSW1演示、
    &g_sSW2演示、
    &g_sInternalTempF、
    &g_sInternalTempC、
    g_sSecondsOnTime (&G)、
    &g_sLEDD1、
    &g_sLEDD2、
    &g_sLEDD3、
    &g_sLEDD4、
    &g_sLEDD5、
    g_sLocation (&G)、
    g_sBoardState (&G)、
    &g_sContactEmail、
    g_sAlert (&G)、
    null
    };
    无效
    UpdateLED (空)

    //
    //如果任一 LED 的全局标志都被置位,则打开该 LED。 否则、转弯
    //它们关闭。
    //
    if (g_ui32LEDD1)

    ROM_GPIOPinWrite (GPIO_PORTK_base、GPIO_PIN_1、GPIO_PIN_1);

    其他

    ROM_GPIOPinWrite (GPIO_PORTK_base、GPIO_PIN_1、0);


    if (g_ui32LEDD2)

    ROM_GPIOPinWrite (GPIO_PORTK_base、GPIO_PIN_0、GPIO_PIN_0);

    其他

    ROM_GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_0、0);


    if (g_ui32LEDD3)

    ROM_GPIOPinWrite (GPIO_PORTK_base、GPIO_PIN_2、GPIO_PIN_2);

    其他

    ROM_GPIOPinWrite (GPIO_PORTK_base、GPIO_PIN_2、0);

    if (g_ui32LEDD4)

    ROM_GPIOPinWrite (GPIO_PORTK_base、GPIO_PIN_3、GPIO_PIN_3);


    其他

    ROM_GPIOPinWrite (GPIO_PORTK_base、GPIO_PIN_3、0);

    if (g_ui32LEDD5)

    ROM_GPIOPinWrite (GPIO_PORTK_base、GPIO_PIN_4、GPIO_PIN_4);

    其他

    ROM_GPIOPinWrite (GPIO_PORTK_base、GPIO_PIN_4、0);


  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

     [引用用户="Kishan Patel"]#define NUM_STATS 18[/引用]

    1、 计算14个 tStat 总数 + 1 使 15像您之前所说的过帐和 (tStat *g_psDeviceStatistics [NUM_STATS]=)一样、全局结构必须 是相同的名称、 也请检查全局导出 stats.h

    2.您还必须为  您 添加的附加 LED 定义 GPIO 端口配置 与  LaunchPad 上现有的2个用户 LED 一起添加、 另2个 LaunchPad LED 配置 为以太网链路和活动。

    3.也可以向后跟踪,例如 将未经修改的 IOT 项目导入 CCS、 闪 存启动盘并 删除  IOT 服务器上添加的 LED 别名。

       a.建立有效的服务器连接 验证 EEROM CIK 是否进行身份验证、 应用程序验证 客户端 和服务器上的 tStat 别名是否相同、然后 bOnline = true。  

       b.一次只添加1个新 LED 在 应用 中了解  问题所在 、 您可以在 (ports.c)中保留任何添加的 LED GPIO 配置。  

       c.请勿覆盖定义的以太网 LED、否则可能会发生故障、此外您还需要它们知道网络状态等。。。

    好的工作现在就有 了想法 、耐心地尝试 查看应用、因为它与 Launch Pad 硬件布局相关、 例如 经常检查原理图。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    欢迎使用 Connected LaunchPad!!
    物联网演示
    键入"帮助"以获取帮助。

    当前 MAC:001ab603243b
    正在获取 IP...
    在离线模式下继续。


    >获取的 IP 地址:192.168.43.221
    正在定位 CIK... 在 EEPROM 存储中找到 Cik。

    Cik:e87661f3bec8808ba6db5c9f68bd46649611152b

    已连接! 键入"stats"可查看此电路板的数据。
    >统计数据

    添加 LED5后,它不起作用。。。

    我在这里附上我编辑过的"QS_IoT"程序文件。

    e2e.ti.com/.../qs_5F00_iot.zip

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Cik 在不起作用后,两侧都是一样的,同步完成....
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用用户="Kishan Patel"]在添加 LED5后,它不起作用...

    您从 IOT 服务器获得的错误信息是什么?   IOT 服务器 LED5上是否可能存在别名错误(无其他)导致错误? GPIO PK4 是否可能在 Launch Pad 上意外短路?

     您可能需要付出更多的努力来调试您自己的应用、很少有人会打开 zip 文件、TI 工程师可能会不时地这样做。 请使用 代码插入 在 将来处理(短)代码时会发生剪切。

    祝您在调试过程中一切顺利。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    <<<<e2e.ti.com/.../5773.qs_5F00_iot.zip>>>代码

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 BP101:
    我检查的"别名"在侧面是相同的、PK4在物联网中不使用剂量、只是我配置它、就像您说"PK4 意外地在 LaunchPad 上短路"一样、我删除了它并对其进行调试...
    它不工作。
    主席先生、您尝试实际操作并解决了我的其他问题、如"Tiva ware" QS_IoT 项目创建者联系。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用用户="Kishan Patel"]“PK4 意外地在 Launch Pad 上短接”,我将删除此内容并对其进行调试....
    它不起作用。

    甚至 LED 也可能出现故障?

    [引用用户="Kishan Patel"]我检查的"别名"在两边是相同的

    同意 别名 的 两端显示相同。

    在我看来,您认为 问题是本地问题,因为只有 LED5导致 了身份验证问题? 不确定、因为您没有开机自检 连接错误。  通常、身份验证错误 是由别名在 应用程序代码中的某个位置不相同引起的。 print stats 命令是 tStat 的本地打印函数、 当 (bOnline=false)这种情况 下从 1秒 GPTM 中断循环调用 LED 更新时、我也感到困惑。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 BP101:

    SIR 您说"打印统计数据命令是 tStat 的本地打印函数、 在 这种情况   下、从1秒 GPTM 中断循环调用 LED 更新时(bOnline=false)、我也感到困惑。" 我很感谢您的所有建议,但我已经尝试了所有...但问题是,当我添加一个"ADC 信道"时,LED5在此程序后不起作用,它在两侧都适用于 ADC。LED5是有问题的。 您的建议是、每次生成"故障 ISR"时、这都是主要问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否尝试使用数据表代码输入 CCS 调试并检查控制寄存器故障值(如果为硬编码(0x3))? 然后检查 NVIC 寄存器故障状态寄存器、如果精确、则故障的存储器地址位置为真、否则为假地址。 例如、为 Stellaris ICDI 设置 CCS 调试属性(取消选中)启动调试后加载/复位程序、退出调试、启动应用程序在出现故障时进入调试、单击连接图标、仿真器将读取当前调试状态(可能需要单击刷新图标)。 阅读 Wiki 和数据表部分如何阅读和理解 CCS 调试故障代码。

    或者(运行)应用程序;检查(运行至主 ICDI 设置)在项目调试属性对话框中、运行加载的应用程序。 故障源代码通常会在引起故障的违规语法或例程附近停止。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用用户="Kishan Patel">但问题是 LED5。在此程序不起作用后,当我再添加一个"ADC 通道"时,它在两侧都可以用于 ADC。LED5是有问题的。 您的建议在每次生成"故障 ISR"时都是一样的、这是主要问题。[/QUERP]

    什么是端口 N?

    if (g_ui32LEDD2)
    {
    ROM_GPIOPinWrite (GPIO_PORTK_base、GPIO_PIN_0、GPIO_PIN_0);
    }
    否则
    {
    ROM_GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_0、0);
    }
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    主席先生,我尝试这个。。。

    不起作用。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我是指您发布的代码 PORTN --- 它实际上不应该是 PORTK 吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    "
    我是指您发布的代码 PORTN --- 它实际上不应该是 PORTK 吗?"
    您应该参考 zip。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用用户="Kishan Patel">您应参考 zip。[/quote

    帮助人员发布(未经编辑)语法错误不会帮助您取得成功。 耐心等待任何 CCS 调试寄存器报告、这可能会帮助您取得成功!

    调试故障/代码的类型有助于指示应用中的问题区域。 您的帖子对于 LED4不是很清楚、它是否也有错误? 还是仅在添加 LED5后出现故障?

    此外、还认为帮助者很难用您的英语来详细阐述细节。 早期的帖子在语调方面要求很高、论坛中没有其他人跳过来帮助您去世。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 TI 社区...

    我 再次重复"QS_IoT"程序的问题。

    在 TM4C1294XL 电路板的"Tiware Examples"中提供了一个用于物联网的程序(QS_IoT)。

    我运行了这个程序,它运行得很好.. 我是为更多的 LED 灯编辑此程序我在"program"和"exosite data"中添加了一个 LED 此 LED 与"GPIO K0.0"连接、它正常工作。

    我在编辑另一个 LED 时、它与"GPIO K0.1"连接、现在该程序用于使用"ti exo-site"的"4 LED "控制。在此之后、我再添加一个"LED"五个否 LED、它与"GPIO K0.2"连接

    在添加了五个编号后、在侧面提供相同的"别名"以及"门户数据"和"程序" LED CPU 运行在"FAULT_ISR"中。根据前面给出的建议、我尝试调试并逐步运行程序

    但在"request.c"文件中生成了"FAULT_ISR"。

    我要附加 程序 rar 文件。

    <<<<<<e2e.ti.com/.../7725.qs_5F00_iot.zip>>>>>>>>>