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.

[参考译文] LAUNCHXL-CC2650:无法向简单 BLE 外设示例代码添加新文件

Guru**** 2551570 points
Other Parts Discussed in Thread: LAUNCHXL-CC2650

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1123465/launchxl-cc2650-unable-to-add-new-files-to-simple-ble-peripheral-example-code

器件型号:LAUNCHXL-CC2650
主题中讨论的其他器件: CC2640

您好!

我使用 的是 LAUNCHXL-CC2650版本1.3.0

BLE SDK 2_02_07_06

CCS7.4

编译器 TI v5.2.6

我想将大数据存储在外部闪存中。

我引用了"bim_extflash 项目"。

在 "bim_extflash"中、我可以读取、写入、擦除外部闪存。

我将文件从 "bim_extflash"项目复制到了"简单 BLE 外设代码"。

如所附图像所示。

但我会遇到错误、如所示  

#1965无法打开源文件"bsp.h"

#1965无法打开源文件"ext_flash.h"

请帮助我解决此错误。 我们有项目截止日期

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

    您好 Dnyaneshvar、

    比较两个项目之间的 Project Properties -> Build -> Arm Compiler -> Include Options、并至少确认您的 simple_peripheral 项目具有 与${PROJECT_ROOT}/ExternalFlash 列出的内容类似的内容。  您还需要确定 bim_extflash 项目引用 bsp.h 的方式/位置(位于 src\examples\util\bim_extflash\ccs2640\board\ccs2650lp)、如果此文件不直接位于工程工作区中、则将应用程序工程指向或链接到相同的位置。   

    此致、
    Ryan

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

    Ryan Brown1、您好!

    感谢你的答复。

    由于原始的"Simple BLE 外设代码"包含所有链接文件夹和链接文件、因此我首先复制粘贴的"Simple BLE 外设代码"、然后将其导出。

    导出后、我再次导入同一个项目。 因此、现在没有文件或文件夹链接(我认为是这样)

    在此 代码中、我粘贴了如图所示的头文件。

    因此、我之前的错误 现在消失了。

    "${PROJECT_ROOT}/ExternalFlash"不在 include 路径中--但此错误现在消失了。  可能是因为我将 ext_flash.h 文件移动到根文件夹、然后在 include 选项中包含根文件夹路径。

    现在、当 我从 bim_main.c 调用函数时、我会遇到错误。

    例如,当我调用 BIM_checkImages()函数时,我会遇到类似的错误

    符号"Bim_checkImages"用不兼容的类型重新声明:null:

    符号"Bim_checkImages"用不兼容的类型重新声明:。

    我比较两个项目包含选项、(附加图像)

    添加 任何其他包含路径需要什么?

    谢谢你

    Dnyaneshvar

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

    您的简单外设项目不应包含 bim_main.c 或 BIM_* API,因为这些 API 仅存在于 BIM 应用程序中。  OAD 环境旨在将 BIM 和应用(即简单外设)映像连续加载到器件上。  BIM 将检查图像、因此您的应用程序不需要。  如果您的应用程序希望使用类似的功能、则应创建单独的函数来完成所需的任何任务。  请注意 bim_main.c 如何不声明 BIM_checkImages、因为该函数仅在本地使用。  您需要重新考虑 OAD 方法。

    此致、
    Ryan

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

    尊敬的 Ryan Brown1:

    我已从 我的项目中删除了 bim_main.c。(无论如何、上次它的主函数也被重命名为 main_2 ())。

    并从 ext_flash 文件调用 API

    我在 include 选项中包含了路径、如 C:\xxxx\xxxxx\workspace_v7\Simple BLE peripheral modified_app\ExternalFlash。

    现在所有错误都消失了。

    但在外部闪存 API 中仍然失败。

    请帮助

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

    尊敬的 Ryan Brown1:

    当我使用单步执行进行调试时、我知道了这一点

    控制在以下代码片段中显示的函数中停止

      /* SPI power */
      ROM_PRCMPeripheralRunEnable(PRCM_PERIPH_SSI0);

    #ifdef BOOT_LOADER
      /* GPIO power && SPI power domain */
      PRCMPowerDomainOn(PRCM_DOMAIN_PERIPH | PRCM_DOMAIN_SERIAL);
      while (PRCMPowerDomainStatus(PRCM_DOMAIN_PERIPH | PRCM_DOMAIN_SERIAL)
             != PRCM_DOMAIN_POWER_ON);
    
      /* GPIO power */
      PRCMPeripheralRunEnable(PRCM_PERIPH_GPIO);
      PRCMLoadSet();
      while (!PRCMLoadGet());
    #endif
    
      /* SPI power */
      ROM_PRCMPeripheralRunEnable(PRCM_PERIPH_SSI0);
      PRCMLoadSet();
      while (!PRCMLoadGet());
    
      /* SPI configuration */
      SSIIntDisable(BLS_SPI_BASE, SSI_RXOR | SSI_RXFF | SSI_RXTO | SSI_TXFF);
      SSIIntClear(BLS_SPI_BASE, SSI_RXOR | SSI_RXTO);
      ROM_SSIConfigSetExpClk(BLS_SPI_BASE,
                             BLS_CPU_FREQ, /* CPU rate */
                             SSI_FRF_MOTO_MODE_0, /* frame format */
                             SSI_MODE_MASTER, /* mode */
                             bitRate, /* bit rate */
                             8); /* data size */
      ROM_IOCPinTypeSsiMaster(BLS_SPI_BASE, BSP_SPI_MISO, BSP_SPI_MOSI,
                              IOID_UNUSED /* csn */, clkPin);
      SSIEnable(BLS_SPI_BASE);
    
      {
        /* Get read of residual data from SSI port */
        uint32_t buf;
    
        while (SSIDataGetNonBlocking(BLS_SPI_BASE, &buf));
      }
    
    }

    我遇到"Cortex_M3_0 :断点管理器:启用此函数时出错:没有用于支持此作业的 AET 资源"。

     然后、我看到了一些位于灰色区域的代码部分。

    #ifdef BOOT_LOADER
      /* GPIO power && SPI power domain */
      PRCMPowerDomainOn(PRCM_DOMAIN_PERIPH | PRCM_DOMAIN_SERIAL);
      while (PRCMPowerDomainStatus(PRCM_DOMAIN_PERIPH | PRCM_DOMAIN_SERIAL)
             != PRCM_DOMAIN_POWER_ON);
    
      /* GPIO power */
      PRCMPeripheralRunEnable(PRCM_PERIPH_GPIO);
      PRCMLoadSet();
      while (!PRCMLoadGet());
    #endif

    然后、我定义了宏"#define BOOT_LOADer"

    之后、我的问题得到了解决。

    我使用10个字节进行了擦除、写入和读取操作测试。

    它现在正在工作。

    但我有疑问、我这么做是不是正确的?

    我应该   定义宏"#define boot_loader"、还是有其他更好的方法?

    请提供指导

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

    同样、您 不应使用引导加载程序(即 BIM)、因此不需要定义 boot_loader。  但是、您已经观察到了打开 SPI 接口所需的函数、因此应该在没有 boot_loader #ifdef 包装程序的情况下使用此代码。   

    此致、
    Ryan

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

    您好、Ryan、

    我就像你说的那样做了,这也解决了问题和困惑。

    非常感谢您为解决此问题提供的支持。