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-CC1312R1:NVS 位置

Guru**** 2473270 points
Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1380647/launchxl-cc1312r1-nvs-location

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

工具与软件:

我已经创建了一个 NVS 区、用于保存模块设置。 我遵循了由 syscfg 链接的示例、它编译正常。

首先触发此功能的保存命令会显示内容、因此以 a 开头

NVS_READ()进入缓冲区。

当我检查缓冲区时、我发现一些数据、但我还没有写入该区域、所以我是在预料之中

可查看全部为0xff。 查看地图文件,我可以在代码末尾看到带有地址*几乎*的 NVS 区域。

我是否需要在映像之外定位区域、为什么 SysConfig 无法定位该区域  

在我的代码和数据之外? 我保留了"未写入"的空间。 请启迪我...

Gullik

更新了:我看到了对#define NVS_REGION_BASE 0x48000的一些引用

我尝试在 syscfg 中输入此值

生成的存储器区类型

区域基地址0x48000

区大小为0x2000

我认为我应该能够控制闪存中的位置。

但是、这不起作用、并且 NVS 读取返回相同的数据!= 0xff……

那么、如何做到这一点?

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

    尊敬的 Gullik:

    您能否发布 NVS SysConfig 设置?

    ...

    我特别想知道您使用的是哪种类型的区域。

    此致、

    Arthur

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

    我单击.sysconfig 文件并显示菜单

    单击 NVS 驱动程序项

    我会看到一个包含 CONFIG_NVS_0的菜单

    使用硬件           默认值 none

    NVS 类型           默认为内部

    NVS 实现(灰显、无法设置) NVSCC26XX

    内部闪存

          默认生成区域类型

    Region Base    0x48000        //首先尝试默认区域

    区大小为      0x2000

    扇区大小0x2000 (默认)

    代码取自单击? 在 NVS 菜单中

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

    尊敬的 Gullik:

    如果您使用 nvsinternal 示例、您是否看到行为有任何差异?

    此致、

    Arthur

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

    但我做了!

    CONFIG_NVS_0

          不使用硬件

    NVS 类型            内部

    NVS 实现 NVSCC26XX (灰显)

    内部闪存

          生成的存储器区类型

    区域基地址      0x48000 (由于最初为0、因此在不确定时已更改)

    REGIN 大小         0x2000 (默认设置)

    扇区大小        0x2000 (默认、灰显、无法更改)

    代码

    #include

    //定义 NVS

    NVS_Handle nvsRegion;

    NVS_Params nvsParams;

    主{

    代码

    NVS_PARAMS_INIT (&N);

    代码

    if (strcmp (cline、"save")){

    状态= nvsRegion = NVS_OPEN (CONFIG_NVS_0、&nvsParams);

    STATUS = NVS_READ (nvsRegion、0、buf、64);

    for (i=0;i<64;i++){

        xprint_char (buf[i]);

        xprint("");

    }

    这将始终打印一系列数字....not FF FF FF

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

    使用 GNUC 时、闪存可能需要手动操作

    SysConfig 会执行此操作、但没有执行此操作。

    感到困惑

    Gullik

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

    无论我尝试哪个示例、区域基地址都不是我在 syscfg 中定义的区域。

    当我检查句柄结构时、我有一个成员.object、它不会显示、但会说

    "无法从非原始位置加载错误"

    我可以将 regionAttrs.regionBase 设置为0x48000、但这没有帮助、

    我仍然得到一串 wierd 数据、而不是我预期的数据

    这是 nortos 和 gcc

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

    嗯,这似乎示例说明有点过时,我不能

    确定正确执行此操作的方法。

    NVS 区似乎是由定义的

    静态常量 NVSCC26XX_HWattrs[1] 0{

        {

          .regionBase =(void *) flashBuf0、

          .regionSize = 0x2000、

        }、

    };

    此缓冲区在其他任何位置均未定义、并且不会显示在链接映射中。

    因此、我必须自行定义 flashBuf0、并将其定位到所需的地址、

    在本例中是我在.sysconfig 中回答的内容

    但是、在 CCS 环境中使用 GCC 的语法是什么?

    编译器拒绝理解我给出的属性(具体来说是 AT 属性)。

    char flashBuf0[0x2000]__attribute__((at (0x48000));

    Gullik

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

    解决这个问题的方法是

    1.将该部分添加到 LD 文件中。 这在示例中没有描述、但最终通过搜索网络找到。

    2.与调试器的交互、有时会挂起 launchpad

    3.在 NVS_Close ()之后,写似乎不会生效。

    Gullik