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.

[参考译文] CC3220S-LAUNCHXL:0x20004000到 RAM 末尾的映射是什么?

Guru**** 2577385 points
Other Parts Discussed in Thread: CC3220S

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/607237/cc3220s-launchxl-what-is-the-map-of-0x20004000-to-end-of-ram

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

在 swru464.pdf 第49页、图6-1。 CC3220和 CC3220S 器件 SRAM

专为应用而设计。 应用程序应 是该区域的一部分、并从0x20004000开始。 排除应用程序、 0x20004000到 RAM 末尾还有什么其他功能? 这些 RAM 是否有更详细的映射?

引导加载程序使用的 RAM 数量为16KB、这意味着对于 CC3220S 和 CC3220型号、但在我的代码(我使用的是 CC3220S)中、读写数据存储器的字节数量为20749字节、大于16KB、其他 RAM 在 0x20004000到 RAM 末尾的范围内?

87 530字节的只读代码存储器
26 783字节的只读数据存储器
20 749字节的读写数据存储器

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

    我不确定您在哪里获得代码/数据存储器的这些数字。 CC3220具有统一的代码/数据存储器、除了要求应用程序必须从0x20004000开始之外、您还可以按任何顺序将任何其他所需的内容放入 RAM 中。 因此、没有 RAM 的详细映射;RAM 的内容和布局由您的应用决定。

    当然、链接器通常会处理 RAM 的分配。 如果您看一下 CC3220S_LAUNCHXL_TIRTOS.cmd 文件、这里有针对链接器的一些配置。 由于 CC3220S 没有内部闪存、.cmd 文件非常简单、因为所有内容都需要放入 RAM 中。

    构建后、您还可以查看项目的/debug 文件夹中的链接器文件输出(.map 文件)、以查看链接器如何在 RAM 中排列应用程序的所有代码和数据。

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

     您好、Michael:

    感谢你的答复。 代码/数据存储器的编号是我的网络终端项目的映射。 在我 的 network_terminal_CC3220S_LAUNCHXL_TIRTOS.ICF 文件中、它定义了 SRAM、如下所示:

    // CC32XX ES 1.33器件的 SRAM 大小为240KB
    定义区域 SRAM =内存:[从0x20004000到0x2003C000];

    我的 RAM 和代码是共享的、这些224k 字节的 SRAM 大小不是固定的?

    如何按照 ICF 文件中的定义来区分 RAM 和代码?

    我想在闪存中加载我的代码并通过下面的代码执行它。 但当执行 iRetVal = sl_FsRead (DeviceFileHandle、0、(unsigned char *) app_IMG_SRAM_OFFSET 时、它始终停止代码、
    pFsFileInfo.Len );代码似乎 已运行

    #define APP_IMG_SRAM_OFFSET  0x20004000

    空 LoadAndExecute (unsigned char * ImgName、unsigned long ulToken)

    长 DeviceFileHandle =-1;
    //
    //打开文件进行读取
    //
    DeviceFileHandle = sl_FsOpen (ImgName、SL_FS_Read、
    ulToken (&U);
    //
    //检查是否成功打开
    //
    if (0 ==iRetVal)

    //
    //使用文件信息结构获取文件大小
    //
    iRetVal = sl_FsGetInfo (ImgName、ulToken、&pFsFileInfo);

    //
    //检查故障
    //
    if (0 ==iRetVal)

    //
    //将应用程序读取到 SRAM 中
    //
    iRetVal = sl_FsRead (DeviceFileHandle、0、(unsigned char *) APP_IMG_SRAM_OFFSET、
    pFsFileInfo.Len );

    //
    //停止网络服务
    //
    //sl_Stop (30);

    //
    //执行应用程序。
    //
    运行(APP_IMG_SRAM_OFFSET);


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

    您好、user4774248、

    嗯,我怀疑正在发生的情况是您的 sl_FsRead ()调用会覆盖您的器件当前运行的代码,因为 CC3220上的引导加载程序在0x20004000处开始执行您的程序。

    您可以尝试将 RAM 的一部分放在一边、专门用于您加载的代码。 如果您查看 CC3220S_LAUNCHXL_TIRTOS.cmd 文件、您将注意到您的存储器被拆分为 SRAM0部分和 SRAM 部分。 下面是一组段分配、用于指示链接器将所有代码、数据等放入 SRAM、而不是轻触 SRAM0段(即引导加载程序段)。 类似地、您可以在 RAM 中声明自己的存储器区域、然后不会为其分配任何段、这样您就可以为要加载的代码保留 RAM 的一部分。 如下所示:

    内存
    {
    SRAM0 (rwx):origin = 0x20000000,length = 0x4000
    SRAM (rwx):origin = 0x20004000,length = 0x1E000
    SRAM_R (Rwx):origin = 0x20022000,length = 0x1E000
    } 

    尝试执行此操作,然后将 sl_FsRead ()写入保留 RAM 的基址。

    此致、

    Michael

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

    您好、Michael:

    谢谢! 你给了我很大的帮助!

    您曾说过更改 CC3220S_LAUNCHXL_TIRTOS.cmd 文件以添加存储器部分。 cmd 文件似乎用于 CCS?  

    我能像下面的图片那样做吗? 我使用的是 IAR。 如何更改 ICF 文件以满足我的要求?

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

    您好、user4774248、

    您可以在 ICF 文件中定义一个 SRAM_R 区域。 如下所示:

    //为片上 SRAM 定义一个区域。
    定义区域 SRAM = mem:[从0x20004000到0x2000FFFFFFF];
    
    //为应用代码定义区域
    SRAM_R = mem:[从0x20010000到0x20040000]; 

    这将导致它为您的应用程序代码保留该区域。 您应该在 ICF 文件上查找一些 IAR 指南以供参考、因为我只使用 CCS、对 IAR ICF 文件的所有工作方式并不是很确定。

    此致、

    Michael