关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构. \8 I% H4 y$ H( s* I
# X3 d. N  ^5 n# ~0 p: @
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
) N0 U7 W+ Y6 {
9 Y* ]1 k% D; ?% R  X# ^$ m( U其他程序段。。。。。; f" ?9 W% C. f  Z. T8 G- |
" f+ l* P0 O, G" @, Q
   free(x_d);$ |, i, e. m/ h3 A

$ B2 w; V# k. c( Q0 X% k7 y使用DSP侧单独调试功能,验证动态申请没有问题,
# R% ~! e/ F* d" e3 R) @1 x! H
6 q9 W) r$ e" M/ K但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
4 }/ [. u* }$ s8 ^" `  x; s
  ]% y( Y( w, B; X# |% D* D! c
2 N) u  j( f% u# S* N8 L
) X; W) t2 C- L6 I  R
: I! c7 e) ?& l" W1 @" C

, r! `, m# `- s/ y/ I6 Z+ j' t3 @- v; }5 ^
# b7 g' [; E) m( \5 Q: b

# F* F5 ]) y) K: w: _3 G
8 c3 Q2 H9 Y- z: s5 q# e: v3 M
+ N" f0 G) F# g& k/ L+ o& ?- S. o8 o
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
4 Q" M  M7 M' R7 k1 Z我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
" C+ ?, \! G/ n6 O6 n9 I" Q' t(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
0 g/ C/ Y- x$ w+ o% l( W% r
" p5 }' a5 L9 g5 C- H  Y' `  {# \( j
是不是需要在DSP.CFG中进行配置
$ d, j/ n' w) ^8 T我现在的配置为6 ^/ Y, \4 G% l
: g' f9 \0 M* ?( Q  i9 U
/*$ o" w: v2 o9 D7 x: `6 @$ S1 t! h
*  ======== Operating System Configuration ========% B) {3 J" C% H
*/
' p: d- {; k5 l# \/ [% i1 ~  [' q. a
/* no rts heap */' j+ v' i. x$ S
Program.heap = 0;
3 u, [" F3 w' s+ YProgram.argSize = 100;  /* minimum size */: V5 Y) N3 ~% C# P  d) ]# R) L2 U
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
- w, e* G8 G3 e6 f7 G5 u5 W+ y" k4 b
/* create a default heap *// _/ C' O3 @: ?( q. r" i
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');( u, j" L6 ?; w8 t
var heapMemParams = new HeapMem.Params();
1 L' k4 K9 e; FheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
: V3 _2 D) e3 b9 P3 W' @- j9 O- I. b, d; A" p/ u$ O0 o
var Memory = xdc.useModule('xdc.runtime.Memory');
) b$ \/ T! E8 Q$ HMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
% l2 W# k; _8 G( b
4 ?( ~( F. n( |" _" |/* configure System module */8 Z- C  ]( i2 |) `
var SysMin = xdc.useModule('xdc.runtime.SysMin');
7 ~' D/ O% N# USysMin.bufSize = 0x1000;. P* o6 Y! s! m6 ~
SysMin.flushAtExit = false;
- Z' {8 e$ G  b# s; v8 R
/ l) A! G' i8 J, u+ s' _6 x8 yvar System = xdc.useModule('xdc.runtime.System');$ A1 ~" |6 v0 L( u6 X4 s' m5 l! f/ S
System.SupportProxy = SysMin;
7 b0 S7 }! X$ p  D6 ]9 q$ \, N, C) z8 p" I; ~$ A
/* configure SysBios to use the lower half of Timer 1 */9 Q* B9 K* k/ z- F, h. M
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');8 C- m1 s; @$ x( n* A0 p/ E  e
var Clock = xdc.useModule('ti.sysbios.knl.Clock');) y9 m, x6 R/ J9 t/ O+ m) Q- ~3 w- n
Timer.timerSettings[1].master = true;' u2 `) ?, {4 Q0 O  R  b/ O( Z
Timer.defaultHalf = Timer.Half_LOWER;
  W  p% a; q$ c1 ~# K  ]Clock.timerId = 1;$ _; o  s2 w2 S2 U: O$ `+ {

7 I; m: |7 }, O* Y) H, Z) e6 l: H/ D% T; G3 f( @, H
/*$ s8 [5 I% V( Z& ^$ d
*  ======== Miscellaneous Configuration ========# Q) m$ g" M' D" l" }, ]
*/
" ]0 m" J* Y& l0 e
5 E/ R- a9 T( s/* set default diags mask */5 h# t+ p1 ?) t: t( b
var Diags = xdc.useModule('xdc.runtime.Diags');
5 n1 g$ n8 ]) c$ Q9 K" C% j7 H2 j+ zvar Defaults = xdc.useModule('xdc.runtime.Defaults');
/ l8 _: h4 d: \3 S8 i+ O1 Y. i1 t2 e
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
9 i4 x( Z; R% [3 z, }Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;% @% E$ H( s" B) _
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
0 d6 t0 |9 w' F* ?$ D9 W* @. KDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */- z# w1 G& T' T, n# i* |
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
2 s" S, q. n" ]/ e+ m  sDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;. j8 j2 z% D) V$ j; R: K" R
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;/ G3 @; @8 ]2 Z2 w
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
! `3 \6 v0 M( \1 g5 t8 }% m3 W. T2 EDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;5 R. r+ O& [1 d" k
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;3 v# V  B6 a. ~+ F
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;' A; s8 Z( n$ I* q2 [( t
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;5 H  D( B0 d% B6 F& C! O9 a
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
( e+ E8 J) g  zDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
- u6 p4 U9 f* q
/ V( }* S( W* E% q' \8 Z- v/* override diags mask for selected modules */; |2 X; S$ R( D# }, n; ^
xdc.useModule('xdc.runtime.Main');; H4 B$ C' ^1 A4 o  ]+ J4 |6 L/ {
Diags.setMaskMeta(
, t2 X9 |7 f& B$ V- X' Z( w+ x    "xdc.runtime.Main",
# _6 s" f( ^3 m+ v" @$ k    Diags.ENTRY | Diags.EXIT | Diags.INFO,
) J& r* P' X: x6 f8 V4 }$ ]    Diags.RUNTIME_ON
4 I; G) M2 [) h" {( T3 q);
: r; k+ c# k2 H, ~, H1 n) k( G/ ^- c  c/ \' `6 j$ `, c
var Registry = xdc.useModule('xdc.runtime.Registry');, E* b" l5 q& s# u' o
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
6 C1 e) r/ U" K; l9 _% [- n+ C5 ^Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
( l6 a9 I+ m4 a- O/ f( ]Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
8 _8 _$ M2 D! p2 E0 R, O2 c4 ORegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;: s0 G! r/ f* k0 ^* _( [: w$ W
6 y  y2 H/ |- \8 S+ t6 c/ h
/* create a logger instance */5 u4 U" [; D- `
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');! l" L0 W7 @9 I: \6 V3 T
var loggerBufP = new LoggerBuf.Params();
9 F4 Q- U: Y- m$ \: EloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */  w7 a2 e( K9 ?& E8 Z
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
: Q' J9 k% _% k7 k, F) W! B. D- m. e
var appLogger = LoggerBuf.create(loggerBufP);
# \) l, f/ j, IappLogger.instance.name = "AppLog_Core1";
4 E% Q, A# m, @! Z" s: I+ jDefaults.common$.logger = appLogger;
7 ?4 j: S/ W! J# u) R% q' m* v9 qMemory.defaultHeapSize = 0x8192;    * ]9 v) Y" T$ @
Idle.idleFxns[0] = "&LEDStatus";
0 c2 o3 P. h* B. s7 bCache.initSize.l2Size = Cache.L2Size_32K;5 y6 y# b) l5 F1 \
* J. Z1 V$ S" ^
回复 支持 反对

使用道具 举报

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 */
' P. `7 u4 L+ n% B' `var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
0 @* l7 Q' {( R1 _& U+ @) Lvar heapMemParams = new HeapMem.Params();3 t" z; v9 t, o. E( E' ?& F
heapMemParams.size = 0x4000;+ d- k# y% l) ^, ~0 b9 S  S, [

1 u7 f" g) `; I+ |& ~var Memory = xdc.useModule('xdc.runtime.Memory');" P8 q4 Y' ~- [& _
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
, J, d$ _+ Q5 O5 |& o
: g- h* V. N$ `& ~9 J* o我大约calloc  每次共计大小为5K*16bits,( e7 r1 k0 i: ^) F! ]
而默认配置才0x4000、需要改大。  i% r  T3 B1 [* A/ y4 S
! `. ^" d. ]& @& b/ f/ Z
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
/ P/ X; u7 F( ~, z4 x8 I0 ^Program.heap = 0;/ `$ e' E0 ]% G. ?6 B* J" X
Program.argSize = 100;  /* minimum size */
0 @% X' k. @1 ^/ v' W$ t: [( s- XProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-3-9 17:45 , Processed in 0.047341 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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