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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构3 H# e( [3 a* w5 }4 y

0 T7 A6 L% r, j' q    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256. y! D# k, N# P- F& p& K/ S" O* L

. |. ]6 t/ o! Y# F: @6 Z0 J其他程序段。。。。。7 {# ?: g$ e, e- P/ A$ _; m- j- j+ u

; r! G6 b. w# C! }! I/ K   free(x_d);
6 D/ }/ [0 o) B1 [0 ]5 b' u+ [9 V7 f+ ~/ C
使用DSP侧单独调试功能,验证动态申请没有问题,
3 `  t( J" F2 a1 O  c8 Z: G3 w! k7 g4 M1 J
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
* V0 i) d6 a0 C
1 [) ^4 q1 E- S
9 A) q1 P) |4 {$ W' M

; H2 ?+ z" n5 D( y8 q& ]
* f* B$ m* U( q
  T, A# ~% F. Q. ?; X0 D- J2 u
$ \; ?: @8 }- u- @$ ]
/ S7 Q! m; y5 L
; x% G6 ^+ _  P4 y9 e3 c9 b
1 l) Y1 M9 K3 D5 E
/ J# ^. c9 B& C  R, D/ x0 h+ S
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
3 |! ~  }* ~+ z# C/ ^我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
! w4 I0 V5 C; W- C0 Y  J( N- ^" \& y(不过疑惑的是,为何单独DSP仿真就没有问题呢?)2 o' ~6 @5 L0 m! n3 T
7 A1 H4 f) P: U- Q2 Y! h
是不是需要在DSP.CFG中进行配置
% u% d. L/ ^# |) r+ ^我现在的配置为
$ q. a7 g- _8 `" z4 p; v, R& `/ n1 y2 b
/*. a' F( ]+ `6 P) F
*  ======== Operating System Configuration ========! u, l) S! c; c: X
*/3 Y0 ?: t1 B0 Z: _/ y
5 F) l6 [- X5 F
/* no rts heap */9 w6 i2 _0 ^" D, T9 _
Program.heap = 0;
$ L  m0 G2 P  B7 h5 A1 R$ F4 B5 GProgram.argSize = 100;  /* minimum size */* h- X, g; C) S' h
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大* F, L  o/ E- |& K% @# d
: b5 n/ w8 ^$ \8 z
/* create a default heap */
" Z1 \8 D0 v. l7 v/ nvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');4 i  o. h9 o0 p4 Y5 M8 ~  \
var heapMemParams = new HeapMem.Params();
% y# C; C$ Q7 \+ _* C6 ?/ d" {0 PheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
* R* T2 Y6 P) C( I  E$ O# c) w) K2 B1 s0 y+ a# \) Q0 h3 p( ]
var Memory = xdc.useModule('xdc.runtime.Memory');$ ]3 `* S: a$ K  p
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);. m4 C( S! e/ @- a' r: s

# D% d. M4 p" f/* configure System module */* E/ Z; S3 ^9 E& f" y  X4 i
var SysMin = xdc.useModule('xdc.runtime.SysMin');1 U3 I$ \) E  h0 T
SysMin.bufSize = 0x1000;0 L; m3 G# n0 L, F
SysMin.flushAtExit = false;
' u! h5 k1 O& m6 R7 g- Z
8 h* |* K; k! L" m; s' ?* m$ _var System = xdc.useModule('xdc.runtime.System');. q$ K9 T8 T2 g+ p) U+ }! B
System.SupportProxy = SysMin;
; @& H* U; S7 [( K3 S& l& Y) @9 p, p8 k2 l3 i$ ^. G! V! b
/* configure SysBios to use the lower half of Timer 1 */& A* B/ h# u2 n3 n, t  X2 Q/ z$ q
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
& h( Q* q; \9 \* ]0 xvar Clock = xdc.useModule('ti.sysbios.knl.Clock');$ ^  `1 G( D1 r7 p, p
Timer.timerSettings[1].master = true;
+ I1 r% ]4 H6 `/ D" j9 VTimer.defaultHalf = Timer.Half_LOWER;& U6 ?: F7 v) b+ s1 u8 S
Clock.timerId = 1;+ ~% j- f( q3 [8 o% K9 w7 y
& g/ y0 j/ R# T; b
# `; _7 a# U5 u' `2 U
/*6 U7 O! C: o2 X
*  ======== Miscellaneous Configuration ========% H7 G1 I" }8 t" g2 W
*/9 x. q" o3 H0 w/ V1 B) j+ M

/ J3 `- `) Q/ ?2 o$ |2 Z& b/* set default diags mask */
5 ?$ P  H' T9 Evar Diags = xdc.useModule('xdc.runtime.Diags');3 R3 G! I3 y1 Y7 E6 _
var Defaults = xdc.useModule('xdc.runtime.Defaults');, K7 C( r+ n9 R; j8 x! \7 w

7 ^) I3 e7 S+ uDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;# P7 F8 v0 [0 f5 u1 L0 X
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
$ r; C$ d2 J* S  K  O# q) _3 Z8 y7 PDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
& |* Z% `& f% G: }9 M' _, t- uDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
9 L: z6 l% o# H1 k( O( ~. MDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */2 O) g6 ]! z6 [$ s1 ^6 ~/ Z
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;( \( x! ]! y9 j0 t4 \% T
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;5 m/ B/ ^6 N0 D* {
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
3 U8 ]* t6 e+ B0 j) hDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
2 W, R! a3 D2 b& ]Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;1 g& h# M! H1 K- K, {! i; ~
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;- h  d% }, T' P6 j
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
: E. e0 p2 {4 W3 T4 uDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;/ `/ G  u2 K) ^; v
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
+ V. |5 y. z1 P
& ]2 g! R7 s; q: o/* override diags mask for selected modules */9 b1 g/ X  Q1 b% W* ^
xdc.useModule('xdc.runtime.Main');+ }7 K" h. ?7 {2 o
Diags.setMaskMeta(9 @$ ~) u( p; j
    "xdc.runtime.Main",; E7 C' Q$ g, Z' A$ f4 K1 j
    Diags.ENTRY | Diags.EXIT | Diags.INFO,1 ?% |6 F# D7 m$ y" Z, A
    Diags.RUNTIME_ON
, h" P4 J- {% S# s3 ^: H);
  C4 g( E2 S) S6 @& W8 Z
' d& B# b" |9 c3 Y; zvar Registry = xdc.useModule('xdc.runtime.Registry');) C2 d3 |& ~) G8 F/ l
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
9 I7 C: O: M8 HRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
' c4 ?0 ]2 L" @+ K! d6 wRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
5 z7 k8 j9 v. P( ]& B! C" |$ y" ~- @Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;, a( u$ h% i+ K

' a9 u8 x- P9 |* g/* create a logger instance */- x# {6 R7 u: w. v1 N
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
4 Q( F3 R7 q9 k2 L3 \( ^var loggerBufP = new LoggerBuf.Params();
5 N8 G6 a5 H/ `. V- |loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */8 N5 K4 t: `$ e/ U- Z  B" E' ]
loggerBufP.bufType = LoggerBuf.BufType_FIXED;% B8 Q# U9 U3 `" |: {
( j  K$ V8 r: s( m% E- i" k) Y, A& ^
var appLogger = LoggerBuf.create(loggerBufP);* X& E# \# T+ k* i; v
appLogger.instance.name = "AppLog_Core1";& E! F6 d, n& L& A
Defaults.common$.logger = appLogger;
: b  j$ s4 u! O, [" H' l) JMemory.defaultHeapSize = 0x8192;    9 D0 C' f# G$ h  L) f; z
Idle.idleFxns[0] = "&LEDStatus";$ `/ C2 i1 w& ]9 U. U9 `( s
Cache.initSize.l2Size = Cache.L2Size_32K;# ], O1 J5 t  R' c; F

4 V( V+ `4 n. k. `" Q
回复 支持 反对

使用道具 举报

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 */4 _2 t0 Z1 i+ r" z$ b- B6 J! I4 e
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');3 n0 \! c5 G, |" E2 a: a5 Z
var heapMemParams = new HeapMem.Params();
' K  r* G* f) L7 sheapMemParams.size = 0x4000;
- d- b0 V$ X' ^; `
0 J" W$ W( y" O( p0 A# _var Memory = xdc.useModule('xdc.runtime.Memory');/ [1 n( h7 U$ N% B% j2 }/ S
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);5 h2 i7 p, X5 o' Q! X* _, E  e% }: B+ U

- F8 m9 d5 M$ y. \, y我大约calloc  每次共计大小为5K*16bits,
3 ?$ ^* `# Z! f8 j而默认配置才0x4000、需要改大。* G' ?& l1 }# l0 a, s8 G. T

- D' m2 o& i8 U1 @. l% q; N; C
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */  n. C- E: S/ T5 I4 k1 b7 r
Program.heap = 0;0 C6 U# [9 L8 q& |5 U$ T- E, M
Program.argSize = 100;  /* minimum size */
1 w: A# C! b, T$ d( d- C- {9 [Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-19 14:24 , Processed in 0.041460 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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