如何擴大 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,謝謝。