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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构) y  J' m8 M& x# [& C9 _+ \! z
) A* w$ ]5 t2 S( x0 a& X- d! D( d
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
3 O2 s' E, @4 c
/ E- R! J; G9 M" w其他程序段。。。。。! P( q9 N7 o0 ^3 \9 f
0 {: J/ r4 C, \+ d" }
   free(x_d);
6 v- ^& {- u& q0 c3 `0 B8 o2 N. Y3 F4 u0 r) v
使用DSP侧单独调试功能,验证动态申请没有问题,
6 W: l0 U: u# _' S9 R+ R) I
* q: ]% Q5 s" Q7 _3 P) q但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
( I8 ~1 P  ~, a% ]( L

) s# l: [( z: E# l1 B/ Z$ c
2 O* ?' t: |+ n3 h( V: m+ z$ P# [$ e
$ o' L9 E: U! k! N
8 d7 B# d3 I! t- p0 Z# F  i: E( M7 ^
5 r* _1 j0 h2 M+ q+ p9 M% q
1 z8 d: [# ]3 q, Q2 A

4 V5 Q6 p' S. J7 V! b3 f
1 N4 w* ~' Q- }7 l, L0 V- W3 |. v% {4 Z  Z7 ?: w
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明. g; J' ^, x1 ~9 i# a
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
; w7 V, {/ N3 o5 l* I/ Q(不过疑惑的是,为何单独DSP仿真就没有问题呢?). L' C" b4 L4 E3 k

* L8 c( n: J7 ~  e- a是不是需要在DSP.CFG中进行配置
- A: {% a- P  O& n我现在的配置为
7 S* A( q2 K, a1 X( s7 a+ l& o
3 k: Y; l! X! |3 m# s/*
* c$ U! {3 ^  j *  ======== Operating System Configuration ========- ^) H+ o% W- |2 B
*/
$ C& f4 P4 L5 O$ H
7 i, k- f/ o0 y3 `8 W+ h/* no rts heap */: V" ?# H( i, t. G* G. D7 G* r6 d, R
Program.heap = 0;- K% b1 O9 }' f! V0 A# _
Program.argSize = 100;  /* minimum size */
% J' Q, b1 O! U/ VProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
6 P3 z, L, W2 [* J- }  x/ }% Q( ~1 G% `; E/ F$ @2 Q2 F2 B
/* create a default heap */
$ w; x' @6 g$ G) C5 Evar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');9 Z4 b: D% [# ~- z8 ?& T' Q
var heapMemParams = new HeapMem.Params();* S3 a  K% t$ h  ^7 A9 q+ f
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
1 a5 g5 w6 f0 X! l) K9 R, }$ V* F. o. @* \
var Memory = xdc.useModule('xdc.runtime.Memory');
" w+ N$ s0 d. t1 e  f! oMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
( h9 e/ ]0 C9 Y6 e& C6 S
2 P% ^* `0 {) U! L5 a/* configure System module */
7 ~. O5 J+ X' a0 m1 X9 ivar SysMin = xdc.useModule('xdc.runtime.SysMin');
  _$ D0 y: x/ g  w3 B" \* oSysMin.bufSize = 0x1000;8 H* [1 K8 c+ e; u# c! X( t  I
SysMin.flushAtExit = false;
2 E% }, m" m7 |; {7 p3 D" H1 s" s; A0 o2 F7 B
var System = xdc.useModule('xdc.runtime.System');
2 l' x  s3 X+ H8 C6 [8 f1 \* `System.SupportProxy = SysMin;0 {# i$ N4 `6 I. I9 ]

3 _7 q: \; Q4 s6 c8 P' T/* configure SysBios to use the lower half of Timer 1 */
9 _# M; @  L" w9 c% W. ~8 Kvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');9 c/ \9 o% `. A4 }8 o$ n
var Clock = xdc.useModule('ti.sysbios.knl.Clock');8 t' a% Y, _% K* g! r
Timer.timerSettings[1].master = true;2 b9 q5 C- O4 t
Timer.defaultHalf = Timer.Half_LOWER;' H8 q' l1 u/ V6 \; e- n
Clock.timerId = 1;
) Z/ M# s& }7 D8 d, c! T! \0 N" u; w/ }; ^+ }3 k" n2 Q
* h: x5 M% V1 B/ L
/*
% F  Y5 ?& D5 s# \- Q! Q8 W" c" Q) Z *  ======== Miscellaneous Configuration ========
( n8 `& G* a0 a7 o+ B */
. _% [0 R/ d/ |7 q# s  S( P6 V0 v  {
/* set default diags mask */
# s  U+ F  b% \$ ^4 l# e% rvar Diags = xdc.useModule('xdc.runtime.Diags');
9 z' W8 {7 U) [var Defaults = xdc.useModule('xdc.runtime.Defaults');3 F' [& q- d0 F5 X& u: W

( V6 ^7 d; I$ n' eDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;3 G, b* u! ~5 b" z" S) U7 h0 v
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;2 t) W, Y! }1 |. q$ z6 Y
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
  ?% r8 ^/ X0 ~6 ?+ _) R" wDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */+ E5 E# t0 [+ |! `3 v# g% g
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */) M4 _" c# R, D( U2 D! y
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
5 L* D& F: H) x# {; W6 `4 TDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;) y8 \  Q0 j& i  W+ P+ Z
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;# e5 O% L* y+ B- r2 c4 u3 e
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;2 D8 N' k1 T0 _* q1 ~. M
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
* E4 {2 h- A4 H3 u" |) d9 t  Z" WDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
' p* ~9 a1 v: H6 |/ O& lDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
/ j7 D, `. |( L4 U4 k9 W+ U# j, dDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
3 w( O, C# O4 a: E7 X* Y7 wDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;3 ]3 ^$ j/ z! _- B  c1 k5 \

, b0 d6 u% d: `) T+ d% ^) I/* override diags mask for selected modules */
2 a6 U3 P$ Z# Q6 L  n5 b# D# z; gxdc.useModule('xdc.runtime.Main');
: }' k% m! Z! gDiags.setMaskMeta(8 E+ a4 s/ x. h3 W, Z8 ~
    "xdc.runtime.Main",
' X- }: Y8 y- }" {. }' w    Diags.ENTRY | Diags.EXIT | Diags.INFO,+ n! ?# C  x# V& ~$ M
    Diags.RUNTIME_ON) |* Y8 A, k+ ?8 Y; `! g( Y. M
);
9 J0 f( V- N# a
( r" k( G3 }4 |' dvar Registry = xdc.useModule('xdc.runtime.Registry');& O7 R; o$ R1 h
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
3 e' m3 B+ m- c2 g& wRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
1 R: `" r: w2 V, W4 gRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;( R2 j2 l6 M/ n' f0 K" c
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;8 B' L3 w+ [1 L% }+ S1 A# ^+ E3 ?
* b: H1 Y4 f& `. B+ m8 r
/* create a logger instance */
/ P9 \3 a4 h3 I1 v+ vvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');* U  b7 S  Y( q; P
var loggerBufP = new LoggerBuf.Params();
2 a' E* G2 C( [7 A0 x, ?) FloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */- S4 l4 d5 s/ u4 K' g! Z
loggerBufP.bufType = LoggerBuf.BufType_FIXED;" o! d: b9 H5 B% h

  h# g6 j8 D( f$ x1 gvar appLogger = LoggerBuf.create(loggerBufP);
9 D) n3 L$ p3 u4 J9 N' x6 C! tappLogger.instance.name = "AppLog_Core1";; w% B  Q7 F1 x6 l- [" f
Defaults.common$.logger = appLogger;
6 w8 z; q! }( k' e  j) y! wMemory.defaultHeapSize = 0x8192;    / T" T" F$ Z+ ], t& X' g
Idle.idleFxns[0] = "&LEDStatus";
; u! f1 t6 u7 O! L: K2 R7 v' _Cache.initSize.l2Size = Cache.L2Size_32K;8 q$ I  y" \- z/ ]- {) A! T
6 F# T2 ]1 R$ s3 L8 w5 ~
回复 支持 反对

使用道具 举报

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 */' T2 I5 D( _3 H& e0 X  C: H: L. n3 [
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
3 ~. q% J6 K# L! L! fvar heapMemParams = new HeapMem.Params();
, W% |& N% |5 N3 nheapMemParams.size = 0x4000;
/ U' ^9 R/ I8 ]3 g( ^$ r2 _& e/ |, w) Q0 o
var Memory = xdc.useModule('xdc.runtime.Memory');
2 T; k8 X. |( r! W7 HMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
' b6 @9 l9 j/ Z' ]
( v" x( Y( `) s1 R! m: j* g: C+ v我大约calloc  每次共计大小为5K*16bits,8 v% @  g0 g/ k+ H. c% t; m
而默认配置才0x4000、需要改大。' b8 {# e( r6 Z- H( `
) h, U# E  Z- y9 k3 R. F5 D
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
7 W( x6 n+ M- Q. ]/ hProgram.heap = 0;
- V5 q: U( {/ d& AProgram.argSize = 100;  /* minimum size */' T; m+ _2 s& I" Y# M! _
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-4 18:13 , Processed in 0.042453 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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