STM32如何设置堆栈地址到RAM区顶端以防止数据存储错误

2019-10-16 04:10发布

本帖最后由 stm32你是我的菜噢 于 2016-12-7 15:13 编辑

本设置针对stm32f103rbt6的设置,该芯片RAM大小为20kB,故RAM区地址范围为0x20000000—0x20005000,芯片信息如下图所示; 1-1.png 第一步:设置.sct文件;;*************************************************************; *** Scatter-Loading Description Filegenerated by uVision ***; *************************************************************
LR_IROM1 0x08000000 0x00020000  {    ;load region size_region ER_IROM1 0x08000000 0x00020000 {  ; load address = executionaddress  *.o (RESET, +First)  *(InRoot$$Sections)  .ANY (+RO)  } RW_IRAM1 0x20000000 0x00005000 {  ; RW data  .ANY (+RW +ZI)  } RW_IRAM2 0x20004800 UNINIT 0x00000800 {  ; STACK ADDRESS  startup_stm32f10x_md.o (STACK)  } RW_IRAM3 0x20004600 UNINIT 0x00000200 {  ; HEAP ADDRESS  startup_stm32f10x_md.o (HEAP)  }} 2-1.png RW_IRAM2 0x20004800 UNINIT 0x00000800  //设置栈起始地址为0x20004800,栈大小为0x00000800RW_IRAM3 0x20004600 UNINIT 0x00000200   //设置堆起始地址为0x20004600,堆大小为0x00000200
第二步:在启动文件中设置堆栈大小; 2-2.png 此处设置的堆栈大小要与第一步一致,否则将会以这次设置的大小为准,第一步设置的堆栈大小将失效;
第三步:设置存储区分配地址方式;如下图所示设置,Scatter file选择第一步设置好的.sct文件; 3-1.png
第四步:查看生成的.map文件如下图所示,表示起始的堆栈地址已设置到RAM顶端 4-1.png

第五步:测试验证;如下图所示,测试验证成功,开始时堆栈地址指向RAM的顶端,即R13的值为0x20005000 5-1.png







友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。