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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
6 E2 x! Q* }: G0 Z2 a+ Z- {& }' ^9 y* w+ a7 S+ {
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2561 R5 n' J# B& f9 K5 h

4 x3 V! R! g; B* b8 {( U" ]其他程序段。。。。。
' p  y" Z- H6 }9 H
# v7 O, X7 {& T5 L7 t* f8 _   free(x_d);
/ w& C/ |8 N: y# x# I1 D3 ], s. N) ]4 ~1 }
使用DSP侧单独调试功能,验证动态申请没有问题,1 S9 i6 p& X' z" o$ T8 k
! \4 f' K8 i, A/ I" ~
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
. n& o& _9 V/ j; c

& M+ B+ ]3 t% q! i8 Z0 Y& M$ p
9 f7 v% H7 ?# Q$ @0 A: R" [* F
* P9 `( B+ T+ A4 Z4 p

6 F0 j- k% S0 p6 ?
) D6 R$ p/ B1 ]* j4 j
+ b. a' `8 g2 s! q, y/ e$ b8 ?# N3 P) d9 y8 L  ^. ]" H
% w  E: Z& ~& A0 o7 c0 W5 q
1 B# |% b1 r+ [  q6 B
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明" f/ e1 h* z9 W0 Q5 }' V
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下! s3 [/ U+ {: u
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)+ p; q1 }; B4 i: A1 W5 c8 D. U6 d
$ j8 f8 {2 ~* A7 ?! F6 I/ C
是不是需要在DSP.CFG中进行配置
5 S9 w" {8 |$ X我现在的配置为
0 N3 u7 g9 G1 ]6 c2 Y7 F" g8 s. ^5 Q1 f" S2 A
/** i- r; J, ^6 g& b2 ?6 K8 H
*  ======== Operating System Configuration ========
" k2 T0 e  D) Q& Z; K */% d+ d: c, n6 Q! d% q; u  N

9 Q0 \% u( `! j+ }, K1 p2 r/* no rts heap */- J$ _+ C8 p8 n* c5 h1 P
Program.heap = 0;
2 D' t* x) G7 y$ L% \& ]% hProgram.argSize = 100;  /* minimum size */0 k. K# l4 n. J0 j8 m# ]$ m
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
/ f; f4 J7 [; K0 Y
1 {' B3 Y$ h- S. }4 U; i/* create a default heap */
) G# Q; v+ Z5 n' L9 M7 Tvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');- P2 C5 p/ K7 e' d8 b8 N2 K) Z. A$ T
var heapMemParams = new HeapMem.Params();# {8 ~+ X; t5 q
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大! H3 ?' L4 K0 B* t$ D
* l  Y$ Y  f+ {5 ~
var Memory = xdc.useModule('xdc.runtime.Memory');
! \4 @0 N. Z" L- v  O: G* B: {% CMemory.defaultHeapInstance = HeapMem.create(heapMemParams);6 X% ^7 t+ g% e. Z% r. v

' \- N0 X. ~7 G2 h% P4 t# G% ]8 ]/* configure System module */
, B1 A  b, x2 e( t9 d  _; a( Wvar SysMin = xdc.useModule('xdc.runtime.SysMin');
: k7 Z( i7 `4 P) J% cSysMin.bufSize = 0x1000;
2 z. i& P1 R/ I- V" ?) LSysMin.flushAtExit = false;0 s8 p; x0 f1 B7 j: O, p  ~
' g) I9 Y# ~* ]) |) Y  P
var System = xdc.useModule('xdc.runtime.System');
9 y. G, A7 l% P0 C  g. ]System.SupportProxy = SysMin;$ M9 H  w, A, F: B+ O8 N
% e. k, }0 ]( W$ d4 c: O" x, |1 `
/* configure SysBios to use the lower half of Timer 1 */  K7 e, P5 g! }! r* Q
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');9 Z& h3 b, M$ b4 Q6 I+ c; Q
var Clock = xdc.useModule('ti.sysbios.knl.Clock');1 J! \' n7 v3 G+ h' s
Timer.timerSettings[1].master = true;/ O2 c  q1 T; \. y/ s' P! L6 @% }: d
Timer.defaultHalf = Timer.Half_LOWER;- l7 P0 `; h8 n! g  a# j% Q
Clock.timerId = 1;7 `) G$ m! ~( {

/ h6 C- W1 Q6 ?4 l) V9 Y' n1 ^& q; {9 F
/*! }5 a) k2 }& J/ ?  W
*  ======== Miscellaneous Configuration ========  A6 s) O; e- }' s; J+ R7 B4 p  x
*/# B$ q5 K5 [3 a. ~

# d9 Z; b% E+ H( E9 h$ b1 H/* set default diags mask */$ G; _" @5 F, D( B
var Diags = xdc.useModule('xdc.runtime.Diags');& i+ A, E$ Q4 ^7 O$ a. D: A
var Defaults = xdc.useModule('xdc.runtime.Defaults');; @: m/ W! ?) [& h% @$ M& N
7 y% R: W5 \+ i# E# x
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
  r" a2 z! c* q( d/ KDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
# a7 u6 n$ A' ?( F! y6 C' CDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;  F4 m. z8 M( X! ]) x. x
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */2 J2 V* h$ ~, i
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
) K. Q6 ~0 G; Y9 ^. |Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
7 W: A) v6 _1 f6 X5 v  GDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
6 ~4 B6 @+ h# ^- ~* A# eDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
! k9 c  H! R- V" k+ ~" aDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;! B4 b1 P7 R% z
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;. U5 v: A. o( l  \
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;# }( l1 i& v. p0 R+ z# w" R. z
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;/ M7 T" O" ^: g
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
1 h: \5 Q5 q/ zDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;, @  m2 o  Q! l5 a/ S" Z

$ J! B& S% p9 g1 n/* override diags mask for selected modules */. r& t( }1 Z8 v2 s+ j$ ?
xdc.useModule('xdc.runtime.Main');& s' L; i. k6 C& [
Diags.setMaskMeta(
! [( _: c# k1 P    "xdc.runtime.Main",
+ |9 v; T  c8 ]3 o1 _% g1 |( E    Diags.ENTRY | Diags.EXIT | Diags.INFO,) k6 C8 B# F, {
    Diags.RUNTIME_ON. T  @* p1 I4 g6 P5 ]8 |
);' ]- G3 T# x0 y% X

8 E- u! m9 X2 Avar Registry = xdc.useModule('xdc.runtime.Registry');
2 K$ A; ?4 R6 F  |. d& z5 w# k1 jRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
/ e; M& t4 D4 A/ I* x- J2 m- QRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
* q' D/ c3 {( E; _8 ZRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;1 s8 S5 z0 R0 n8 ~
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
) S/ e8 N6 z6 D6 }% B( t) K- }& ~5 A+ p% ^/ F' ?* u) V
/* create a logger instance */
, e+ E& j; n% R) evar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
  y  e) a3 u/ M! c' pvar loggerBufP = new LoggerBuf.Params();: Y! l! o8 q( E/ b
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
: V, B% S( e  W5 w8 ~# c7 U. X) cloggerBufP.bufType = LoggerBuf.BufType_FIXED;' W1 `. T7 b: x9 M* R
, s/ ?& P4 u4 \! i
var appLogger = LoggerBuf.create(loggerBufP);
* r1 f$ Z( e; ?& ~5 T: ~! happLogger.instance.name = "AppLog_Core1";2 C/ {3 ~" {- @4 z* U
Defaults.common$.logger = appLogger;# v* s( K" D+ d  y* w7 n: m
Memory.defaultHeapSize = 0x8192;   
( r. e2 p. X4 e- HIdle.idleFxns[0] = "&LEDStatus";
8 {: H. w4 V* @4 c, WCache.initSize.l2Size = Cache.L2Size_32K;
  ]+ |7 K9 M- \! |
! B* D! T* W% ]7 K* e) H* c) h
回复 支持 反对

使用道具 举报

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 */
  o2 ?/ I. @, P5 f6 }2 z+ Bvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
7 a$ Z. [+ `4 V* `& wvar heapMemParams = new HeapMem.Params();
, s6 K  @4 b; J, m: {3 |heapMemParams.size = 0x4000;
3 f% R1 `8 m8 l8 t8 r% S4 o' n& g& }- S2 I) V, g
var Memory = xdc.useModule('xdc.runtime.Memory');  Q! w6 j) m7 g9 L; s8 U
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);5 J* l& n0 |$ _( F# I5 z
' p$ I2 x" u) A1 C4 V% o
我大约calloc  每次共计大小为5K*16bits,
, B; L6 o  Q* @. ~0 F- U而默认配置才0x4000、需要改大。) K4 O& r4 h8 a6 X+ z
- w) \& q2 j7 r5 v' R; G
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
2 y' g5 F$ ~8 w) [; mProgram.heap = 0;5 b! m* `- M( s/ k, @+ a* V) ^4 `
Program.argSize = 100;  /* minimum size */
/ S7 V- a; j& r9 ?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-30 15:15 , Processed in 0.050884 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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