如何扩大 Z-Stack 3.0.2 中 SRAM 的范围?

如何扩大 Z-Stack 3.0.2 中 SRAM 的范围

点击左上角的“关注”,定期更新Zigbee最新资讯,总有你想要的信息!

1、系统信息

协议栈:Z-Stack 3.0.2
协调器:CC2538SF53

协议栈 Z-Stack3.0.2
协调器 CC2538SF53

2、问题描述

  我将 “ZDSECMGR_TC_DEVICE_MAX” 设置为 200,然后想将 “INT_HEAP_LEN” 设置为 8192,发现 SRAM 不够。通过查看文件 “CC2538-sb.icf” 我发现 SRAM 的范围被定义为“define region SRAM = mem:[from 0x20004000 to 0x20007FFF];”,开发者只能用 16KB 的 SRAM,为什么?我能把 SRAM 的使用范围改为“define region SRAM = mem:[from 0x20000000 to 0x20007FFF];”吗?

3、问题分析

  CC2538SF53 拥有高达 32K 的 RAM,但是 CC2538 的 RAM 分为两块 16K 的 RAM,只有第二块 16K 的 RAM 可以在所有功率模式下具有保持功能,第一块 16K 的 RAM 会在 CC2539 进入 PM2 模式时失去它存储的数据,所以 Z-Stack3.0.2 协议栈默认只使用第二块 RAM。查看 “CC2538.icf” 文件我们可以发现 CC2538 在 Z-Stack3.0.2 协议栈中默认的RAM范围为 “define region SRAM = mem:[from 0x20000000 to 0x20007FFF];”
4、解决方法
  如果你设计的设备永远都不会进入低功耗模式,则可以将RAM的可用范围扩大为 32K。操作如下:
  如果你不使用 SBL 功能,则更改 “CC2538.icf” 文件,如果使用 SBL 功能,则更改 “CC2538-sb.icf” 文件:
增大RAM的使用范围:

//
// Define a region for the on-chip SRAM.
//
define region SRAM = mem:[from 0x20000000 to 0x20007FFF]; // 0x20004000 --> 0x20000000

将运行时堆栈移动到RAM的末尾。 在链接器文件中找到以下代码并进行以下更改:

//
// Indicate that the noinit values should be left alone. This includes the
// stack, which if initialized will destroy the return address from the
// initialization code, causing the processor to branch to zero and fault.
//
do not initialize { section .noinit };
place at end of SRAM { section .noinit }; // ++++++++++ ADD THIS LINE ++++++++++


大家的支持就是我分享技术的动力,希望大家需转载时能附上原作者的博客:https://blog.csdn.net/u012993936,谢谢。



--- End ---
你可能还想看:

> 如何7天快速入门Zigbee?
> 免费的Zigbee抓包神器!比Ubiqua还好用!


文章都看完了,随手点个赞吧~
在这里插入图片描述
↓↓↓ ↓↓↓

你可能感兴趣的:(Zigbee,项目专栏)