您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> SP与FP中间的临时变量区,求解。
本帖共有403个阅读者
发表帖子 发表投票 回复主题
SP与FP中间的临时变量区,求解。
lzqdianzi(论坛新手)
lzqdianzi
头衔:社区公民
帮派:无帮无派
帖数:2
金钱:19
积分:3
注册时间:2013/3/6
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
SP与FP中间的临时变量区,求解。

做了个简单的测试

  void main()  
  {
    unsigned char k0, k1, k2, k3;

    k0 = 0x46;
    k1 = k0 ^ 0xff;
    k2 = k0 + 0x74;
    k3 = k1 * k2 + k0;
  }

编出来的汇编为:

LINK 0x0 ;
R0 = 70 ( X ) ;
B [ FP + 11 ] = R0 ;
R1 = -71 ( X ) ;
B [ FP + 10 ] = R1 ;
R2 = -70 ( X ) ;
B [ FP + 9 ] = R2 ;
R3 = -80 ( X ) ;
B [ FP + 8 ] = R3 ;
UNLINK ;
RTS

==========================

LINK 0x0

然后下面有 B [ FP + 11 ] = R0 ; 等STORE指令。

这样函数里面的临时变量已经超出了,SP和FP中间的区域了。

编译出错????

还是我哪里设置出问题了????

求大神解答



「该帖子被 lzqdianzi 在 2014-04-14 08:16:23 编辑过」

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2014/4/8 17:24:47
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
不会汇编,没关注过,你看看编译后能不能运行处正确的结果。

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2014/4/8 23:21:28
lzqdianzi(论坛新手)
lzqdianzi
头衔:社区公民
帮派:无帮无派
帖数:2
金钱:19
积分:3
注册时间:2013/3/6
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

如果在RAM中,main函数的上方有定义常量数组的话,执行后会覆盖掉我的常量数组。

1.如果我在数组和main之间预留一块没用的空间的话执行结果就正确。但这种方法不可取,因为函数写长了有可能又覆盖到数组了。

2.我在ldf文件中改了存储器的类型也不行。IADR为数组的空间。

   IADR  { TYPE(ROM)  START(0x0000bf7c)  END(0x0000bfff)  WIDTH(8) }  

3.将数组用汇编伪指令定义为不可修改的。但找不到汇编伪指令。

  我的数组定义是:**_asm都是函数入口地址。

  .VAR iadr_list[33] =
         _excpt_asm,
         _isr00_asm, _isr01_asm, _isr02_asm, _isr03_asm,
         _isr04_asm, _isr05_asm, _isr06_asm, _isr07_asm,
         _isr08_asm, _isr09_asm, _isr10_asm, _isr11_asm,
         _isr12_asm, _isr13_asm, _isr14_asm, _isr15_asm,
         _isr16_asm, _isr17_asm, _isr18_asm, _isr19_asm,
         _isr20_asm, _isr21_asm, _isr22_asm, _isr23_asm,
         _isr24_asm, _isr25_asm, _isr26_asm, _isr27_asm,
         _isr28_asm, _isr29_asm, _isr30_asm, _isr31_asm;


这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2014/4/9 9:12:51
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
汇编的真心不会,帮你顶顶。望高手指教。
如果是C的话,编译器会帮你分配空间,不会出现这种空间外泄,覆盖的情况。

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2014/4/15 9:58:11
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.159259 Call, 1 Queries, Processed in 0.015625 second(s),