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.

[参考译文] CCS/LAUNCHXL-CC2640R2:错误#10099-D .cinit 放置与对齐失败(如何合并闪存和 FLASH_LAST_PAGE?)

Guru**** 2526880 points
Other Parts Discussed in Thread: CC2640R2F

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/975738/ccs-launchxl-cc2640r2-error-10099-d-cinit-placement-with-alignment-fails-how-to-merge-flash-and-flash_last_page

器件型号:LAUNCHXL-CC2640R2
主题中讨论的其他器件:CC2640R2F

工具/软件:Code Composer Studio

运行到错误中:

"C:/ti/simplelink_cc2640r2_sdk_3_40_00_10/source/ti/ble5stack/common/cc26xx/ccs/cc26xx_app.cmd "、第277行:错误#10099-D:程序不能放入可用内存中。 对齐方式对".cinit"大小为0xebb 的段进行放置失败。 可用存储器范围:
闪存大小:0x1f000未使用:0x554最大空洞:0x550
FLASH_LAST_PAGE 大小:0x1000未使用:0x8b0最大空洞:0x8b0

BLE5项目。

我已经 定义=Board_exclude_NVS_INTERNAL_FLASH

并删除 了 GAP_BUK_Mgr。

我找到了这个看起来可以解决我的问题的线程、但没有解释如何"合并闪存和 FLASH_LAST_PAGE"。

您能否解释一下如何让链接器将所有闪存视为一个块?  

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

    您好!

    [引用 user="Cuisinart">您能否解释如何让链接器将所有闪存视为一个块?  [/报价]

    有关更多详细信息、请参阅以下链接  

    https://dev.ti.com/tirex/explore/node?node=APJQ1q8Ox6tOF4TmB4THeg__FUz-xrs__LATEST

    谢谢

    Ki

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

    谢谢、我也在研究这个问题时看到了这个页面。  

    遗憾的是、我还需要了解在文件或 CCS UI 中的何处查找这些设置。 我搜索了用户界面和项目设置、但无法找到存储器设置。

     例如、在工程的 linker.cmd 中、我看到一个 SECTIONS{}条目、但没有 MEMORY{}条目、无论如何、它在顶部指示它是 由 linkcmd.xdt 自动生成的文件

     TI SDK 中有36个 linkcmd.xdt 以及'agama'和'golde'等代码名称、因此很难知道正确的文件是什么。   

    忽略这一点、则会打开对 flash_last_page 搜索的蛮力 SDK 文件内容:

    simplelink_cc2640r2_sdk_3_40_00_10\source\ti\ble5stack\ccommon\cc26xx\ccs\cc26xx_app.cmd

    这似乎包含将闪存中的最后一页与其余页分开的处方。  这是我们应该编辑的正确文件、以放大连续闪存空间吗? 编辑此文件似乎会更改所有使用 SDK 的应用程序的设置、并可能以意外的方式中断应用程序。

    例如,在该文件中,我可以将 NUM_RESERVE_FLASH_PAGES 设置为0,但稍后在同一文件中,配置 MEMORY 段时,此设置将被忽略:

    #define FLASH_LAST_PAGE_START   (FLASH_SIZE - PAGE_SIZE)

    存储器

    /*编者注:
    *可以通过定义来更改闪存和 SRAM 长度
    *中的 ICALL_STACK0_START 或 ICALL_RAM0_START
    * Properties->ARM Linker->Advanced Options->Command File Preprocessing。
    *

    /*存储在内部闪存中并从内部闪存执行的应用程序*/
    闪存(RX):origin = flash_start,length =(flash_end - flash_start + 1)

    /* CCFG 页面,包含.ccfg 代码段和一些应用程序代码。 *
    FLASH_LAST_PAGE (RX):origin = FLASH_LAST_PAGE_START,length = PAGE_SIZE

    /*应用程序使用内部 RAM 进行数据*/
    SRAM (rwx):origin = RAM_START,length =(RAM_END - RAM_START + 1)

    #ifdef cache_as RAM
    GPRAM (rwx):origin = GPRAM_START,length = GPRAM_SIZE
    #endif /* cache_as RAM *

    如果你能澄清建议的方法来做这个,我认为这会对初学者大有帮助!

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

    我将与我们 BLE 团队的某个人联系。 因为他们将知道在该文件中可以更改什么

    我假设您的项目 基于 SDK 中的其中一个 BLE 示例项目。   许多示例都使用了编译错误引用的 cc26xx_app.cmd 文件。

    当我查看示例工程时、我可以在工程中看到一个.cmd 文件、该文件被排除(通过一行)、然后在编译选项中、我看到包括了其他 cc26xx_app.cmd。  这将是链接器实际使用的那个。

    此致、

    John

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

    John、这对我们有很大帮助、谢谢。

    是的、这是从 project_zero 示例创建的构建模板、这说明了它使用通用编译.cmd 的原因、而您的帖子还阐明了如何更改、以便链接器 cmd 更改仅适用于此本地编译。  构建命令脚本隐藏在工程设置中链接器包含列表底部并不明显。

    将此编译命令文件更改为工程局部版本进行编辑后、应该可以安全地进行实验、找到此工程的可用设置。

    此处的链接器命令似乎是 LAST_PAGE -免费版本的良好开端:

    simplelink_cc2640r2_sdk_3_40_00_10\source\ti\devices\cc26x0r2\linker_files\cc26x0r2f.cmd

    关于减少存储器占用空间的主题、此帖子建议可以调整构建选项以节省空间:

    这是指 BLE4.2、这是一个 BLE 5项目。  下面是 factory_config.opt 中的文本、该文本显示不应更改它们。

    [simplelink_cc2640r2_sdk_3_40_00_10\source\ti\ble5stack\config\factory_config.opt]

    /*
    *警告:默认情况下、所有库都启用了这些选项、并且必须启用这些选项
    *针对所有 FlashROM 项目启用。 强烈建议您不要这样做
    *更改这些选项
    *

    -dble_v41_features = v41_features
    -dlb_V42_feature=V42_feature+secure_conns_CFG+privacy_1_2_CFG+EXT_DATA_LEN_CFG
    -dlb_V50_features =V50_features +PHY_2Mbps CFG+HDC_NC_ADV_CFG+CHAN_ALGO2_CFG+PHY_LR_CFG+AE_CFG
    -dble_vs_features = SCAN_REQ_RPT_CFG

     

    您对这些或其他减小编译大小的方法有什么意见吗?

    以下是我的堆栈库 FlashROM 选项:

    DCC26XX
    -DCC26XX_R2
    -DDeviceFamily_CC26X0R2

    -DFLASH_ROM_BUILD
    -DICALL_Events
    -DICALL_JT
    -DICALL_Lite
    -DOSAL_CBTIMER_NUM_TESS=1
    -DOSAL_SNV=0
    -DNO_OSAL_SNV
    -DPOWER_Saving
    -drf_singlemode
    -dSTACK_library
    -Duse_ICALL

     

    应用程序选择:

    -DBOARD_DISPLAY_USE_LCD=0
    -DBOARD_DISPLAY_USE_UART=0
    -DBOARD_DISPLAY_USE_UART_ANSI=0
    -DCC2640R2_LAUNCHXL
    DCC26XX
    -DCC26XX_R2
    -DDeviceFamily_CC26X0R2
    -DICALL_Events
    -DICALL_JT
    -DICALL_Lite
    -DICALL_MAX_NUM_ENDS=6
    -DICALL_MAX_NUM_TESS=3.
    -DICALL_STACK0_ADDR
    -dMAX_NUM_BLE_CONns=1
    -DPOWER_Saving
    -drf_singlemode
    -dSTACK_library
    -DTBM_ACTIVE_ITEMS 仅
    -Duse_ICALL
    -Dxdc_runtime_assert_disable_all
    -Dxdc_runtime_Log_disable_all


    我在任何一个构建选项文件中都看不到 factory_config.opt 文件中的 BLE_V50_features 规范。

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

    您好!

    [引用 user="Cuisinart"]指 BLE4.2,这是一个 BLE 5项目。

    让我看看我是否理解正确。 基于 Project Zero 的代码由于内存空间而无法链接。 链接的线程讨论 OAD -您是否尝试将其添加到 BLE5 Project Zero?

    如果是、遗憾的是 CC2640R2F 没有足够的存储器来容纳 BLE5堆栈以及 OAD 功能。

    如果您只是尝试使用最后一个闪存存储器页面、请记住、CCFG 信息必须出现在该页面的开头。  

    希望这对您有所帮助、

    拉斐尔

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

    您好、Rafael、  

     在所有闪存空间统一之后、该项目现在正在编译、我最终认为这已经解决了。  感谢您的跟进。  为了回答您的问题、即最近链接的有关包含 BLE4.2组件的线程、我链接了该线程、以询问该线程中调用的从 BLE_VX 定义中删除"特性"的一般技术、从而节省更多内存。 问题是... 这是对 BLE_V50有用的技术吗?   

    我进行了一些测试、但在从  factory_config 中的 BLE_V50_features 语句中删除功能时未看到对构建大小进行任何更改。  因此、这种追求已经结束、因为项目现在将适合于仔细的内存管理和减少的串行日志记录。   

    再次感谢!