国产cortex-m3核芯片TS3F605的堆栈空间分析

下图是TS3F605芯片的空间分布,RAM是从0x2000 0000-0x2001 7FFF共96KB。

1. 芯片的RAM空间由data段,bss段,Heap段,Stack段组成。

data段初始值为非0的全局变量,

bss段为初始值为0的和未初始化的全局变量。

Heap段在为由 malloc 申请的空间由 free 释放,如果不适用malloc可以设置为0。

Stack段是局部变量使用的空间,需要根据用户实际使用打下设置。

比如:

int dataVal = 0x1234;//分配到data空间

int bssInitVal =  0x0;//分配到bss空间

int bssVal ;//分配到bss空间

int main()
{

        int StackVal = 0; //分配到Stack空间

}

2.mdk map文件分析

使用keil mdk,可以在生成的map文件中,在黄色标记位置即为各个段的地址。

Execution Region RW_IRAM1 (Exec base: 0x20000000, Load base: 0x00005248, Size: 0x00001440, Max: 0x00018000, ABSOLUTE, COMPRESSED[0x000000c8])

Exec Addr    Load Addr    Size         Type   Attr      Idx    E Section Name        Object

0x20000000   COMPRESSED   0x0000000a   Data   RW         2335    .data.__caxx_cap__  capsenceparameter.o
……
0x20000310        -       0x00000060   Zero   RW         2656    .bss                c_w.l(libspace.o)
……
0x20000640        -       0x00000a00   Zero   RW         2298    HEAP                startup_tscaxx.o
0x20001040        -       0x00000400   Zero   RW         2297    STACK               startup_tscaxx.o

3.data段,bss段,Heap段,Stack段的配置

data段和bss段编译器根据变量的个数自动生成。

Heap段在.s启动文件的Heap_Size设置

Heap_Size       EQU     0x00000A00

Stack段在.s启动文件的Stack_Size设置

Stack_Size      EQU     0x00000400

通过调用__user_initial_stackheap函数进行设置

//*----------------------------------------------------------------------------

//* Function Name : __user_initial_stackheap

//* Object : Returns the locations of the initial stack and heap.

//* Input Parameters :

//* Output Parameters :The values returned in r0 to r3 depend on whether you

//* are using the one or two region model:

//* One region (r0,r1) is the single stack and heap region. r1 is

//* greater than r0. r2 and r3 are ignored.

//* Two regions (r0, r2) is the initial heap and (r3, r1) is the initial

//* stack. r2 is greater than or equal to r0. r3 is less than r1.

//* Functions called : none

//*----------------------------------------------------------------------------

  • __value_in_regs struct __initial_stackheap __user_initial_stackheap(unsigned R0, unsigned SP, unsigned R2, unsigned SL)

  • {

  • struct __initial_stackheap config;

  • config.stack_base = SP;

  • config.stack_limit = SP-STACK_SIZE;

  • config.heap_base = (unsigned)(USER_HEAP_ADDRESS);

  • config.heap_limit = ((unsigned)(USER _HEAP_ADDRESS))+USER_SRAM_SIZE;

  • return config;

  • }

4.堆栈溢出

如果在程序运行的过程中,堆的空间也一直在消耗,栈的空间也在增加,那么这时堆和栈如果碰到一起,那么就会造成堆栈溢出,从而导致我们的程序跑飞

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
基于ARM Cortex-M3的SoC架构设计是为满足嵌入式应用的需求而进行的。ARM Cortex-M3是一款32位处理器心,具有高性能和低功耗的特点,因此在嵌入式领域得到了广泛应用。 SoC架构设计是将Cortex-M3心与其他外设组件集成在一起,形成一个可实现特定功能的完整系统。这些外设组件可以包括定时器、串口接口、GPIO接口、ADC/DAC等。架构设计的目标是在提供硬件资源的同时实现高性能和低功耗,并满足各种应用的需求。 在性能分析方面,首先需要考虑的是Cortex-M3的处理能力。它具有高达1.25 DMIPS/MHz的指令处理能力,并且支持多种优化指令集和拓展的指令集,如Thumb-2技术,可以提高系统的执行效率。此外,Cortex-M3还具备较大的内存容量和高速的访问速度,可以提供良好的数据存储和处理能力。 另外,SoC架构设计中的外设组件的性能也需要进行分析。这些外设组件的性能指标包括处理速度、数据传输速率、时钟频率等。同时,还需要考虑外设和心之间的接口和互联机制,以确保数据的稳定传输和高效处理。 除了硬件性能的分析,还需要评估软件层面的性能。Cortex-M3心具有很好的软件兼容性,可以支持广泛的实时操作系统(RTOS),这些操作系统可以进一步优化系统的性能。 综上所述,基于ARM Cortex-M3的SoC架构设计具有高性能和低功耗的特点,通过合理选择和优化外设组件,可以满足各种嵌入式应用的需求。性能分析是为了评估系统的处理能力、数据传输速率和软件兼容性,以确保系统能够高效运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值