打印

arm中指定函数的跳转问题

[复制链接]
1406|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
leinou|  楼主 | 2014-5-5 15:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 leinou 于 2014-5-5 15:13 编辑

在实现函数跳转时,在网上找到了该读取入栈函数的地址,想应用到stm32的芯片,但是mdk4编译器会出现SP未定义的错误.

               
        long Get_Jmp_Addr(void)
                  {         long address;
                            address=*((unsigned char *)SP);   
                            address <<= 8;
                           address+=*((unsigned char *)(SP-1));
                           return address+5;      
                  }
问题:(1)不知道是不是在使用该函数前要什么头文件啊,还是要自己定义SP?
           (2)stm32的地址应该是32位的,我该怎么定义address和处理SP指针?

相关帖子

沙发
leinou|  楼主 | 2014-5-5 15:34 | 只看该作者
有没有大神回复下,小弟基础有限。

使用特权

评论回复
板凳
dufanbao| | 2014-5-5 15:42 | 只看该作者
这是core_cm3.c中定义的几个函数,你可以看一下,stm32双指针,一个是msp,一个事psp。
uint32_t __get_PSP(void)
{
  __ASM("mrs r0, psp");
  __ASM("bx lr");
}
/**
* @brief  Set the Process Stack Pointer
*
* @param  topOfProcStack  Process Stack Pointer
*
* Assign the value ProcessStackPointer to the MSP
* (process stack pointer) Cortex processor register
*/
void __set_PSP(uint32_t topOfProcStack)
{
  __ASM("msr psp, r0");
  __ASM("bx lr");
}

/**
* @brief  Return the Main Stack Pointer
*
* @return Main Stack Pointer
*
* Return the current value of the MSP (main stack pointer)
* Cortex processor register
*/
uint32_t __get_MSP(void)
{
  __ASM("mrs r0, msp");
  __ASM("bx lr");
}

/**
* @brief  Set the Main Stack Pointer
*
* @param  topOfMainStack  Main Stack Pointer
*
* Assign the value mainStackPointer to the MSP
* (main stack pointer) Cortex processor register
*/
void __set_MSP(uint32_t topOfMainStack)
{
  __ASM("msr msp, r0");
  __ASM("bx lr");
}  

使用特权

评论回复
地板
ayb_ice| | 2014-5-5 16:49 | 只看该作者
SP应该指向int类型

使用特权

评论回复
5
泰山特曲123| | 2014-5-8 18:38 | 只看该作者
为什么要这样做?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

55

帖子

1

粉丝