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-CC2640R2:调整片上 OAD 存储器布局上的图像 A 和图像 B 之间的边界?

Guru**** 2551300 points


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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/577147/launchxl-cc2640r2-adjusting-the-boundary-between-image-a-and-image-b-at-on-chip-oad-memory-layout

器件型号:LAUNCHXL-CC2640R2

您好!

  我想调整 图像 A 和图像 B 之间的边界、以便图像 B 有更多的1000字节空间。但是、如果我将 FLASH_IMG_A_END 调整为-1000字节或0x6C18、我会得到"程序将不适合可用存储器错误"。 为了 调整 图像 A 和图像 B 之间的边界、我需要对 cc26xx_app_oad_onchip.cmd 进行哪些必要的更改

 为映像 A 分配的闪存空间为0x7000或28672字节。  OAD_TARGET_cc2640r2lp_app 或 Image A 使用的闪存空间为 25932字节。

 图像 A 未使用的闪存空间为28672 - 25932 = 2740字节。

cc26xx_app_oad_onchip.cmd

/*
图像 A 从0x00000100开始链接 ROM 符号中的 RTOS 以缩短此图像的长度。
*映像 A 是一个固定映像、其结束地址是
*它可以链接的最低页对齐地址。
*图像 B 从下一个最高相邻页面开始。
*映像 B 的前16个字节和用于存储 OAD 元信息的标头、
* BIM 假设此信息存储在此处。 映像 B 在下一个闪存字上跟随其标头。
*/
#define FLASH_IMG_A_START 0x00000000
#define FLASH_IMG_A_END 0x00007000
#define FLASH_IMG_A_SIZE (((FLASH_IMG_A_END)-(FLASH_IMG_A_START))
#define FLASH_IMG_B_HDR_START FLASH_IMG_A_END
#define FLASH_IMG_B_START ((FLASH_IMG_B_HDR_START)+(FLASH_OAD_IMG_HDR_SIZE)) 

-克尔

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

    您不能在 img A 和 B 之间共享4KB 的闪存页,因为 img B 在 OAD 期间被擦除。 对内部闪存的所有擦除操作发生在一个4KB 的页上。

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

    好的、我明白了。 由于我要调整图像 A 的边界1000字节、因此我将在图像 A 和图像 B 之间共享4KB 闪存页

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

    对于图像 A 闪存空间范围0x0000至0x7000、有8个4KB 的块。 图像 A 占用全部8个块、最后一个块或仅占用4KB 中的1260个块。

    如果我使用 IAR Workbench 来构建这个项目、这个项目可能会减少闪存空间的使用、而镜像 A 只占用7个4KB 闪存块。

    在这种情况下、我可以调整图像 A 和图像 B 之间的边界、1个闪存块朝向图像 A。为图像 B 提供额外的闪存块或4KB 的闪存空间

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

    您好、JXS、

      有关这方面的进一步研究。

      我为 CCS 和 IAR 构建了 OAD_TARGET 项目。 以下是代码大小。

      CCS OAD_TARGET = 25926字节

      IAR OAD_TARGET = 25111字节

      因此、对于0x7000、CCS OAD_TARGET 和 IAR_TARGET 占用了最后一页。 最后一幅图像 A Flash 页面范围0x5FFF - 0x6FFF。

      我将 cc26xx_app_oad_onchip.cmd flash_IMG_A_end 0x7000修改为-1000字节或0x671C。  

    #define FLASH_IMG_A_START 0x00000000
    #define FLASH_IMG_A_END 0x0000671C/0x00007000
    #define FLASH_IMG_A_SIZE (((FLASH_IMG_A_END)-(FLASH_IMG_A_START))
    #define FLASH_IMG_B_HDR_START FLASH_IMG_A_END
    #define FLASH_IMG_B_START ((FLASH_IMG_B_HDR_START)+(FLASH_OAD_IMG_HDR_SIZE)) 

     我在下面得到此错误。

     "程序将不能放入可用的内存中。  ".text"大小0x590a"段的对齐方式放置失败

     对于 IAR OAD_TARGET、我将 cc26xx_app_oad.ICF flash_end 0x6FFF 修改为       = 0x671C; 或-1000字节。

    if (isdefinesymbol (rtos_ROM))
    {
    // OAD 映像 A 区域的默认值,ROM 大小的 RTOS。
    定义符号 app_image_start = 0x0000;
    定义符号 FLASH_END = 0x671C;//0x6FFF;
    
    //在第0页的 RTOS 代码之后放置图像 A 的校验和/ OAD 头。
    //由于图像 A 是固定的,因此 CRC 只是一个占位符。
    
    //保留16字节虚拟块,如果需要升级映像 A,则很有用。
    定义符号 CHKSUM_START = APP_IMAGE_START;
    }
    

      我构建 IAR OAD_TARGET、没有构建错误。 这是否意味着、如果我使用 IAR Workbench、我可以调整图像 A 和图像 B 的边界?

    -克尔