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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
# o6 c/ @. @4 Q* V. W5 `( G! _! D9 W  Z7 p9 y+ e$ V
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2563 g" f( [1 `/ Y  w3 p3 Y+ l

1 j# ^/ c3 l# }6 V  d其他程序段。。。。。
+ Q/ ^( A# `) f* q1 b 5 S5 E$ @) R  `1 c6 h
   free(x_d);
) F' B, G% w$ K* L) x  O5 T: J  S; @) ?# {* ^& m+ @
使用DSP侧单独调试功能,验证动态申请没有问题,# z! l4 S# n3 i

" e. ^4 B, g& u/ d" `: N2 a7 d但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。' d+ N; t9 J" R9 w- n

; V1 T6 [  Y3 D5 W: n* d3 W! V! R; ?5 G! C% t9 `$ b
7 s4 A+ _' m7 e5 g3 D( A/ g& o

, g! R* l- e2 [/ p* X& P6 _
& T( W" h% [8 e& e7 Q
7 _) U6 X- q% q, H0 S& N% L! f
+ t) x3 K  A% b# ?  n. O# V# I9 M3 {6 g! M6 D. o

3 t% L, {- y6 Z5 D: ?+ N0 b/ b) p: _8 N1 a4 H
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */2 o5 I' M2 C+ K0 ^/ m
Program.heap = 0;7 |4 M% U% M3 C/ f9 ?9 @
Program.argSize = 100;  /* minimum size */
' |+ d5 E' D" _- R  k" cProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
. H6 }- Q0 g; D' k* G. Pvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');: s9 N8 Q+ I/ s0 n& v  v" d$ y
var heapMemParams = new HeapMem.Params();
- C1 z% i: `7 j# @0 UheapMemParams.size = 0x4000;
2 j' L8 A) U6 v) L. p& _$ p6 x% E" Y) g: p) n- f. n" }
var Memory = xdc.useModule('xdc.runtime.Memory');, h. a) W6 D" i* Q1 ~5 D
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);/ ~3 {9 M- }& ]6 k$ K0 H1 a
  J, d7 v9 ^; M9 \6 y: W: l
我大约calloc  每次共计大小为5K*16bits,: T% n# H+ ?/ a# R# q( t1 j
而默认配置才0x4000、需要改大。
: m: q. ^7 b( R1 z
6 m! c* r) K( `1 U3 x& K0 M* o
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明9 y! k5 M& a5 y& Z. Q" @
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下% n4 f; @' ^& v# U  [- {9 h, b0 D2 i
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
- V) u. D! f, [$ Q
" X" v" i. f6 Q) j/ F% r( F
是不是需要在DSP.CFG中进行配置
* h+ x: |" z) g; G, R7 X我现在的配置为
! b! o4 B- y1 t0 I) ]; ~7 _
$ ^  ]3 f9 l; b; O- a/*
2 P( b& b9 a, K' W, P% V *  ======== Operating System Configuration ========
  S7 U& b' E! |8 R */
4 g( }9 A- J% _8 Q: r  s3 [3 a+ |) S- A8 l* P1 S" E% P
/* no rts heap */
8 n. H! b& l; @Program.heap = 0;) x! C- |& S0 Z0 Z
Program.argSize = 100;  /* minimum size */4 L5 a! r5 G: M$ G" q
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大* t+ d* {" B, o7 g
, a2 Y9 J& D: I) g. ~, v/ C
/* create a default heap */
. O9 T% h4 X) w# Tvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
8 |; O3 _7 F& T' [8 I8 H7 \& S" Xvar heapMemParams = new HeapMem.Params();) o) u( z5 q  w$ W' H: C
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大- j& r0 l* X' s( A1 \

# f/ }  P; P; P! P& L# N# S! w
var Memory = xdc.useModule('xdc.runtime.Memory');% h7 `+ M* [3 l8 v2 `* t: L
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
, \( g5 s' Z0 m+ `  r% V
1 z1 ?% ?! D' [* X( e! L. T/* configure System module */& ~4 H6 C- Z  x; @$ V6 P7 Q3 \3 _
var SysMin = xdc.useModule('xdc.runtime.SysMin');( b: ^( F: }' x7 m5 z7 H1 j
SysMin.bufSize = 0x1000;
5 e* q7 Z) |1 j3 C+ ?SysMin.flushAtExit = false;
% Y! j3 F0 p2 f! M: k9 X, v( k6 p8 ]  F) h3 Z6 `! p7 F9 {7 u( j, R6 h. H
var System = xdc.useModule('xdc.runtime.System');  f* z3 z0 `: X; m8 A( d- q( X3 r
System.SupportProxy = SysMin;$ W2 W0 J2 U) w- o: K) X2 c% r

" a$ P6 {" N2 ^  s* [3 L7 @9 I/* configure SysBios to use the lower half of Timer 1 */( d# Y, B7 D  E0 X/ G. V" R
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
1 c; s5 ]  c3 j; M; Dvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
& w' d% c/ Y. k& q" b7 r7 J8 j5 WTimer.timerSettings[1].master = true;
+ C( C5 x1 l5 w: u: mTimer.defaultHalf = Timer.Half_LOWER;
- [- v, r* I3 t. ~1 P6 O. I, i9 ~Clock.timerId = 1;
  D$ O3 O! [: Q0 s, s4 I" @8 n
7 d! P! S2 j% a9 }: y% b) ^, D- |: ]3 U7 `$ p
/*8 ?3 M& R( m( k4 W- |
*  ======== Miscellaneous Configuration ========  }' _5 c, `& o) m
*/
7 Q2 O* r# y5 O5 [# p
8 ^3 q) t- h0 s/* set default diags mask */
4 V* Z# K! J- j4 y! f9 H: A7 M' E  Vvar Diags = xdc.useModule('xdc.runtime.Diags');* p0 _, H( \* F( o% `- F  _
var Defaults = xdc.useModule('xdc.runtime.Defaults');' ]! f# }% l% U) y

; s6 \8 w. C6 Q8 C; h' DDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
6 r5 y! a/ `0 l. M8 {3 a9 FDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
% E! H8 q# Y; {  J7 vDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;6 [5 \8 o" G- ^8 i8 i
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
; B4 {3 l7 t. t4 jDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
6 S4 S$ }; ]' U% PDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;, j8 {! l* [( O
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
6 d' v+ L1 }# Z9 i" ]Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
; u7 a3 ]8 a) r5 ^4 {1 EDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
* u3 E4 ?4 m5 |9 _0 x- c7 a- IDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;, O. l0 e$ J3 z
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;8 S4 n" T/ I5 F$ a4 ^% P! ?, m+ Q
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
  ]* |/ f0 S7 I& j- f1 ]5 }6 NDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;! G; x$ L: }( {. N! @
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;8 v3 i0 ~  P+ x7 T* a" D
. z/ J8 s9 u6 c+ v+ g( [6 O
/* override diags mask for selected modules */
! }3 r8 ?; V0 M' t- l5 c$ X9 ]& |/ Lxdc.useModule('xdc.runtime.Main');
1 O" U* s1 p( a2 U8 K$ \Diags.setMaskMeta(
( ?/ L) f! l/ y  i: l0 ~7 G    "xdc.runtime.Main",
% j3 ^! h& G) M; ]/ n    Diags.ENTRY | Diags.EXIT | Diags.INFO,9 h2 v3 L3 Z& J! @
    Diags.RUNTIME_ON
" g5 a) [: k! ]- M' _);$ Q8 w' Z/ f2 b; X/ {: _
9 R% ?( R2 u& i7 S; q# v" o
var Registry = xdc.useModule('xdc.runtime.Registry');
4 n* o8 q  n& T3 A1 GRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;+ u6 m& B' w; X/ y9 O0 s4 y: t8 q
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
: l6 W1 U1 m1 P) ?+ Q7 H$ F+ l  h$ DRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;$ t' T+ i* K/ ]) q8 T$ V
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;! Y. H' p2 H" l  {- S' B4 t; d
) B' ]6 Y2 N# t/ h$ {6 z
/* create a logger instance */9 a6 R& [. C  U) A; p
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');/ ^8 c4 @- \1 m: U$ b. }2 z; V
var loggerBufP = new LoggerBuf.Params();
6 Y/ O" ?9 u. w( O% qloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */9 \3 f" w- {- F
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
+ r9 f9 C& R. t0 s, V  P0 }2 L2 f7 g1 C, S0 Z
var appLogger = LoggerBuf.create(loggerBufP);6 |, u' n6 n2 q8 k; k# R% I
appLogger.instance.name = "AppLog_Core1";3 H/ H: l" S! _, `* |* ~+ J3 ]7 y
Defaults.common$.logger = appLogger;0 q. f: P; ]' ~$ S" G
Memory.defaultHeapSize = 0x8192;   
& G4 F; S  Y, z2 X( ^8 i: G, z5 N2 WIdle.idleFxns[0] = "&LEDStatus";) D9 R3 W( _/ f2 x
Cache.initSize.l2Size = Cache.L2Size_32K;
4 ^+ E$ Z0 ^# J4 E& W) I  o6 m% z
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-25 14:00 , Processed in 0.043146 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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