在vdsp(bf561)中自定义Stack和Heap

 
AB两个核有不同的Stack,以下定义仅针对A核。
1、 在ldf中定义要使用的内存块
   MEM_L2_STACK { TYPE(RAM) START(0xFEB10000) END(0xFEB17FFF) WIDTH(8) }
2、 删除原有关于ldf_stack_start和ldf_stack_end的定义。
3、 添加关于ldf_stack_start和ldf_stack_end的定义,主要是ldf_stack_end的定义,这个定义在*_basic_crt.s中设置SP和FP指针时使用,由于Stack是从高地址向低地址递减的,因此这个值应该设置为Stack的高地址。
      L2_stack
      {
         INPUT_SECTION_ALIGN(4)
         ldf_stack_space = .;
         ldf_stack_end = 0xFEB18000 - 4;
      } > MEM_L2_STACK
4、更简单的办法是修改*_basiccrt.s中对SP的赋值。
在创建工程时,VDSP默认设置了一个Heap,且将其放在      
MEM_A_L1_DATA_A          { TYPE(RAM) START(0xFF800000) END(0xFF807FFF) WIDTH(8) }
这段32K的地址空间中,当需要分配的存储空间大于32K时将分配失败。当然我们可以自己指定一块存储空间做为Heap。
1、 在*_heaptab.c中添加my_heap_space和my_heap_length的引用:
 
extern "asm" int ldf_heap_space;
extern "asm" int ldf_heap_length;
extern "asm" int my_heap_space;
extern "asm" int my_heap_length;
 
 
struct heap_table_t
{
 void           *base;
 unsigned long length;
 long int        userid;
};
 
#pragma file_attr("libData=HeapTable")
#pragma section("constdata")
struct heap_table_t heap_table[3] =
{
 { &ldf_heap_space, (int) &ldf_heap_length, 0 },
 { &my_heap_space, (int) &my_heap_length, 0 },
 { 0, 0, 0 }
};
2、 在LDF文件中定义要使用的Heap空间:
MEM_L2_HEAP      { TYPE(RAM) START(0xFEB00000) END(0xFEB0FFFF) WIDTH(8) }
3、 在LDF中p0的sections中添加my_heap_space和my_heap_length的定义:
 
      L2_heap
      {
         INPUT_SECTION_ALIGN(4)
         RESERVE(my_heap_in_L2_a, my_heap_in_L2_a_length = 64K, 4)
         RESERVE_EXPAND(my_heap_in_L2_a, my_heap_in_L2_a_length, 0, 4)
         my_heap_space = my_heap_in_L2_a;
         my_heap_end = (my_heap_space + (((my_heap_in_L2_a_length * 2K) / 2K) - 4)) & 0xfffffffc;
         my_heap_length = my_heap_end - my_heap_space;
      } > MEM_L2_HEAP
4、 在p1的sections中同样添加my_heap_space和my_heap_length的定义。当然,需要指定一段不同的存储空间以免与A核冲突。
5、 使用时可以用heap_malloc指定要从哪个堆中分配空间。如果使用malloc则只能从默认的第1个堆中分配空间。
 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌云阁主

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值