搜索
bottom↓
回复: 6

请问LM3S堆栈初值是是&CSTACK[CSTACK_SIZE-1]还是&CSTACK[CSTACK_SIZE]?

[复制链接]

出0入0汤圆

发表于 2008-3-27 07:54:19 | 显示全部楼层 |阅读模式
请问LM3S堆栈初值是是&CSTACK[CSTACK_SIZE-1]还是&CSTACK[CSTACK_SIZE]?

#define CSTACK_SIZE 100
__root static __no_init  uint8 CSTACK[CSTACK_SIZE] @ "CSTACK";
__root static const  uVectorEntry g_pfnVectors[] @ "INTVEC"=
{
  
   { .ulPtr =(unsigned long) &CSTACK[CSTACK_SIZE] },
//  { .ulPtr =(unsigned long) &CSTACK[CSTACK_SIZE-1]},
//这里是&CSTACK[CSTACK_SIZE-1]还是&CSTACK[CSTACK_SIZE]????
   __program_start,                         // The reset handler
    NmiSR,                                  // The NMI handler
   FaultISR,                               // The hard fault handler

  
    IntDefaultHandler,                      // The MPU fault handler
    IntDefaultHandler,                      // The bus fault handler
    IntDefaultHandler,                      // The usage fault handler
    0,                                      // Reserved
    0,                                      // Reserved
    0,                                      // Reserved
    0,                                      // Reserved
    IntDefaultHandler,                      // SVCall handler
    IntDefaultHandler,                      // Debug monitor handler
    0,                                      // Reserved
    IntDefaultHandler,                      // The PendSV handler
    //IntDefaultHandler,                      // The SysTick handler
    SIGNAL_HANDER(FAULT_SYSTICK),

    IntDefaultHandler,                      // GPIO Port A
    IntDefaultHandler,                      // GPIO Port B
    IntDefaultHandler,                      // GPIO Port C
    IntDefaultHandler,                      // GPIO Port D
    IntDefaultHandler,                      // GPIO Port E
   // IntDefaultHandler,                      // UART0 Rx and Tx
    SIGNAL_HANDER(INT_UART0),
    IntDefaultHandler,                      // UART1 Rx and Tx
    IntDefaultHandler,                      // SSI Rx and Tx
    IntDefaultHandler,                      // I2C Master and Slave
    IntDefaultHandler,                      // PWM Fault
    IntDefaultHandler,                      // PWM Generator 0
    IntDefaultHandler,                      // PWM Generator 1
    IntDefaultHandler,                      // PWM Generator 2
    IntDefaultHandler,                      // Quadrature Encoder
    IntDefaultHandler,                      // ADC Sequence 0
    IntDefaultHandler,                      // ADC Sequence 1
    IntDefaultHandler,                      // ADC Sequence 2
    IntDefaultHandler,                      // ADC Sequence 3
    IntDefaultHandler,                      // Watchdog timer
    IntDefaultHandler,                      // Timer 0 subtimer A
    IntDefaultHandler,                      // Timer 0 subtimer B
    IntDefaultHandler,                      // Timer 1 subtimer A
    IntDefaultHandler,                      // Timer 1 subtimer B
    IntDefaultHandler,                      // Timer 2 subtimer A
    IntDefaultHandler,                      // Timer 2 subtimer B
    IntDefaultHandler,                      // Analog Comparator 0
    IntDefaultHandler,                      // Analog Comparator 1
    IntDefaultHandler,                      // Analog Comparator 2
    IntDefaultHandler,                      // System Control (PLL, OSC, BO)
    IntDefaultHandler,                      // FLASH Control
    IntDefaultHandler,                      // GPIO Port F
    IntDefaultHandler,                      // GPIO Port G
    IntDefaultHandler,                      // GPIO Port H
    IntDefaultHandler,                      // UART2 Rx and Tx
    IntDefaultHandler,                      // SSI1 Rx and Tx
    IntDefaultHandler,                      // Timer 3 subtimer A
    IntDefaultHandler,                      // Timer 3 subtimer B
    IntDefaultHandler,                      // I2C1 Master and Slave
    IntDefaultHandler,                      // Quadrature Encoder 1
    IntDefaultHandler,                      // CAN0
    IntDefaultHandler,                      // CAN1
    IntDefaultHandler,                      // CAN2
    IntDefaultHandler,                      // Ethernet
    IntDefaultHandler                       // Hibernate
};

出0入0汤圆

发表于 2008-3-27 08:40:34 | 显示全部楼层
应该是这个&CSTACK[CSTACK_SIZE-1]吧.压栈时先入数据然后SP减小.

&CSTACK[CSTACK_SIZE]这个地址已经在堆栈外部了.

出0入0汤圆

 楼主| 发表于 2008-3-27 09:47:09 | 显示全部楼层
我认为 ((uint32)&CSTACK[CSTACK_SIZE]/4*4)更准确些。

CORTEX-M3的堆栈应该是空减型,
压栈的时候应该是先将SP减4(SP四字节对齐),在把数据存到SP指向的空间。
SP初始值应该是堆栈可利用空间的最后一个(4字节对齐)地址。
如果堆栈可利用空间本身就是4字节对齐,那么初始值应该是堆栈可移用空间的下一个地址,即&CSTACK[CSTACK_SIZE]。

出0入0汤圆

发表于 2008-3-27 10:04:04 | 显示全部楼层
刚汇编测试了下.如ls所言.sp先-4,然后存储数据.

编译器这么做可能是为了通用.不管sp是在存储数据前后变化都可以.最多浪费4直接stack空间,换来通用性.

出0入0汤圆

发表于 2008-4-4 20:48:33 | 显示全部楼层
明白了 谢谢 我刚玩群星,

出0入0汤圆

 楼主| 发表于 2008-4-4 21:05:01 | 显示全部楼层
终于有人也用LM3S了。

出0入0汤圆

发表于 2008-8-11 13:23:46 | 显示全部楼层
以下蓝色文字由版主:bluelucky 于:2008-08-11,13:23:46 加入。
<font color=black>请发贴人注意:
本贴放在这分区不合适,即将移走
原来分区:[1032]ARM技术论坛
即将移去的分区:[3011]Cortex-M3技术讨论区
移动执行时间:自本贴发表0小时后

任何的疑问或咨询,请可随时联系站长。谢谢你的支持!
</font>
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-5 16:14

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表