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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
2 u/ h- Z6 ]2 J+ ]4 }9 o
/ B5 @# f/ w, }8 M4 d    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2561 R: t8 F* _$ ^. o2 H

0 M. b8 C$ i  |1 c: Y* h其他程序段。。。。。- c* Q7 E& t1 ^  ^0 O# \

, e# k+ v3 V0 u: k. ~  ]   free(x_d);
2 w7 R# \* ^" m& F. @6 M0 E
+ X8 J4 j4 U) O2 x6 y1 t, s使用DSP侧单独调试功能,验证动态申请没有问题,
& N  _& \7 z* q1 ~+ U2 `* P4 |6 i3 P) y( a" A$ |
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
6 h4 ^, z8 A  v+ U* j+ `) m- Y
8 e% i8 N) j5 k+ t

& w' T9 p0 F) Y7 i- ~( _0 D  T7 m2 Q; l; F" b) w- t

! Q2 @- n0 t1 L8 u9 N3 M/ S2 q" t" v# T
5 @' A4 O. r0 p' Q

1 N+ A" F5 _' _6 H, x* g) g- ]; x* u( L+ ]
5 X! K) T9 h" e1 D6 y* @3 W$ I8 Z, I
3 K2 ~1 F) o2 b& y' h
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明3 v9 [& {! D8 B# f* \% T& t8 W
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下) p, J# h6 ]) W) p# l2 N
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)) M0 F& S4 P, J% ~) ]8 `8 }
  l2 V6 T. u, U& d# Y: A
是不是需要在DSP.CFG中进行配置. o' q$ B( m1 m* \! s' \! ]$ m
我现在的配置为% ^4 s1 D# o. @$ r) f
8 n8 O  e4 M) X7 o! ^$ H) o
/*) n% j, y3 B' b* W* U
*  ======== Operating System Configuration ========1 j% u2 g3 G4 U
*/
" e0 l5 ~6 \5 M+ I* m: U6 `+ Z3 P7 Q/ X
/* no rts heap */, o' k/ B7 G' T0 T8 }7 P
Program.heap = 0;: Y7 ^7 Z0 s5 g5 [3 ?& T! ]
Program.argSize = 100;  /* minimum size */" z& Z6 j: S8 m$ ^$ b5 [# N; L
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大, i9 p- x2 s$ P3 o$ S3 I* a& U

3 T& r* U# n" ^5 G' @, W; R' L( @/* create a default heap */
0 u, W, e, p7 a; d+ M: p! svar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
, U5 G+ ?5 A0 Dvar heapMemParams = new HeapMem.Params();
* T) e1 q2 ]  v! R2 t% W' K( CheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
. H) d1 B( P9 R* X- L6 q) W5 A- @7 P% j; i8 a& o5 S
var Memory = xdc.useModule('xdc.runtime.Memory');8 M7 C* o0 [4 f& ^
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
% @+ Y7 Z$ U1 h8 e9 E3 p  y/ ?6 p) \; l8 K5 p5 @& N+ z- d4 J
/* configure System module */
2 A- l1 j0 J) u  x' ^var SysMin = xdc.useModule('xdc.runtime.SysMin');8 ~, r8 t7 \9 c7 ?; g7 j# H
SysMin.bufSize = 0x1000;
$ j7 Y# e" c+ y, S& L/ e. g& CSysMin.flushAtExit = false;
6 O+ h% G% O  |; v2 l# e# S8 F: T2 u) x- U, H
var System = xdc.useModule('xdc.runtime.System');
, B3 j0 |0 W7 j- F$ S/ n( USystem.SupportProxy = SysMin;
8 g3 P- S  V" |8 N1 K2 N( m0 s
8 o* s9 d3 M4 \* e: L8 o5 e/* configure SysBios to use the lower half of Timer 1 */6 I1 S5 s6 Y: e* j1 ^
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');2 V6 B7 _- T! l: Y* }$ ~
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
& r+ T# F; c4 c+ N8 [Timer.timerSettings[1].master = true;. c  \& {  |  c+ Y" S( `1 e
Timer.defaultHalf = Timer.Half_LOWER;
' E8 ^8 C- \6 {( J2 ?8 aClock.timerId = 1;
% Z& [* _. E* r! X8 v
: X! H( x3 M$ b8 e2 ?: r4 R5 d  ?
  s% f. y- v* W) y* |) ~+ N, U% b- y/*. C/ B/ w0 H: ^  W+ _6 P' \% A
*  ======== Miscellaneous Configuration ========
7 ?% F8 y% P2 H  g */* g: b4 H! E! @- F
! J) }$ V6 t0 p; W/ @. ~7 U# d
/* set default diags mask */
- D: t% N7 ~  f- E9 dvar Diags = xdc.useModule('xdc.runtime.Diags');
0 e& v! _1 G6 i+ b' t8 Jvar Defaults = xdc.useModule('xdc.runtime.Defaults');
/ [) e7 q( g5 h# b  Z/ }; v% t3 h7 y5 F& V+ \
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
5 h9 C3 S4 G& b3 N# I0 cDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;" C8 A9 `% c) X& k
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
+ C* p6 Y* i, d6 A1 |! WDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
6 l) V. [" D  TDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */2 I7 x0 U3 p9 M1 i6 W1 w
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
: h' U: G% N6 \" ^  }2 gDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;/ W. B! o3 `# L2 @; V: S
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;; M" ~# C  D3 |9 f; X8 Q% g, i
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;8 `/ t) O; p" {* t8 K
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;" ^$ w+ D2 R! V- @4 u
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;+ c$ k& h3 q3 e* y9 P
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
2 D6 ?- }8 W8 M, B4 y  s/ yDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
4 a7 e& s: G# ^) q- }Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
3 E) F8 n$ o6 L7 v2 F; B: d; T1 m2 J: b) `& ^
/* override diags mask for selected modules */# L+ ]& |) u' f4 _
xdc.useModule('xdc.runtime.Main');; i2 I; H1 G. m" V" Y0 h# y
Diags.setMaskMeta(
2 E8 B" g8 j2 N+ l+ S    "xdc.runtime.Main",
. T7 t( L' T# i    Diags.ENTRY | Diags.EXIT | Diags.INFO,
% V, m! Q6 x9 O9 m( j* }( l7 h    Diags.RUNTIME_ON6 |/ G# q* D2 k! ^! C$ I+ |
);7 g/ s' L' j( B3 V

8 U; o8 a; G1 N1 O" W0 J& Kvar Registry = xdc.useModule('xdc.runtime.Registry');
8 W' x+ U8 P8 c5 d. LRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;& I; h. u7 A! G4 M5 m4 q7 m/ P+ K1 l
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;6 D/ J2 r% O; \, @( W" v1 o
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
9 l( J" T7 C9 i0 V( S' E2 r0 \3 u9 sRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;$ s' o0 P( C/ e9 `8 X

; J( X" j" b5 o, ?/* create a logger instance */
! ]; K0 W9 x, L, G6 D3 o5 f: Pvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
7 s2 z7 X( e  s9 Vvar loggerBufP = new LoggerBuf.Params();5 F  Q1 E1 B& R" j6 ~' Q9 h
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */& g8 s2 D8 y) a: b. n$ ?
loggerBufP.bufType = LoggerBuf.BufType_FIXED;* U+ ^" p5 ^  D! m
3 y7 Y+ e4 B" W; o) G
var appLogger = LoggerBuf.create(loggerBufP);
3 G/ G: X% z8 g" x( q6 ?* R( ?appLogger.instance.name = "AppLog_Core1";
7 T# c8 d6 J3 [) i/ RDefaults.common$.logger = appLogger;
: F: ~1 Q, N- g# OMemory.defaultHeapSize = 0x8192;    ; J' ?. O( n7 S% d
Idle.idleFxns[0] = "&LEDStatus";
5 E" E5 c4 |2 _Cache.initSize.l2Size = Cache.L2Size_32K;
6 M6 X3 X) n5 F$ P2 W9 M. ~
. O. w0 h7 a8 O3 V6 g6 C' l
回复 支持 反对

使用道具 举报

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 */
( I/ |7 F" o6 D6 V0 y( i$ s; bvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
* J8 j% Z& ~' C4 c2 S0 ?' {7 h  Nvar heapMemParams = new HeapMem.Params();
( S/ D/ o+ S6 V$ n7 PheapMemParams.size = 0x4000;
2 P  K4 |, Z, `% C: }2 [, o+ t8 |. A6 H# ?- e" H
var Memory = xdc.useModule('xdc.runtime.Memory');
4 c3 E, E# [9 Y3 m1 M, v# t% CMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
6 D  h8 B' Q) w. C
. }/ r) r) K3 N6 {我大约calloc  每次共计大小为5K*16bits,0 U: `6 B$ {# n5 u& R; K. a/ o6 h
而默认配置才0x4000、需要改大。
2 k: ~) ]# _! X8 ^2 A! [/ Q% a8 L9 [* _3 Q2 J' n
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */4 U0 P+ e! P1 w. q6 g; p
Program.heap = 0;; s. b! S+ n5 g1 i4 E4 x
Program.argSize = 100;  /* minimum size */% Z+ X/ ]; C& n' Z. H! o$ r% N
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-3 05:59 , Processed in 0.041320 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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