关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7175|回复: 5
打印 上一主题 下一主题

关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
' \- X- O$ Q* a" T2 M2 V4 z# _) i6 R
! U( d( @0 c9 W' _, n$ u6 Y$ W3 d    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256% a5 ~9 L+ b, C3 I+ o
9 r2 x% a8 R  V5 C  E" T
其他程序段。。。。。$ }% p4 N) M% l$ [, N( C

+ i+ g9 l" r6 y0 P   free(x_d);
2 ]/ Y8 ~5 l9 W) W! O- t
8 I& B; \7 I7 r1 q& d0 F使用DSP侧单独调试功能,验证动态申请没有问题,
: @' z  Q: J( O* L( S
) o+ Z+ d: C# A但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
5 \' G5 X% Q4 _, z
9 M7 k- G  b6 ?
* O" Z. J$ R) y- x5 e9 h
2 r: n: u2 s1 {9 O
/ {7 O2 w2 t! Q  N9 u7 L  p% |0 _

2 @- B& T2 g( f2 {8 h* Z7 K% \! m- m' a+ `
# F7 j+ M, @1 \6 Z% Y. y+ w
7 p- M/ A' |: s/ C( j) M5 ?
0 q- |1 p6 n' Z$ A( }
2 W) i( a3 h$ }, R
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明& n$ V) R+ k3 s) _3 G5 v
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
. c. ]  B& G' y7 U, _. G: U/ s(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
$ E* Y) o/ I/ n9 n# s- I+ |

; Y/ T5 V& t  }! u2 g$ U. Y6 t是不是需要在DSP.CFG中进行配置+ p5 w, K; ~; J. F" R! K% V! }
我现在的配置为& `- R0 X  G. b4 Q+ e

! K' `" d0 x5 ?8 ]9 p3 Q  q/*
8 W& W# l8 T6 @6 W7 V, K *  ======== Operating System Configuration ========6 }0 I* O$ r% Q: S' U1 Q* N
*/' }+ D* k, I- z$ `- ?) u+ t8 S( ?
& _% h% s* A7 Q1 |
/* no rts heap */
0 H% P! u5 I: a# T+ Y# ]Program.heap = 0;3 j: C9 A0 J2 ^+ }
Program.argSize = 100;  /* minimum size */
: q1 Q% s8 ~' k1 w6 OProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大$ x) i# h$ ^! I7 r4 R/ l

+ J' C+ B0 x% u1 D, d$ w/* create a default heap */0 V2 X3 f& n: l3 _
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');5 w% c% h+ F& v" T" `; }, `
var heapMemParams = new HeapMem.Params();
7 W4 G7 E+ I0 [& j* J# k  ~/ [heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大# O3 m! \4 \  s! J5 J
7 V! [& }( }9 h& l% d8 O
var Memory = xdc.useModule('xdc.runtime.Memory');
- t. T0 t( H  b( zMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
$ h$ O% [% q( s0 {( ?: I% {
6 d5 ]/ N0 e: h- i/* configure System module */$ a- _1 U. r% B  `9 O
var SysMin = xdc.useModule('xdc.runtime.SysMin');3 o" ]" O" o; u/ P/ S9 h
SysMin.bufSize = 0x1000;" F+ C* q! W& ?" x1 t
SysMin.flushAtExit = false;
3 ?/ k. d: R* c$ y( N
$ s3 q$ T5 q# J( f& \var System = xdc.useModule('xdc.runtime.System');3 r: {8 l! x7 C' d
System.SupportProxy = SysMin;2 [8 J5 O! u7 g* G% T

8 X: S5 V' A0 V8 c/* configure SysBios to use the lower half of Timer 1 */3 }* {. o3 E9 @: R% S0 F5 t
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
+ v9 x7 v6 ]" V; x* F7 v/ qvar Clock = xdc.useModule('ti.sysbios.knl.Clock');6 B' x3 {6 p" v" J* d. y9 ?
Timer.timerSettings[1].master = true;
8 O1 M5 Q+ ?4 i+ u# z) i# R0 X1 MTimer.defaultHalf = Timer.Half_LOWER;
) Y4 g8 k. m' PClock.timerId = 1;
$ L4 [" |! G/ A: z
  K3 h; a8 u( w
3 L8 [0 e& ]) s% \: ~0 H. S/*
# [, e5 r8 I9 \: h  ` *  ======== Miscellaneous Configuration ========$ d* m' ?  K5 F  C9 ^4 A& U4 _
*/
' k" V& i# R$ ]4 g3 I& J2 _9 G
4 t3 s! v3 z) h; {" ~; J/ l: w- {/* set default diags mask */% U" v1 h" d' `
var Diags = xdc.useModule('xdc.runtime.Diags');, @! C8 u# J+ v0 g5 u
var Defaults = xdc.useModule('xdc.runtime.Defaults');
5 z' q5 L* q6 l0 n+ O$ |0 J0 K0 M  W% r, N$ C
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;3 R2 Y" V3 c4 p! o" e# ]# s
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;. e4 l! E3 g  y
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;. H2 I( Q( e* z$ G4 \) p1 N
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
: X) b# L$ x* {) LDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */; `* E/ V: X: {4 q* \
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
/ h+ {$ G3 T4 Z- iDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;" {' @2 g0 ~, f- O/ M% s4 A- c
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;* M0 V# P+ {) j
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
4 t+ D% K6 H$ a+ w- r7 b, o' {& lDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;* }) j3 j. I/ s4 p+ k0 C  P( k. z
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;) P7 e7 c7 d* P% d/ d
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;7 x+ b" A5 o6 S( {  p
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;1 E, A' y! A* M, S9 T/ F
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;" Y4 n0 k  L* j! y: h. R" f
8 R4 o1 ?( g$ X
/* override diags mask for selected modules */' }- i: d1 I3 r9 y2 p
xdc.useModule('xdc.runtime.Main');; F# @; u. a* M- b8 N; c. B; h
Diags.setMaskMeta(
8 {) d5 r* R* }    "xdc.runtime.Main",, q# x7 u3 b; k" T
    Diags.ENTRY | Diags.EXIT | Diags.INFO,0 C; Q( }6 l# v- J/ m1 n, C3 V
    Diags.RUNTIME_ON. s3 z8 Z4 {. n* w/ Z4 B! N
);
4 d6 E% p& _" f9 j, C/ z
/ W7 U, @9 U- ovar Registry = xdc.useModule('xdc.runtime.Registry');
8 E/ A9 ?6 G% x3 D3 m5 bRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;# Q/ V3 T/ u# }. j; {
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
$ l) c% r5 D  P7 X3 O9 PRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
: |' S/ G* Q- n/ [7 ~7 ERegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;6 m; Q/ {7 {" n9 o
* I! [4 Z+ O; ^/ P
/* create a logger instance */; l4 b5 J, y1 v6 Z6 J
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
3 v2 s8 X6 y2 N. S3 t0 Evar loggerBufP = new LoggerBuf.Params();! g' S, l5 C8 p/ h8 i
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */& k9 t/ {! m, S! N5 ~8 _5 q. H$ j* v* A
loggerBufP.bufType = LoggerBuf.BufType_FIXED;4 n( O- W' h6 \2 w$ y  R
) S; v: ]0 u( b6 A* N
var appLogger = LoggerBuf.create(loggerBufP);
" ]4 C3 A9 R$ B# o7 T0 VappLogger.instance.name = "AppLog_Core1";9 \6 b* B1 C) d6 b- F% X
Defaults.common$.logger = appLogger;
8 w7 a6 v( b& @% tMemory.defaultHeapSize = 0x8192;    4 X: U# q9 x( r7 n! z7 x* X
Idle.idleFxns[0] = "&LEDStatus";, h" ?  B5 x1 E7 j
Cache.initSize.l2Size = Cache.L2Size_32K;: H3 x7 E8 W, h' Z

# \3 m! Y- ~  J& v; I
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
9 Z& Y4 F$ b" a+ Jvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
  h0 [. e  t) a: S- s) @  pvar heapMemParams = new HeapMem.Params();
3 B& o6 n9 s: @& WheapMemParams.size = 0x4000;
- G8 j( q8 @) W5 v) N# s" i0 y- d( ~+ u8 ?( T, s  l" k
var Memory = xdc.useModule('xdc.runtime.Memory');2 I3 z1 l' Z# b( N5 u/ @+ ^
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);, J. {* v* t9 X2 N* G

" G& m! V# F4 U* {5 ~/ _! X5 s我大约calloc  每次共计大小为5K*16bits,
4 b" r7 U' \1 L4 w" P而默认配置才0x4000、需要改大。. g- n5 T, `6 T, u/ V1 k

& M4 [1 ]' o5 y" H* _  a  b( N
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */: D$ \  I$ B0 |
Program.heap = 0;" s, g' w- {! A- [9 r6 n) e
Program.argSize = 100;  /* minimum size */% t. `8 s# _+ {7 r7 Q3 j
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
6#
发表于 2015-10-31 20:55:50 来自手机 | 只看该作者
这个问题,我再测试一下,过两天实测后给你答复!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2025-12-28 16:43 , Processed in 0.046711 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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