关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构% A5 s+ P3 A5 b/ j2 u$ O/ m% U' j
6 K7 @) F! O) p. {4 ~% B
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2561 r* q6 w1 Q0 ?% `3 M7 ?: i( @

& `3 w& I& \3 P4 U其他程序段。。。。。
' I! F8 h' Z8 G( [1 C- Y7 T * g8 t# h. @; G. z; Q
   free(x_d);) B+ G0 s8 p; X/ Z- N

: D& E- ?. ]0 O0 F使用DSP侧单独调试功能,验证动态申请没有问题,
0 g, G, j% S5 M2 {
" ~5 |1 `/ @; p- w/ R% T# s但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
  k/ k4 l, C% ~' d& ^# c1 u

# ]- M; M) k# k7 s% }3 o/ H3 i

5 l: I# Q3 N7 I0 @: f: x: ?7 L: E& y) d. U. L4 C: T
3 n+ M3 R/ r) a, h
, m# S' T3 p4 b7 E6 K6 s

! F; `% }: O+ h  ?  o$ T
$ R$ m/ @$ U! ^% H" N) J' `+ I) H( `# G8 N
  _; F* u+ m1 ?9 E3 s
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
7 W" R: @) b* k' T+ d3 w% T我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
: _( L( x: |" `" V  c* v(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
' A4 s9 L; F/ M6 k6 S
) N1 f4 j5 r- X, D8 ]" N# {2 |3 o
是不是需要在DSP.CFG中进行配置5 r" p% Y! P$ o" r9 f
我现在的配置为
- `- e- j) W$ M/ K, |
( H% C$ e$ R( f+ @8 ]$ @/ t/*+ {8 a& Q8 D9 ]  J
*  ======== Operating System Configuration ========3 c/ w  ]/ q6 g& b' t
*/: l% m* I5 R5 K3 n3 l1 B2 ^
, W# g4 A: X' _3 [  B$ C
/* no rts heap */
/ T# C0 a. d9 [% G& Z5 V) L9 UProgram.heap = 0;
7 K; o7 R; ?. X9 G& h" ^- I' }6 ZProgram.argSize = 100;  /* minimum size */( O2 |6 I, r. R1 v2 I! [
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大$ M4 E% ~2 V; @) b7 i$ r
! I3 g6 z8 B0 M
/* create a default heap */: z" O# G- U0 f" m  c/ r& s
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');, f) M( d/ j; c& o3 a6 W5 \
var heapMemParams = new HeapMem.Params();
8 k' o) \' O6 i( GheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
9 M: L( G  G, y' s
; b; k) _2 F- T5 {1 `. s  v. }+ R
var Memory = xdc.useModule('xdc.runtime.Memory');
2 H' ^, {0 V  v* j3 vMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
$ t1 L+ a* ?+ G1 L" F* l7 c$ j/ g+ w- P! d# y
/* configure System module */
: `' ^! \' ]; ]% }. c* H- b" Cvar SysMin = xdc.useModule('xdc.runtime.SysMin');: `& O; I+ R$ F* R/ d5 s6 ]5 Q# I
SysMin.bufSize = 0x1000;# K7 s1 N" |! m( }
SysMin.flushAtExit = false;
) B7 c0 A1 s" k
- s; r; i4 H; o5 Bvar System = xdc.useModule('xdc.runtime.System');
4 g6 a: ]$ Z- j* |! DSystem.SupportProxy = SysMin;! V- t4 _  x8 p3 F7 R8 h

" K( k$ N! E5 u$ F6 S/* configure SysBios to use the lower half of Timer 1 */0 K: a  L& Y/ H/ O$ f
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
: X# o( v9 ?' fvar Clock = xdc.useModule('ti.sysbios.knl.Clock');  P2 Z  v8 o9 \0 Y
Timer.timerSettings[1].master = true;/ @4 e  B0 u  k( d
Timer.defaultHalf = Timer.Half_LOWER;, T4 }3 P7 z0 Q6 r7 m4 g
Clock.timerId = 1;
3 R8 V* m% _3 C8 C  w9 i# C- N
+ m! J- s* Q1 h2 N3 i' z1 V
% ?  W( ~) @; E: C7 z" j3 {/*9 S9 i- {- P3 J; q' \
*  ======== Miscellaneous Configuration ========# n. p+ q0 O% [
*/6 G- G$ {6 n4 M% n/ l& ]* a. \' \

5 P. b, W1 V6 k# m- ], D2 f2 s6 y/* set default diags mask */( U* h* x) Q, K; x( A$ m
var Diags = xdc.useModule('xdc.runtime.Diags');- u2 J3 P* e$ Y/ W" o
var Defaults = xdc.useModule('xdc.runtime.Defaults');9 x( `9 v# S* g  Q
4 y5 |3 u& k& c/ H
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
8 j  V9 Z" {4 ]5 \" H2 J% }" BDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;  R1 w- h7 U; v' q7 h1 D
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;# {; j# R+ a" y) A
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */( h' E7 _5 L! V' s# c9 Y" f
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
6 R- y: X$ v, e4 f( g- Q( d4 FDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;9 D! [' R5 V8 m! X+ }( F
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;+ S; z1 s4 A8 P, |0 B
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;* A% S2 V& H9 _8 v, C
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
6 r7 ?9 m0 i8 N* kDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
7 V; f/ J! }$ E: D& i( p  N9 TDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;8 E3 t' i. i$ U
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
: y2 Y4 F/ S4 N8 ~, P( ?- BDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;1 j  ^& a: L" E. z  p" ]1 o
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;2 T! Z2 E6 ]* M  ]& j
  e* n3 J$ r  d! p
/* override diags mask for selected modules */
, s$ x' w* J- s' M7 Cxdc.useModule('xdc.runtime.Main');3 K+ V  h) S0 R5 P" m
Diags.setMaskMeta(
+ A3 S' b( d3 |/ B    "xdc.runtime.Main",& y% m4 j. n, B
    Diags.ENTRY | Diags.EXIT | Diags.INFO,0 j1 m/ h9 O* ?' O
    Diags.RUNTIME_ON
1 A$ Z  P: Y: C6 o);
$ V  t' C& ?9 _7 j' B; W3 Z* O2 p- R6 M
var Registry = xdc.useModule('xdc.runtime.Registry');
' e: Y) _% [/ i( FRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;, Q$ ]6 S! M! T! m' T9 _. u3 \
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;: t8 g* H# p' H$ q
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;! W4 V2 z+ L! _- v
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;* n2 S8 M4 [8 X/ _9 D( z+ V

" s1 H/ a: t$ w6 x, T3 j1 W/* create a logger instance */9 [" q1 I: A1 Q, s' Y
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
4 C2 G( U- ]/ b  a+ n9 T( ~var loggerBufP = new LoggerBuf.Params();
1 X$ g0 W7 o( @# _) l% N, H- F0 Q( D8 XloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */- v. g* I3 \5 }) y. r1 i
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
" R3 [5 o$ ~& N1 J9 A
( Z' o+ V) H( H; P. f! `/ gvar appLogger = LoggerBuf.create(loggerBufP);
; _4 `+ ^; b& Q* C1 o0 u: R# JappLogger.instance.name = "AppLog_Core1";
' Q" [& N3 v* h+ bDefaults.common$.logger = appLogger;
$ {8 K) f4 H. F# ^  H% QMemory.defaultHeapSize = 0x8192;    - v% ~. b/ D. h* b/ i9 l( g. i+ d
Idle.idleFxns[0] = "&LEDStatus";
# o0 K- G! a9 d5 v: {5 UCache.initSize.l2Size = Cache.L2Size_32K;$ y4 {7 k4 o2 H) S0 A4 B3 t
$ \* D3 N4 n- 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 */
: K% z% m% P- `. K: ?var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
4 B9 T* g2 Q1 M/ yvar heapMemParams = new HeapMem.Params();
) J  |. v) T7 B) V! L7 GheapMemParams.size = 0x4000;4 X. W5 \0 r0 e% o: q
' m# Y7 k5 q. P' D
var Memory = xdc.useModule('xdc.runtime.Memory');2 u2 X0 z+ X& j0 V
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);/ u6 @# l/ D3 ^. A
. c4 C* T- G2 F8 \; C4 O
我大约calloc  每次共计大小为5K*16bits,8 f7 p8 U4 j4 B% `: ?0 X
而默认配置才0x4000、需要改大。
8 R3 l. j6 b, l" ~* {* x. H; o- x9 [" I: n+ i
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
: r/ E% P3 U' cProgram.heap = 0;( [' W; b7 e# z: ~& a7 j9 w
Program.argSize = 100;  /* minimum size */3 H  K; y. m1 D  k
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-7 17:52 , Processed in 0.039774 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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