stm32是怎么获取堆和栈大小的信息的

2019-03-23 19:12发布

我现在用CodeSourcery+jlink+openocd开发stm32

平台:stm32f103zet6
flash:内置512K(大容量)
sram:内置64K+外部512K
启动文件:startup_stm32f10x_hd.c
链接脚本:stm32f10x_flash_extsram.ld

我之前没用ucos iii之前是可以运行的,用了ucos iii之后不能正常运行,ucosiii是能在KEIL UV4上成功运行的,初步怀疑是堆和栈的分配有问题(因为ucosiii中要用malloc动态分配内存),所以我想知道stm32是如何获取堆和栈的信息的,我怎么才能让它知道堆和栈的大小以及地址空间。

补充:栈的最高地址可以通过启动文件的下面部分知道,即stm32启动之后先要从flash的起始处取出栈的最高地址和复位向量,那堆是怎么知道的呢,我不知道IDE在这方面是怎么处理的,我想充分利用内置64K+外部512K的SRAM,不知道怎么做,谢谢
void (* const g_pfnVectors[])(void) =
{      
    (void *)Initial_spTop,      /* The initial stack pointer */
    Reset_Handler,              /* Reset Handler */
    NMI_Handler,                /* NMI Handler */
    HardFault_Handler,          /* Hard Fault Handler */
}

[ 本帖最后由 cheng_bingyuan 于 2013-6-30 12:52 编辑 ] 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
5条回答
xg_qing
2019-03-24 03:29
/ ucos3 不倚赖于malloc,任务栈以及内核对像可以在静态或动态分配。ucos3管理了中断栈(msp),栈大小由一个配置宏来设置。
系统启动之前创建一个起启任务,如果能运行到起始任务则IDE栈配置没有问题,若运行到启动任务之后死机,则需检查任务栈、中断栈是否溢出,
总之,问题应当很简单,也很容易找。Goodluck~~~~~~~~~~~~

一周热门 更多>