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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构" G, n2 T5 L$ W8 F9 Z1 m$ F& x
  G2 W! v9 N' c3 j- _. w+ v
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
, l$ L, P% G" h  t& X: S: n* ]- X1 i! m( Y) V" W
其他程序段。。。。。
  b+ w2 S8 U8 E" E8 _ " l/ T& M% X- y5 Q' ?
   free(x_d);- O( d6 h- Q! |: c' ^# V- c; ~. Z: V

0 Y3 N& a$ z! I  B( q; m使用DSP侧单独调试功能,验证动态申请没有问题,! @) X. c. g# P8 u2 `
5 B- x( d8 N5 h7 I' O/ _0 O
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
, A, ?( \! m$ q. @7 s' |
/ v+ k. c7 V8 ]- R! _

) i$ m0 V) y2 n2 u( y2 q1 `3 X8 V  U: W$ f$ d' t% a: [: ~
1 ]) P6 B3 C9 A( x- r# t. T- F7 o7 S

4 H& T! O' U6 D' f+ t
( O3 u: B) \% G8 C
/ y; t9 Q. A" {+ H6 s3 v2 u
; R  S! o6 h- Y6 k0 F0 K
, O2 ^9 P0 p2 T6 M
8 ^" P' N. D! U; s2 v6 u
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
! q* O6 z7 H3 P8 ~: [- X7 @我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
$ L3 W( t0 n" Y" Z(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
6 b# V( ?+ }' g" K4 d4 d/ b

; a) }8 \6 Y0 z& B是不是需要在DSP.CFG中进行配置
& k7 ~; P" \% k% ]+ D7 x& W8 H我现在的配置为
* J# h, I& Q% T2 z( k' d
6 J( i5 Q/ ~$ v1 i7 ]' n0 q: M/*( i/ T: l8 }$ D! w4 p
*  ======== Operating System Configuration ========8 I( q6 Z9 i% t+ v
*/
% s2 F0 |. S' }; _+ T# h  r8 x' G* W+ e( A1 e
/* no rts heap *// X( K( `  Y1 ^$ ]0 K. e' p. ]
Program.heap = 0;
+ y+ r8 g5 @$ @  X3 fProgram.argSize = 100;  /* minimum size */
* a) l% B* a+ k0 gProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
% |/ Z+ D9 U3 ]" R. q4 J9 @$ h! m' }4 ]. Z3 V" \6 u( @
/* create a default heap */
" z: _( a% Q+ v5 B( u2 X* x5 G# Dvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');; S& o# S3 m$ y( S/ N0 w
var heapMemParams = new HeapMem.Params();
. M% X8 Z! h8 kheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
4 ?3 r! `6 {4 ^2 B  q7 ^1 f8 m3 ?9 w9 |
var Memory = xdc.useModule('xdc.runtime.Memory');
. u; {2 T0 `# W0 bMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
* f( K5 p) z: b( M  {2 Y
+ ~. j. e1 ]2 }" y0 l  a/* configure System module */# |, q' X, Z% v+ q6 L- H
var SysMin = xdc.useModule('xdc.runtime.SysMin');
5 L) \6 z( O6 b" s: x4 s0 U/ J) s* aSysMin.bufSize = 0x1000;
, G- G$ n( c% V4 ]8 k) [SysMin.flushAtExit = false;4 r+ ?& q1 o' y- g# F9 g
+ L+ _7 u$ {/ O
var System = xdc.useModule('xdc.runtime.System');1 S2 ~* g. y7 ?% c) ]
System.SupportProxy = SysMin;+ r) g; _# u3 d8 y6 O3 L
2 H6 |( b0 b# n. M2 p
/* configure SysBios to use the lower half of Timer 1 */
- Y0 Q9 x! m; F  P( d* v: n# \var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
. M' ]; A4 c0 h& n3 V% ?/ [  S; pvar Clock = xdc.useModule('ti.sysbios.knl.Clock');. h! r; S7 H4 W% P9 \- j
Timer.timerSettings[1].master = true;8 x! w5 P2 e* z3 F1 K/ y
Timer.defaultHalf = Timer.Half_LOWER;( b5 E3 f; V, r# R: i: n: I
Clock.timerId = 1;
6 c3 \" t7 p2 B) q$ L
: a) j" g& I3 j$ L$ ^( z
3 @1 g6 u" G4 ], r, {/*
% ~/ o9 }7 r" F *  ======== Miscellaneous Configuration ========- j7 u0 ?1 R5 b; s. m! M1 f* U
*/
: G. I5 O& k4 h+ {7 o& I" j7 |
( _6 ~7 U5 d2 m0 k/* set default diags mask */
4 |/ }% F' J# @  ~3 z' |0 Jvar Diags = xdc.useModule('xdc.runtime.Diags');/ I- A) _% D4 L1 f' n7 S
var Defaults = xdc.useModule('xdc.runtime.Defaults');
; u3 n$ d) V7 w. l  x, u* ^
# h, x; K# X4 g3 F/ A- E, g' UDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
4 e, `" D; b4 ~3 EDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
6 L, T  P% K5 Y. p) iDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
$ `7 p* B. o' @  P+ m6 l3 u2 J* |Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
" x/ S- c' M6 a- I7 }  MDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */2 [3 _  t! c+ }( m& }
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
: m; x- i8 T1 Y8 oDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
% B0 T5 l! i% S+ M2 g, T: v; YDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;- d9 ?/ P" i0 z5 g( d+ v; N
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
# U& j+ V  ?( m0 DDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;5 w* C- l2 Z$ s: s
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;* z: R% `1 ~2 \  H6 m
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
! U2 h- z( S" }3 ODefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;/ n4 b4 Z: k- s, f' q- x9 @
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
, p% c9 L: \  ]0 b3 X: a" m( R  ~* ~
/* override diags mask for selected modules */
% n* g9 @8 }5 m" b  x& \xdc.useModule('xdc.runtime.Main');0 J+ Y- J5 P3 U% t/ j
Diags.setMaskMeta(
7 ?) ^. ~" t, `3 C5 u) V    "xdc.runtime.Main",7 s1 Q& ]4 J; X' x5 |
    Diags.ENTRY | Diags.EXIT | Diags.INFO,% U9 H" C, F( _! B  ^0 g
    Diags.RUNTIME_ON- V8 w% w. d- {8 [6 j! |! h+ J
);  r" u! ^" N$ q! }  I- N; u% ^
) @! M; v& U+ t4 h
var Registry = xdc.useModule('xdc.runtime.Registry');
" H3 [% q, d! T; W; g$ W0 ~Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
, M! b1 P6 _1 {* t) L5 CRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
" w- d# B9 n0 X) N! B% I, y4 yRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;2 Y  e) i' R$ \* U, p0 Z
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
3 D1 v& r* H1 V$ `8 W
! I% Z8 }  F- j% ~1 p+ u& ^2 g/* create a logger instance */, b% p) R; a5 G8 k0 C3 t
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
+ S; s8 c; Q/ k% _9 B9 @var loggerBufP = new LoggerBuf.Params();
- G3 x3 h; A' c0 lloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */% N- E% `- X$ ]9 P7 \& C
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
0 ]$ B+ r9 I) m. D( n/ I' M8 p" d, |( x" v" u
var appLogger = LoggerBuf.create(loggerBufP);
  O: G+ \! E# w) n% kappLogger.instance.name = "AppLog_Core1";" y* |: j6 f+ q5 w
Defaults.common$.logger = appLogger;
1 k! n  C+ h; j4 i* q! h0 s& O; aMemory.defaultHeapSize = 0x8192;   
$ `( j9 S7 J1 s+ q8 T, NIdle.idleFxns[0] = "&LEDStatus";- h! r- h# n; w* u7 Q: d
Cache.initSize.l2Size = Cache.L2Size_32K;" Q9 z" ]' `2 Q

, p# w; g: j& v8 p' d$ V' f, q
回复 支持 反对

使用道具 举报

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 */
: w5 t; t  z. m! U  s. svar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');) r8 }3 C6 `1 a3 T9 _' t8 J& }
var heapMemParams = new HeapMem.Params();
: C0 O- J  o, X7 n! C& fheapMemParams.size = 0x4000;
9 Z$ ~9 _) U: s8 C( }2 e3 U# u# X( q& l- c7 M( }
var Memory = xdc.useModule('xdc.runtime.Memory');, G3 _: S  j  m' w4 z  x
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
7 _& J: b2 C3 V4 \" t* Y$ a. S/ Q" ?* `% k! _7 q% u
我大约calloc  每次共计大小为5K*16bits,  L* k9 N2 [& b7 K
而默认配置才0x4000、需要改大。
8 C  m* d& A$ Z# A. r) W# |7 n+ j" N+ Y  O: ^- D5 z) k1 Y
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */6 W  P; v/ V; [
Program.heap = 0;
( V' J  h: X1 ~; ]Program.argSize = 100;  /* minimum size */$ n% S  h' @4 H
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-6 22:10 , Processed in 0.041997 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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