您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> 堆栈的设置问题
本帖共有3123个阅读者
发表帖子 发表投票 回复主题
堆栈的设置问题
unconscious(论坛新手)
unconscious
头衔:社区公民
帮派:无帮无派
帖数:67
金钱:746
积分:86
注册时间:2013/8/2
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
堆栈的设置问题
我用的BF518核心板,芯片型号是ADSP-BF518 BSWZ-4F4,在程序里面我需要用calloc函数申请一块动态内存存放一个大的数组,大概需要5~10M的空间,是不是需要把heap扩大一点? 这种底层的我太懂,不知道应该在哪里设置,怎么设置?
下图是我在程序工程中找到的设置的地方,但是编译有错误,说溢出

上传的图片
  2013124854075.png [ 25.26 KB 641×466 ] (缩略时请点击查看原图)

 



还有一个问题,BF518的SRAM是多少,程序在编译的时候若内存不够会自动用到SDRAM吗?
麻烦andy了,谢谢啦

^_^
等级:论坛新手 参考IP地址:*.*.*.*
2013/12/4 8:56:50
unconscious(论坛新手)
unconscious
头衔:社区公民
帮派:无帮无派
帖数:67
金钱:746
积分:86
注册时间:2013/8/2
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

不好意思,弄好了。

改了工程中project options选项中的External Memory,Size of external memory原来是32M,我改成了64M就可以了。但是我不明白,就是原理图中的SDRAM型号写的是MT48LC32M16A2,意思不是他只有32M大的空间吗,为什么改大可以用呢?


另,1、编译优化的问题,开启全编译优化后,I2C会出错,想让程序运行速度快一点,还有什么其他可以设置的吗?

    2、是否有快速浮点的设置?




「该帖子被 unconscious 在 2013-12-04 11:23:21 编辑过」

^_^
等级:论坛新手 参考IP地址:*.*.*.*
2013/12/4 9:57:22
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
ADSP-BF518使用的都是64MBSDRAM,最早使用的是32MB的,后来统一换成64MB了,原理图型号应该忘了更新。
通常编译时,声明的大数组会自动分配到SDRAM中,也可以通过section指令指定分配在哪里。
开优化后,代码中的延时函数会被当做无效语句优化掉,导致IIC函数没有延时而工作异常。你在这些函数前面加上关闭优化语句:#pragma optimize_off   就可以了
貌似没有快速浮点设置,通常都是将浮点转为定点计算。

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2013/12/6 9:35:00
unconscious(论坛新手)
unconscious
头衔:社区公民
帮派:无帮无派
帖数:67
金钱:746
积分:86
注册时间:2013/8/2
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
明白了, 多谢andy。

^_^
等级:论坛新手 参考IP地址:*.*.*.*
2013/12/6 13:17:45
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
4信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
之前看错型号了。
MT48LC32M16A2 就是64MB的SDRAM,意思是32M*16bit ,我们通常说的64MB是按8bit计算的,
32M*16bit 按8bit计算就是64MB

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2013/12/7 10:44:49
unconscious(论坛新手)
unconscious
头衔:社区公民
帮派:无帮无派
帖数:67
金钱:746
积分:86
注册时间:2013/8/2
5信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
恩 好的,谢谢andy纠正。现在又遇到一些问题:
1、程序调通了,我主要想看看图像处理代码运行的时间,我的设置是:全编译优化、64M SDRAM,PLL分频是Set_PLL(16,4),PPI采集图像的PCLK是25M,运行的时间是250ms。但是另外一个同事评估的TI的一个芯片,是300M的主频,同样的代码,时间是80ms,我不知道哪里有问题,或者还有可以优化的地方?
2、设置Set_PLL(16,3),定义#define SYSCLK 133333333计算波特率,其他的寄存器都没有改。采集到的图像不对,是乱的。不知道为什么
麻烦andy看下,谢谢。


「该帖子被 unconscious 在 2013-12-09 11:56:11 编辑过」

^_^
等级:论坛新手 参考IP地址:*.*.*.*
2013/12/9 9:08:07
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
6信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
1. 你可以把工程选项中的优化开关打开,还有cache,这样速度会快很多。另外,你记得在IIC配置部分,还有你的延时函数上,加上#pragma optimize_off,否则优化会将延时给优化掉,导致IIC工作不正常。
2. UART的波特率是根据系统时钟计算获得的,你看一下你的UART波特率配置是否和系统时钟关联了,即 波特率配置值是通过计算获得的,而不是一个配置的固定值。
另外,BF518印象中系统时钟最快只能到100MHz,133兆可能会导致内存或者处理器本身错误,你看看BF518数据手册,系统时钟最高到多少兆。
运算算法的时间和内核有关,和系统时钟没有关系。

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2013/12/9 13:16:28
unconscious(论坛新手)
unconscious
头衔:社区公民
帮派:无帮无派
帖数:67
金钱:746
积分:86
注册时间:2013/8/2
7信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
恩 那行优化代码之前加上了,程序已经正常了。不懂cache,但是找到了关于cache的选项  全部打开,速度是快了很多,全编译优化100%,现在是110ms左右,但是还不够。我再看看。
还有就是浮点转定点这里还有些问题,用的是Q定标法,定标Q15,得到的数据不对。我先查查问题,有不懂的再问你。多谢andy

^_^
等级:论坛新手 参考IP地址:*.*.*.*
2013/12/9 15:03:37
unconscious(论坛新手)
unconscious
头衔:社区公民
帮派:无帮无派
帖数:67
金钱:746
积分:86
注册时间:2013/8/2
8信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

andy,你好。不好意思,我昨天没有讲清楚,我采用链表方式建一个固定的表(两幅图有两个表),用的calloc函数动态分配空间,总的大小应该是不超过10M的,我怀疑是我定义的其他的东西占了太多堆栈,所以导致建的这个表不够用,calloc分配不成功。

想请教下,Visual dsp++里面定义的全局、局部变量都是放在哪里的?哪些东西会占用这个内存?如何修改能使它们不冲突?



「该帖子被 unconscious 在 2013-12-12 13:37:25 编辑过」

^_^
等级:论坛新手 参考IP地址:*.*.*.*
2013/12/12 11:01:49
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
9信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
通常变量默认会放到L1中,如果超出L1大小,默认会放到sdram0_bank1中。
你试试用section(“sdram0_bank1”)定义你的数组。

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2013/12/12 13:39:27
14
1
1/2
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.154212 Call, 1 Queries, Processed in 0.031250 second(s),