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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构) ]: g& W) j& M# b$ Y0 `6 }
. y6 z/ A, N1 X: w6 v- I+ m+ T) ~
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256  K% I8 G2 [/ V4 F

, c' t8 y- [% l* Y$ Q5 j其他程序段。。。。。# K7 v0 ?* n9 Q  l
- J' E7 d6 r: K, i( g% E
   free(x_d);" D% W; S* a! L

+ x. G1 s: \+ l, _/ V0 x; |使用DSP侧单独调试功能,验证动态申请没有问题,3 }4 q/ Q  O. Q& E
) y* K( W( R4 f4 ^5 M. ^) m
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。% L5 z4 H; _4 e- v- `
5 e, y- m2 _& E( d4 Y
: b* e5 s4 r4 A) {. c' `4 S

8 C; u* z4 v* J' K' b$ X! l: w
' J* P; d! v8 C0 A( w# r
' ]) ~  u3 c) K! ~! Y) d7 z! Z$ l8 m% b  X
) t: }& x4 l8 Z

2 o  V0 ^" ?0 D+ D3 T
5 \5 @3 Z% @$ I0 u
9 w! r" f& J7 v" B' M
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
6 G& ]; Q% T. R9 m6 b' b! ]我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下( U0 u* q  B* P+ X3 F
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)+ G% a, d- M0 S- \

/ B) F) J9 g; E1 i5 ]9 H; H8 ~- S是不是需要在DSP.CFG中进行配置- _' k; ~# W5 @; j3 J2 n
我现在的配置为$ b6 G, d5 T( t  G
) ~, x8 b( J; I' L9 U' q) a
/*, I' M! s0 e3 Z$ [; O
*  ======== Operating System Configuration ========
- {2 S' ?8 R% C' I1 k# \ */; ?; j6 W" I( m1 H: \

; H4 |9 S( b3 y; b0 Y/* no rts heap */
8 J# f2 _# @) T& O4 `Program.heap = 0;/ w& F, c" C, j  [: Q
Program.argSize = 100;  /* minimum size */
8 r; Y" d9 s* u5 X/ k$ AProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大  o) W( O6 @+ j4 y+ P6 n: i
. i0 D9 ]$ s, _
/* create a default heap */
% K5 l+ O9 A4 u5 e* V3 b! G% R% Cvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');2 }- I3 @  ]8 q' `
var heapMemParams = new HeapMem.Params();6 M3 ^( J( V* ]% N9 D2 S! R
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
, x2 O- w7 b- Y
4 W6 `) b! _; |6 e; f, g
var Memory = xdc.useModule('xdc.runtime.Memory');
4 S0 d$ I  X6 T8 T# k" nMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
# P, e( |0 b9 P" v1 ^: B) J$ D2 }1 |: C  A( X
/* configure System module */3 Y! \6 v8 Q) S& W5 V2 o
var SysMin = xdc.useModule('xdc.runtime.SysMin');
9 ~' w. O6 ]5 Y6 c. \6 C; ?8 Z, hSysMin.bufSize = 0x1000;
  L) U3 d( U% G0 n2 ]8 R" i( _SysMin.flushAtExit = false;* P6 Z- h( {' v  u& G- A& K% c

0 _5 N; B, b0 v# K/ }9 Q" [/ Pvar System = xdc.useModule('xdc.runtime.System');. D% M  r5 w  A% H
System.SupportProxy = SysMin;! j. z: c  V- {1 j3 ?4 |
0 J! Z; i6 o( l; X1 K7 j" c
/* configure SysBios to use the lower half of Timer 1 */3 l0 d- @! z9 c6 i
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');7 ~' C( j% @/ F
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
7 r/ p6 {( A% kTimer.timerSettings[1].master = true;% K, L7 v2 j4 Y8 N7 z
Timer.defaultHalf = Timer.Half_LOWER;* x& b* W9 `' ~4 l8 t; Q5 L
Clock.timerId = 1;8 ?: @6 F* n& I5 q

, B& m8 |7 P, u+ l- T7 S0 t; ~" B+ y$ y
/*5 h7 D+ r2 L/ Z
*  ======== Miscellaneous Configuration ========
7 \1 @' X, H' y4 k! Y */
: w$ K3 d  B, E: x% I5 a
9 O$ M0 C* [9 s: u  J/* set default diags mask */' I- H7 j# |: d7 O' R2 ^
var Diags = xdc.useModule('xdc.runtime.Diags');% H, Q- z3 Q3 D4 |! s
var Defaults = xdc.useModule('xdc.runtime.Defaults');# ^4 E, j8 k, k7 B' W1 C

: l7 W" d- [% d0 u  tDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;' q7 D5 V; w* M1 W3 W
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
2 Z7 N  ]1 B7 v: R- P: `Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
! O. e; @- N' Q/ rDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
8 C: n5 }3 l: PDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
* U7 B: }, }: f1 HDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;2 X. n/ e" ~7 Y) t7 C. \2 L- d
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
8 E: {& c+ f+ s5 @5 m  P! s, t& wDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
- L4 \5 d7 g- M. Q" c  fDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
0 x8 d: o) B- B- N* @Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;1 H" m3 L) T  {! E
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
9 U3 A: g2 Y: zDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;2 [; p$ }$ k. {- Y$ V* h
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
9 |0 F$ ~* C8 g0 c1 xDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;, R4 A) G9 u3 h. m! W- \6 {' s

' p! |$ v3 q) M! w# [0 [9 \/* override diags mask for selected modules */
5 g3 H+ G% Q. [2 Exdc.useModule('xdc.runtime.Main');
) K. q4 @& J! O4 z% |) z( R) VDiags.setMaskMeta(% F1 ?' a8 v# @* R& _2 G
    "xdc.runtime.Main",6 V6 r9 C, A1 e+ \6 F4 u# I
    Diags.ENTRY | Diags.EXIT | Diags.INFO,$ _: |6 m- h( F$ U" q/ o8 f0 P7 d- ~- ]
    Diags.RUNTIME_ON
* o4 n2 g$ v5 u3 j1 L);: D( Z& ?( a. m8 _1 j0 u

( Z7 ]' j% ?! kvar Registry = xdc.useModule('xdc.runtime.Registry');- t* M. M" }( |' f9 x
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
. b; K* W$ u# _" r8 SRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;! |0 P' v. Q+ e
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;, n: h+ V; @7 t& f" T' ^
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
$ ?8 x2 p. ~4 v: _( p8 O3 U" m4 _% ?
/* create a logger instance */
6 X$ m5 u- g  q: k; H+ A" Q: O; Nvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
5 t; L. O5 E, t  evar loggerBufP = new LoggerBuf.Params();
' e: \  X# {4 S4 \! x8 eloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory *// [7 d( I) p! A4 f3 F) N8 f0 q* a
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
# c- K+ u9 U* ]8 R6 R/ Y  h
2 ?* V' J4 k) [9 G2 q6 Xvar appLogger = LoggerBuf.create(loggerBufP);8 D& H$ a- _! }( I7 u+ [
appLogger.instance.name = "AppLog_Core1";
, H# A4 X+ [  v0 mDefaults.common$.logger = appLogger;
. r: q5 v3 X0 R; |5 s1 p3 WMemory.defaultHeapSize = 0x8192;   
6 }9 f, K' L" kIdle.idleFxns[0] = "&LEDStatus";
. h7 }4 }' h2 z/ G8 z$ wCache.initSize.l2Size = Cache.L2Size_32K;
% R8 w. Y: v+ W) E0 Z$ [6 k. j; u
回复 支持 反对

使用道具 举报

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 */9 E: A1 W- I+ C! d$ w' i1 {1 {2 o
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
( f' s7 _% Z% P4 E% p4 {+ ~- G: evar heapMemParams = new HeapMem.Params();
4 v: C- _' z( E3 l5 [heapMemParams.size = 0x4000;
2 \0 q4 V4 x  ]0 ?$ K8 G4 W1 r8 g) a# F  \2 V
var Memory = xdc.useModule('xdc.runtime.Memory');8 ]; ~2 l  x1 w" `8 a
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);1 u% y" Q8 t; F8 p. Y

% e( m/ s; y5 M% ]我大约calloc  每次共计大小为5K*16bits,) ~$ ~( R6 D5 T' y6 \
而默认配置才0x4000、需要改大。% r( ^' ?# j" F3 t  r

+ q$ U% s  S. ^" F
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
8 p0 [# H' I3 f- \( ^5 B, T: cProgram.heap = 0;+ R' P6 ~2 C, R6 T( |
Program.argSize = 100;  /* minimum size */
6 ]: Y. G6 S- g& M3 v% v; |7 [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-5 12:13 , Processed in 0.049372 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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