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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
* P9 j* a7 ]0 p8 u; x$ o
9 o' U8 k: @- R4 H    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256/ ?2 m+ B$ M0 k2 i: H5 v* d& e

2 C9 K$ j) Y; q8 B; {7 X% V其他程序段。。。。。
- q# [% Z! B; [4 u7 ~5 B2 |/ ^ 8 @/ C$ K. |$ e/ Z4 ~
   free(x_d);
* S9 V3 m: J+ M% w' a3 Z. l% q; B2 @# o2 o: x6 y1 C4 I
使用DSP侧单独调试功能,验证动态申请没有问题,
8 E: P' x5 S% {" \2 `5 f3 E) a8 ^: w* z) ]! U: F( m7 b
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。! B/ F7 K$ f1 c

8 e) d, B: {4 n' T# w! L( F! p1 R, i) S% P- |$ D% l; Y7 y
$ V6 g: q8 h: U

/ P" d7 K' I7 H' l' p
# V  X4 f9 r% y7 i9 ?" J1 f  [1 W! b
' X: p, q' j8 k
3 @' ^# y$ j3 t( r
0 L# w4 c6 D: U' J: S) O4 ?' x  g2 r% P& d1 `# Y% U+ E! Y
% X$ c7 A2 l5 ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
2 k7 b( R1 u4 R/ ]我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
9 c. I9 }3 W+ `(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
3 v( _% A7 r7 I6 N9 K) R$ ?

3 `% Y; t$ ?! D. Q是不是需要在DSP.CFG中进行配置! @* v6 P6 j$ y+ A: z
我现在的配置为
1 K/ E' C# w  R5 j4 N  A! }2 P
/*6 ?; Q; @1 v$ @7 U
*  ======== Operating System Configuration ========
9 r8 R1 Z- E& c% r$ o0 `5 t */
  A: L, [; T2 j* k9 U1 v: _) g& Y; X7 S3 v" e2 `
/* no rts heap */: v9 e1 }3 c1 s( k5 S
Program.heap = 0;- x, ~. y4 a# t
Program.argSize = 100;  /* minimum size */
2 H6 i& i5 z" c" z; L! ZProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大( _. ~3 O2 M+ [' z9 P
2 T2 C( H! V: h3 m4 X
/* create a default heap */
% a7 ?0 G0 R- m0 P' ]) C! T  T  zvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
- @: \1 b/ c+ q, b" L- U3 R' _var heapMemParams = new HeapMem.Params();# N" ?8 O/ w+ J9 _7 y
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大8 ~* ~& }. P7 B9 U' D$ T" ]7 Y
% E, p( M; s: Z' `% @$ ]0 D" @
var Memory = xdc.useModule('xdc.runtime.Memory');
7 D, _# q6 y; Z7 v4 dMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
) Q6 G7 j" h# h; s; r( }9 }, T8 `3 v1 ?& [5 {; Y6 q
/* configure System module */0 w* \" U6 C, U
var SysMin = xdc.useModule('xdc.runtime.SysMin');
, S% k' c0 j( `6 L; ?SysMin.bufSize = 0x1000;' [" T9 L( p. p6 w' ?; C3 e1 j; B
SysMin.flushAtExit = false;
  c9 [: U+ k/ g$ w5 m. b8 M- J# Z
# h: o7 f9 y) P+ lvar System = xdc.useModule('xdc.runtime.System');& ?- o4 V- ]2 B7 K! @! O; B
System.SupportProxy = SysMin;
9 W9 y' e/ D( K- V9 E- I! _0 T5 f# x" _; m" t+ r/ i! O
/* configure SysBios to use the lower half of Timer 1 */! m, F2 Y1 U/ Z5 L9 w. I1 b
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
( O& Y6 w" _& B* h7 w4 h# |var Clock = xdc.useModule('ti.sysbios.knl.Clock');6 N% W6 e4 ]. j& M- m
Timer.timerSettings[1].master = true;
! R/ H7 ]/ p* z" y) B! |6 a  UTimer.defaultHalf = Timer.Half_LOWER;
- J2 `! u* G( N  Z2 OClock.timerId = 1;; J0 z0 z6 }1 l; C5 w
* V  X- \7 R& m+ P" \/ A+ o/ @: B
/ A1 i% a; w6 g5 T$ z6 \) m# b7 H
/*
+ c) p1 L% Q' i8 U6 B" n *  ======== Miscellaneous Configuration ========3 c3 R3 C# d' T8 C% A0 S
*/
5 r1 E- f8 b4 p( Z) Q7 T& T9 g
+ l" K5 a5 s5 r- ~9 o/* set default diags mask */2 g- N4 B/ E) B5 U5 {6 ?
var Diags = xdc.useModule('xdc.runtime.Diags');
+ [; P' r" S4 j0 s$ A0 g1 A5 Tvar Defaults = xdc.useModule('xdc.runtime.Defaults');! f2 [: q8 D% a# H/ u

" j. H, ?' P( F& QDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
1 x+ V( m  |! f6 f& |' U6 uDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;6 \# A/ c% d$ U3 x6 O. k8 ^
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;! ?0 w  ?. Q1 H3 K
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */) B; B/ l* h! J9 d
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */3 H8 e$ O7 L( v6 R6 p8 K
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
& q9 C" e# h. \6 m; l/ iDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;9 n- F" u$ g% e
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;: Z9 }9 t' }+ U: k/ Z
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
3 I. O) o6 S2 e: [( Q( R# {: jDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;8 Z/ I" d, h1 q
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;: t7 J2 B6 B7 U4 }0 T7 X
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;  e* \& u0 s" o% G
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;' G5 U0 D3 x0 t7 f% `3 L8 C
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
/ B' \' Q& P2 E0 z
0 e" Y8 P8 w5 I9 ]/ s7 V/* override diags mask for selected modules */
3 [% O; I" c, Z8 [2 ~+ e3 y; ^/ ?xdc.useModule('xdc.runtime.Main');: r& e, d9 L' n8 ^6 W
Diags.setMaskMeta(: N5 m8 T6 p0 C! v
    "xdc.runtime.Main",, F$ K  \* {: e& p3 d
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
; g* v2 T0 @' S8 [  q4 ~    Diags.RUNTIME_ON
( `& p; k, c7 R2 k( a1 o);
- {) J, \/ o$ P; r6 P
4 m1 [% {6 J6 H' m. U( G9 A+ `var Registry = xdc.useModule('xdc.runtime.Registry');. A0 o1 C0 X* e+ k  K
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
" F3 P5 m/ Q$ Z- Z( u- Y) Y( oRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;; I$ A  y# U3 \5 x$ B; E) e( }
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;) k- V5 j! b' V* k5 q+ P6 z1 U
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;# i: [, j# g1 Y# ?& P
: I' ]* s) ?! L) u! G
/* create a logger instance */
9 a  n: U0 [0 D) V) E( {& w9 F' Nvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
1 R% m  k, I8 M& |/ U: a4 I4 nvar loggerBufP = new LoggerBuf.Params();
6 [% s* P; w* }7 ~loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */! O2 T. [: Q8 m8 H( O1 A
loggerBufP.bufType = LoggerBuf.BufType_FIXED;5 y. H5 K! j4 i1 V- z% |

; R8 f3 ]. Z, p3 H2 Yvar appLogger = LoggerBuf.create(loggerBufP);( s6 A, c: c* S/ A2 f9 H: W
appLogger.instance.name = "AppLog_Core1";
" T: C5 M/ G1 F9 g. L- JDefaults.common$.logger = appLogger;5 \( e/ ]( ?) t" [
Memory.defaultHeapSize = 0x8192;    5 U7 q6 z6 k) Q3 u' @6 N1 ~
Idle.idleFxns[0] = "&LEDStatus";
3 `( I4 r; R, n+ R* L/ XCache.initSize.l2Size = Cache.L2Size_32K;
) M$ o9 [  {# _' r# ]" J! U( P/ C: \, b2 r
回复 支持 反对

使用道具 举报

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 */
& q8 M: J* |! |var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');/ T2 a* R( R  p( A7 h- Y- Z
var heapMemParams = new HeapMem.Params();. r& ]$ q- ?0 R2 p% g( |' ]
heapMemParams.size = 0x4000;
8 y( `8 `+ F; T' S! }! Z$ ^8 t2 r& [# l( }8 h- h, {
var Memory = xdc.useModule('xdc.runtime.Memory');: s& p; o. ^' A7 y' V2 G. ?
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
( [1 `6 c* Z4 R* S4 p5 }) X" R+ m0 ?9 N( i$ `
我大约calloc  每次共计大小为5K*16bits,
3 B- k5 \9 F# a2 q6 f# Z而默认配置才0x4000、需要改大。% I" f- D4 ^9 g  O" t

$ R  w3 @2 y$ W9 x$ k& X+ T
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
6 O2 \$ l' Y- K4 o3 k4 _Program.heap = 0;' H5 D5 a, S9 J( F. n
Program.argSize = 100;  /* minimum size */" [/ v! k: B8 g1 V
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-2 02:43 , Processed in 0.394563 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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