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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
( ~) C" F& O/ V/ s; X! D$ D
: [2 N. U. C. X8 H    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
7 v) m  ^& A9 d  ^1 Z' i6 T+ s8 y3 @
3 w$ r1 y8 J5 J' ]其他程序段。。。。。3 m( O: E+ q. n1 X2 m* B
8 K! T; v9 y0 i) d$ E! @2 O8 h! W
   free(x_d);0 a% j( }& {7 h
- E$ V7 _9 N5 X8 ^; Z! `; ^
使用DSP侧单独调试功能,验证动态申请没有问题,
2 z) {9 k! `( A
- w' q: }( y* l& R但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。# r, O$ ]8 Z. @3 O& ?' p" g

: d! j+ ~$ E- \/ E$ h0 N/ r, T5 _
0 Q6 t% @  j7 b
$ E+ T$ g* f' ^" m. |, m5 h9 s  C2 G* d# A8 f% P( c$ U

1 F; F7 X  x: ^, v9 Z" n0 C
- l& A" h7 X9 x" r1 m: K: T( k0 ^0 N% _$ N
  A+ g7 h% a7 V( ?2 l2 a' r
! Q# }) W% d, R8 h6 m% n' E- c

- Q; i5 l( L  Q1 c4 Y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
" o9 ^- x) [/ H3 Q/ H' n我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下# H1 R: t) m6 X- q9 ]' G* ^
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
( E* X# J# Z. I0 S  k

5 C) C. O) v( K+ e3 h是不是需要在DSP.CFG中进行配置
3 M. l% T( E; y5 I9 @我现在的配置为7 V4 d3 U; \0 O/ X0 y  x0 H. O

) R; F& Z, h* f4 L4 K! G/*
! D! J9 z2 Y7 ]6 G' Q) m* t3 j *  ======== Operating System Configuration ========3 Y3 R5 j+ f- k' N* ]/ q, y
*/
" K! f$ ^# Z" O' z% v" u; l6 A+ ]9 e
/* no rts heap */
, K8 D( R5 N- r; mProgram.heap = 0;# K$ ^- x  @; V/ j9 o9 G
Program.argSize = 100;  /* minimum size */
% p/ x* V6 E+ X: `% {# c7 ~7 A% u; j: aProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
: t0 A$ ]+ F- Y) [& T
3 z. W0 a3 O/ K" j: l/* create a default heap */
, Y) ]% S# a% Uvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');* M% T/ u: U  |. C4 X# J" r' T
var heapMemParams = new HeapMem.Params();. f8 `7 m  F: g% W, e9 P$ u# t8 V
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大* ?& T/ o- ~# _7 S

* ~) s+ ^/ @' f8 v/ S- {/ N- G' k, U& W
var Memory = xdc.useModule('xdc.runtime.Memory');& P2 v5 ], G4 B6 @) A: X
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
7 g7 Y: q7 E. _* t# v
! e1 y7 w! l: n$ R/* configure System module */; t+ |! _- x& r3 h
var SysMin = xdc.useModule('xdc.runtime.SysMin');( f  X8 B1 E8 y3 ]3 T1 a
SysMin.bufSize = 0x1000;+ {4 E: v8 k" d8 i
SysMin.flushAtExit = false;* P$ ?: d- ?0 R! ], y

. Q' L9 j" d) F6 V0 o8 uvar System = xdc.useModule('xdc.runtime.System');
; a# h( H, D$ E0 W) |' z5 j; G8 iSystem.SupportProxy = SysMin;7 s3 ~( c7 F& g5 J2 Q: f2 D

( @. u9 a( m+ ?5 F. T" [9 k* ]/* configure SysBios to use the lower half of Timer 1 */* D$ ?2 n3 T6 z. r! b5 \6 b9 t" }
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');  c8 q+ J1 b) J, E# S
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
2 ?) w: u% K5 H7 a+ u* i5 zTimer.timerSettings[1].master = true;
8 K: Y6 C+ f% `1 F: K3 ATimer.defaultHalf = Timer.Half_LOWER;
" Q  d  P+ y  }/ Y, WClock.timerId = 1;
8 m$ ?: U0 U' p1 e9 {# I- }
+ j& \6 p( K; j8 O; a$ N. I' n3 `3 ^; G
/*
. G5 U. c* t* I7 w0 \ *  ======== Miscellaneous Configuration ========
, s: O6 u1 X+ Z6 K; e& W( T2 I */8 K. C; R$ z: n% Z9 U# U% ?
+ ]' M3 y3 P! z; r+ c9 j
/* set default diags mask */0 d7 `9 m+ {* s! d6 V. [, K" B
var Diags = xdc.useModule('xdc.runtime.Diags');
6 |+ n5 s0 P2 W4 a+ \var Defaults = xdc.useModule('xdc.runtime.Defaults');; B; y- S  z# e' D
8 M4 m, F, u& O1 y4 p( d
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
5 K% Q5 k6 _- DDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
2 c# s/ s$ {/ [Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
! b0 S* z( j6 W/ A' L5 yDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */( p% b# W/ ~: a1 ?  M
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
$ j: J( ]& p! R9 jDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
; _5 x/ |6 f" [* U- }Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
- |7 m# @( y  F4 |Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;- W& ]' L- B' M
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
! r) P; Y. S5 G" Z& R0 d3 R4 x/ EDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
* Q: P$ ~& p7 W, Z/ R1 |. oDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;4 b+ v: T) Z: @- O% Q8 V5 d& G
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
. Z9 h# Q0 |, L+ V7 }; n& DDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;. |7 @1 e( E, f) S) n0 \9 q- c
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;- _& ]* Q+ e0 R2 Z4 C

, g; T/ n) M2 V/* override diags mask for selected modules */
4 J* n  G2 I; R( |4 C3 n& @+ lxdc.useModule('xdc.runtime.Main');" k8 M& ^7 c6 R: x  q
Diags.setMaskMeta(2 n5 K, T4 j* n2 H: E! w1 `
    "xdc.runtime.Main",8 Z  O( p( Y$ Q, R
    Diags.ENTRY | Diags.EXIT | Diags.INFO,' u9 B* _% w( l7 a; V
    Diags.RUNTIME_ON
  I2 ?* m1 K/ G# ?4 f: R) A);
8 |) c4 n( V/ n1 G2 X- L0 n6 t& z! m" `1 T+ W4 O/ C' o
var Registry = xdc.useModule('xdc.runtime.Registry');
& B6 y* A0 B/ A- Y$ cRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
& X; {, `4 R# |  P$ S8 \Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
! S- Z2 N- A& B: H% URegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
6 o% d1 c1 `7 bRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
/ N) ]7 q! v, o. b; @
) c% p, G7 |, @4 N, L/* create a logger instance */! C" ^" W- Z0 q3 |) R. S
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');' c* T0 C8 y" b9 a
var loggerBufP = new LoggerBuf.Params();
% Q/ O( E9 H. o: r& ologgerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */7 C0 ~7 U! i" _& _  G
loggerBufP.bufType = LoggerBuf.BufType_FIXED;( C# |2 X& G2 g
- |- P+ G7 C: \: I
var appLogger = LoggerBuf.create(loggerBufP);9 h8 U' U) W6 O1 D; W# |( z* N
appLogger.instance.name = "AppLog_Core1";
* T1 Y8 s  e1 R& M! G- O& a8 T6 dDefaults.common$.logger = appLogger;
* L0 B( X9 |8 VMemory.defaultHeapSize = 0x8192;   
9 K6 U5 |, n4 ZIdle.idleFxns[0] = "&LEDStatus";
, h! t( A/ W5 T7 M3 wCache.initSize.l2Size = Cache.L2Size_32K;
" @$ c2 I" Y' q* f0 v; ~- V% T% _; D
回复 支持 反对

使用道具 举报

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; K" Y3 U2 y7 k; o# w! A( Hvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');5 l( E# o+ |; I* J0 B( r, ^
var heapMemParams = new HeapMem.Params();3 M- p  i3 i4 i7 }5 h( l
heapMemParams.size = 0x4000;
6 t' P6 F$ W) ~! u5 O- R" M* ^. b+ x7 K: M' ?2 P
var Memory = xdc.useModule('xdc.runtime.Memory');
' ^6 j7 `  f0 I1 v! bMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
$ C7 Y2 q+ f& c* c3 I) o1 }6 w7 V1 u4 }
我大约calloc  每次共计大小为5K*16bits,
, Y2 F2 \4 Q  E5 u* k, [而默认配置才0x4000、需要改大。
5 d+ r* D! E+ o3 w
% E, s7 b5 k' y+ ~( b
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
' x3 ^2 A0 ?- b. D8 J3 Q' TProgram.heap = 0;
7 ^3 l$ b" F6 A' D( c4 fProgram.argSize = 100;  /* minimum size */* V9 L0 i. I6 c9 v* b0 T$ N
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-19 23:56 , Processed in 0.042412 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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