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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构' {& \) e1 H" H  w& q
6 V3 H/ k$ t4 A5 N6 W+ y& x7 b
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256# d5 T3 c% z3 g6 X1 E5 ^0 u

" e2 ^# E1 U  N) X/ q% M5 Z4 M* a# L其他程序段。。。。。3 l0 r9 {2 s+ W- _3 G
: [2 s% a7 o5 u+ e
   free(x_d);
8 i) F% {7 K4 I
( b7 I/ C/ Z) _5 m9 f, o( e% [使用DSP侧单独调试功能,验证动态申请没有问题,
$ r- V8 d; ~/ F4 j2 i  _3 ?7 W( U8 Y  M! o: U
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。9 b; w, k) v0 |- Q6 [
) C# b) b) m; e, o! ^/ {/ f- R

5 {# g9 E7 E5 n8 }: U9 w/ r8 h' d! a  W

! }8 Z( d& c, S( y3 R! ?7 n' Z9 \* f
! J1 n6 Y) ~9 \" w& T
; L2 C5 r: i, l' F) ]& F4 ?. n( Z4 b6 S8 n

6 |0 O% g! ?, t; K" m+ z  f6 ]; V" d6 p9 z+ o' T0 M6 j! d

& u( Z8 M# t& N" N, H3 D5 t* M- {* D/ v
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
# g$ e, u5 R8 d我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
. E: d9 ^2 d* f2 \" t: P(不过疑惑的是,为何单独DSP仿真就没有问题呢?)! C9 R( x; |% O* k+ m: K/ n

2 d. H% T5 m1 p是不是需要在DSP.CFG中进行配置& v$ t! I% t& |% q2 P- ^7 i: X
我现在的配置为9 M( o9 R0 w8 ^* @2 }7 v% v

9 t; n, V6 |6 h" ?+ [/*
; x+ B) W6 j* ~* R' U2 j *  ======== Operating System Configuration ========$ j1 e, i( b7 x* ~9 f# h
*/
% N) g, H6 J, [7 [0 W: t6 d
3 ?6 _3 V3 |0 ~/* no rts heap */
# l3 P8 |) Z% o3 A7 j$ U6 LProgram.heap = 0;
- ^7 @. a, f6 P2 r3 ~$ i" |. dProgram.argSize = 100;  /* minimum size */* k0 g, {- ?; w4 _( l; C
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大  n, ^( s3 c$ p( l
6 V+ }" j! R4 P" v6 H  ~$ ]
/* create a default heap */& B. c9 _! a4 k
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
/ A( X! ~5 J% C+ Tvar heapMemParams = new HeapMem.Params();8 K) m  Y' K% j4 O' w9 I' k
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
( x# o; S5 _& Z* N, X! m
8 c! I- v6 s) z: G
var Memory = xdc.useModule('xdc.runtime.Memory');+ T: i8 z- k0 X0 n: }
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);  h  G+ R8 c. y0 v+ f

  _& g" ~; V: B: H; c/* configure System module */- @- H  g0 Q5 z9 A9 H2 U7 l/ j
var SysMin = xdc.useModule('xdc.runtime.SysMin');9 m, l5 V/ E! h- v" h
SysMin.bufSize = 0x1000;
9 l; K. j+ V& c: jSysMin.flushAtExit = false;
0 a9 H# |+ i& e) g
: O% r8 v! S! M' z& Cvar System = xdc.useModule('xdc.runtime.System');+ Z$ E6 F  ~  A8 z# d+ y
System.SupportProxy = SysMin;# K: e' M3 W; j  m  i* @; E% U/ x1 `

5 \: ^0 P6 a: l$ ?/* configure SysBios to use the lower half of Timer 1 */
+ ]9 @- g$ s' f% a5 o5 H* R3 J& u/ v& X$ _var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
3 Q4 {+ j& J: w$ ^3 T& Xvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
% [, F+ J. C9 f- t! u! OTimer.timerSettings[1].master = true;
+ [. i" x3 z- ATimer.defaultHalf = Timer.Half_LOWER;: q  J: E9 a8 K6 }
Clock.timerId = 1;" @9 G$ D$ x& v5 K) e

& [$ s3 e" v: N6 Y, \# m. h( d# m3 o9 k' z
/*
7 `/ Z6 f0 J( n1 n# C. `) r. z# e' L *  ======== Miscellaneous Configuration ========: d7 G+ q- B' j4 a/ h
*/
  A1 ?1 A8 ^- W. M( B
7 ?9 U  Q" Q* `. }/* set default diags mask */4 r, g( y! @, t! |7 H
var Diags = xdc.useModule('xdc.runtime.Diags');
  F/ ^# Y. X/ U& W, o# R% qvar Defaults = xdc.useModule('xdc.runtime.Defaults');' P* b( L9 B# L' L' ]7 _
$ L! R9 b* e- i) O/ W+ P6 x1 F# [% `
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;; E4 C8 Q) L6 b% v, O
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
. ~' V2 X: b9 R5 IDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
5 V( X) x4 T  X6 u. z/ Y6 sDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */2 E- D9 D3 h& A  W- o9 Z8 X; K/ l
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
: b6 m# y! R% V2 ?) L0 o& xDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;0 i' `! ~& P2 s* n+ c1 f) D
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
9 G8 o. d- v, ~  VDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;# L0 j! T8 i- p: n4 b! p
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
. q0 z/ E2 g: S! X' {Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;( \: @; f! [5 B$ j
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;8 w2 M( W4 H/ b/ P$ I
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;1 D& Z- a8 b+ h+ X5 f
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
) x0 j. c5 O; O8 ^) ]2 C7 Q9 x. nDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;- G5 Q' [. h! Y$ a9 ~" v: k
; B$ F9 E( K5 q) R" c8 N
/* override diags mask for selected modules */9 R8 u! g* c  _. k
xdc.useModule('xdc.runtime.Main');. X* C# A: ^% r! N3 |6 D# V9 x& n
Diags.setMaskMeta(
2 h2 T; S" Y' j. H. t7 J    "xdc.runtime.Main",
( n" D& l5 l5 U/ n6 O7 \  Q8 g    Diags.ENTRY | Diags.EXIT | Diags.INFO,. t' I8 p2 X% I7 c1 L
    Diags.RUNTIME_ON
" z5 l0 }2 V  A5 y  d; v);
8 W4 w$ Z6 w5 L* T1 z! c4 S2 v5 ?" [3 h$ Y8 ~
var Registry = xdc.useModule('xdc.runtime.Registry');
2 h- i  [' o2 |3 b8 eRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
( @# J5 z% E3 s' S% VRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;0 q$ v' T4 R2 O! O+ L
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;9 t! g$ |3 `% K& B) ]
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;. g( z3 b8 o  o) }; \( F3 c

/ a( p( z# F; Q  E/* create a logger instance */
/ V+ e1 f  Y. \4 H( fvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');1 n. @3 T" e( ?3 @  X
var loggerBufP = new LoggerBuf.Params();
& H2 u8 l; w; N; S, z% Q# lloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
: ]1 J9 \; h' J9 x9 G) O( aloggerBufP.bufType = LoggerBuf.BufType_FIXED;* a/ R6 g- [4 l! P* o1 q

5 B7 u7 l5 f8 C8 nvar appLogger = LoggerBuf.create(loggerBufP);
$ o; r3 N2 g2 \1 u1 jappLogger.instance.name = "AppLog_Core1";
) e9 y3 E  p6 iDefaults.common$.logger = appLogger;
; D8 B7 P* }! A, l! j9 z# }% `Memory.defaultHeapSize = 0x8192;    3 k/ E9 v* C; z
Idle.idleFxns[0] = "&LEDStatus";
0 X4 O* c2 T+ z% k4 uCache.initSize.l2Size = Cache.L2Size_32K;0 w4 d& B2 \. z7 \
7 N* L" X, M  [) O( 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 */1 u0 t9 C; ^0 v7 \7 P) a+ W
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');; D7 E1 N3 w( a+ X
var heapMemParams = new HeapMem.Params();- E. y5 K- x  W- }9 F
heapMemParams.size = 0x4000;
  j3 |. M. ~, x+ H  i$ z' @: i0 p4 v( e: o/ Z' v
var Memory = xdc.useModule('xdc.runtime.Memory');  ?5 y% Q7 Z( n4 F; Z
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
" F8 ~3 O  y6 k9 ^7 W
. V" g& Q1 a, ]$ S; r+ E我大约calloc  每次共计大小为5K*16bits,, ?& v9 g) s* L: g
而默认配置才0x4000、需要改大。; [( x' j2 Y- u8 s4 C

8 A2 z2 N5 M5 P7 V! \
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */) B4 \7 f7 j. A& z' C- N6 f
Program.heap = 0;
/ a% c% W- k9 S( ~/ A! B% sProgram.argSize = 100;  /* minimum size */
* m  m& W9 s# }% X2 i/ KProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-23 04:08 , Processed in 0.040094 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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