使用keil的Cortex-M3堆栈组织
Cortex-M3 heap-stack organization using keil
正在尝试 运行 Atmel sam3s 的闪烁样本并检查堆栈指针...
SP 在 main 函数开始时的值为 0x20000238,对于此示例,该值也等于 Ram base + RW + ZI。
该芯片的基本 RAM 地址是:0x20000000
内存总大小为:0x10000
我预计 sp 会在 0x20010000 上初始化并关闭。
谁能解释一下我是不是错了?
正如 Pait 所说(he/she 应该已经回答了问题,所以我认为我可以接受),
我错误地认为默认情况下堆栈将放置在 RAM 的末尾。但是我觉得把它放在那里是明智的。
这就是我为我的 SAM3S micro 所做的,通过更改分散文件
LR_IROM1 0x00400000 0x00080000 { ; load region size_region
ER_IROM1 0x00400000 0x00080000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
RW_IRAM1 0x20000000 0x00010000 { ; RW data
.ANY (+RW +ZI)
}
RW_STACK 0x2000C000 UNINIT 0x4000 { ; STACK data
*.o (STACK)
}
}
RAM 基数 = 0x20000000
总内存 = 64 kb
预期堆栈大小 = 16 kb
正在尝试 运行 Atmel sam3s 的闪烁样本并检查堆栈指针... SP 在 main 函数开始时的值为 0x20000238,对于此示例,该值也等于 Ram base + RW + ZI。
该芯片的基本 RAM 地址是:0x20000000 内存总大小为:0x10000
我预计 sp 会在 0x20010000 上初始化并关闭。 谁能解释一下我是不是错了?
正如 Pait 所说(he/she 应该已经回答了问题,所以我认为我可以接受), 我错误地认为默认情况下堆栈将放置在 RAM 的末尾。但是我觉得把它放在那里是明智的。
这就是我为我的 SAM3S micro 所做的,通过更改分散文件
LR_IROM1 0x00400000 0x00080000 { ; load region size_region
ER_IROM1 0x00400000 0x00080000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
RW_IRAM1 0x20000000 0x00010000 { ; RW data
.ANY (+RW +ZI)
}
RW_STACK 0x2000C000 UNINIT 0x4000 { ; STACK data
*.o (STACK)
}
}
RAM 基数 = 0x20000000
总内存 = 64 kb
预期堆栈大小 = 16 kb