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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
  w: ~4 J4 V) V  c' M* q( n' h% Q, I# K& ]8 D" Z
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
$ z+ k. F, M8 B& h
: I1 U6 X) q( n) p" A% a3 J9 |其他程序段。。。。。
' Z1 t+ M4 T; W/ ]2 ]7 y2 z/ s, q
0 T1 R- ~: ^" J* g: O0 ?- x8 [   free(x_d);
1 |+ ^; F# I( i9 _6 E9 \! P5 n9 Q3 ]9 f
使用DSP侧单独调试功能,验证动态申请没有问题,. x: E5 E* m% q' s
! a' J# M2 ~' b) S
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。- Z2 H9 F" U/ d* I, {/ L% k
" t9 g$ ]3 o$ U
7 S5 U" U$ B4 r* ?  Z
3 k! I% F4 h; d9 O5 \
- W4 S' ~) i3 k; a. K$ v
& Z8 ^9 h: _3 @3 d

, S, E# q. T2 |1 L. Z" W; C9 s: |3 K. Y, x% v

! z" p; Y+ J2 e# [# D! u+ j' M' s; Z) X. O8 U

/ o" y1 z) s& t; g7 z
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
* C- h! u; w8 j6 {! \, d2 D: i我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下8 ~( e! k. \: q7 j  t- q
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)8 j5 M; g/ K! m, p" T* v
) p( j/ F" j; Q& i5 l; r
是不是需要在DSP.CFG中进行配置
' A+ `/ s9 ~- @8 j- c我现在的配置为2 ^( J- E0 q# r) B* a& S3 E
, Y3 v! z0 O9 A! N
/*
' m* l8 T) G* `4 u5 K/ h; S *  ======== Operating System Configuration ========. e( P; Z- P2 q, U5 a# p' q# ?
*/
* d/ u1 f, L; S9 ]& P7 {" S
& |$ {+ p0 t& F. y* R0 J' i/* no rts heap */
" O- o5 V$ z1 I6 [8 _( e; OProgram.heap = 0;4 a  ?$ p8 K: z; U4 H7 b
Program.argSize = 100;  /* minimum size */4 g: {3 i/ s0 h) W
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
" ?- [# V9 S3 V" o% ^, q9 Y) A% N0 a9 f2 D
/* create a default heap */
0 U8 z2 w( Y+ cvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
# u3 e+ _- A1 j; mvar heapMemParams = new HeapMem.Params();: Q3 ~5 Z* _$ ~7 h( q
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
8 Z$ `' z; \5 d+ i
* X, @8 \- y6 m9 E* h
var Memory = xdc.useModule('xdc.runtime.Memory');# {$ u. j6 p5 c! ]8 \# K- A
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);. C: f5 n9 g' M9 C" h! i3 x9 L
" J( D& c& h1 e& t3 t3 I3 w3 K
/* configure System module */9 L( Y5 d  _; s) r! k% a
var SysMin = xdc.useModule('xdc.runtime.SysMin');# f7 p6 o( _6 L' R, s3 X" K: \
SysMin.bufSize = 0x1000;, C. E0 ~# p$ `! q; F# v; u
SysMin.flushAtExit = false;
" j& s& `% B) A( l+ L6 U
+ j& R' _) `) Pvar System = xdc.useModule('xdc.runtime.System');
; Z1 a0 n9 K/ _* O! n, q8 iSystem.SupportProxy = SysMin;
$ C8 m8 Z  R1 T4 G# h! X- _7 S. k
( P. [! a( p6 C+ C% N9 s% H& w+ w/* configure SysBios to use the lower half of Timer 1 */
" V4 c0 b0 G; l" i* d# nvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
! Z5 p- K1 V" U. vvar Clock = xdc.useModule('ti.sysbios.knl.Clock');; X8 h, X3 f# T( t5 M7 X
Timer.timerSettings[1].master = true;; v! f+ y$ `# |/ h0 r
Timer.defaultHalf = Timer.Half_LOWER;
8 x) Z/ V( I& W, vClock.timerId = 1;
( Z* K4 W7 L1 y  L0 ^0 U
; L2 O  C' Q! U3 p  G
; C+ r# Y0 D. y% N5 U2 z! z7 p. ^/*# P0 k% x- o3 |. c
*  ======== Miscellaneous Configuration ========
! m3 o1 s) L0 x! X, ?& O1 V */
* h' T, F7 h* V' P. x+ t4 K: |/ N" P. r! Q1 Y
/* set default diags mask */
$ ]. _% ?& a- n1 a( `2 p4 L! {; c% `var Diags = xdc.useModule('xdc.runtime.Diags');: ~. ^9 ?' ^: Z) ~
var Defaults = xdc.useModule('xdc.runtime.Defaults');
2 u7 D8 N" N/ g( W# g; s
/ m7 a2 x2 K/ h+ Y% UDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
- \. [) [! l8 |+ a$ a& k& |Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
" U5 P) b8 @% @  [$ HDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
  t* r; G' _: [7 q: ADefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */* x+ _. p$ V+ ~, S  A) N
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
7 n4 i3 J" E( I: g: m6 eDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;7 e* k( Z$ x) D% |: E6 l
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
1 r  ]& V5 ?2 R' fDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;* a% y0 A0 B  N- v  C
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;3 t  a6 L3 P0 |% W% C. l4 z: x+ @
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;6 j: \" o1 b/ A6 r+ E  g- f& {  ^
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
2 |: P0 p8 C( q1 P- _0 h6 I3 i1 ]Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
2 L' y' o7 T& |7 H( U6 Y4 _Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
) i; P% `3 D3 B9 a6 Z! ODefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
" h& n! Y& Z0 Z8 D& a; _7 N# ^" n9 s. C8 a% z# D! O
/* override diags mask for selected modules */
$ }" |3 k2 l% y& \' zxdc.useModule('xdc.runtime.Main');
0 U) a+ I9 ^% Q) k/ {Diags.setMaskMeta(
8 q+ f) r" q" w9 z6 E6 u. `    "xdc.runtime.Main",# E! ~0 H; O" B: X0 d+ W; ~
    Diags.ENTRY | Diags.EXIT | Diags.INFO,) Y0 j- {# X0 U0 Z2 J
    Diags.RUNTIME_ON
0 Q. e% R' d) U/ m);1 E. s4 U# k4 i0 K$ O8 s  b

: f3 F$ S9 f- U- O' X, [+ Bvar Registry = xdc.useModule('xdc.runtime.Registry');" X3 N* s* o# F
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;! E, W7 j$ N9 X! e: L2 [" E4 G4 n
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
  Y5 u/ V0 M! o5 g+ M0 ^Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
5 Q- G5 k$ Y* V  P( BRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
# a) |3 I  w# E# D' D; x8 b) n8 g
8 F+ T: s9 c( A/* create a logger instance */! i$ ~' Q+ _) K
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
  ]0 A/ b( |, D% r( s% y) E$ Dvar loggerBufP = new LoggerBuf.Params();# p' M( Y2 _- [$ f. \: S
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */6 T2 p. X; d8 j, M6 s% }" E: d
loggerBufP.bufType = LoggerBuf.BufType_FIXED;$ W9 h2 ?. n$ m! B# I

8 f* y, V; z3 b9 u2 Tvar appLogger = LoggerBuf.create(loggerBufP);
$ f& f- C( A: M* t8 kappLogger.instance.name = "AppLog_Core1";
( }. l- {! s# Z0 V  RDefaults.common$.logger = appLogger;3 n0 v( S: r0 Q. {
Memory.defaultHeapSize = 0x8192;   
6 E# |" h! v4 E( A: n% f0 XIdle.idleFxns[0] = "&LEDStatus";+ @- ~: Y' z) [# h# K8 c6 B
Cache.initSize.l2Size = Cache.L2Size_32K;' ?2 a7 V6 g0 R% i4 m# `" V; ~

* G2 P+ z0 T& _( `
回复 支持 反对

使用道具 举报

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 */
# Y) z3 s  {$ v$ Gvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');! Y8 @5 C) z, W) i6 i2 H: K
var heapMemParams = new HeapMem.Params();
  O6 n# W2 ]8 Z6 o" T; O" ~% e& QheapMemParams.size = 0x4000;9 f, u6 s9 v9 v/ W0 u5 j% j
( n4 P( m6 _7 T
var Memory = xdc.useModule('xdc.runtime.Memory');: d7 T' f7 v  V& o+ N! H3 g
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);7 Y$ S% V( R1 g8 o. Z% u  a

$ S" `1 p; E1 W我大约calloc  每次共计大小为5K*16bits,
# o  N& Q, \2 r% n. u而默认配置才0x4000、需要改大。
: _9 E# k/ S' L6 x
7 a7 h, R8 n; m+ B% _  m( a5 B
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
- Q2 N. k, x: N. x1 n8 f0 kProgram.heap = 0;
- R/ P* }( y7 }6 j7 ~Program.argSize = 100;  /* minimum size */8 w! U$ y) C, I3 L
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-1-29 11:07 , Processed in 0.042134 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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