如何擴大 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還好用!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章