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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
0 j6 k5 B1 z  y1 Z0 Q: W! C$ g. N: C, u0 P* _( C0 D
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
9 s* i' Z3 N6 a: O$ S* k; F. Q- k  [
其他程序段。。。。。2 c$ T6 e  r) N4 H& }+ i+ W% _9 ]  X

; O6 u$ v$ e% u/ V   free(x_d);8 I" T: v( @: z- i; s

) T: d# }8 z. T6 @) n使用DSP侧单独调试功能,验证动态申请没有问题,
, c( U7 i! T* H! o) x2 V+ N- u4 A' P
0 n. l! x8 m& ?, w0 G' y但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
, T0 `, W9 l2 j7 z. j2 e- G- v7 ~4 k2 P6 s
. M$ G6 G8 q, S0 f

. I' D! w7 [+ d: D3 a9 s& ?
$ J( J0 ~& A* q$ k, A7 e& _; |+ N7 a; ?% b: f

2 v- j- W# {6 V; u/ _) Z! ?
5 p. B7 O4 \! a
0 }. i! V* J" e7 }7 {/ w3 t. _- V! _
. Z# I1 \# d4 o" V

3 P5 M( B' t( L9 ^+ A0 z0 `
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明) Y" I9 R# |2 m. Y
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
4 B: o( e2 k( s. L/ [& `+ E(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
5 V/ G" W" F0 Z- o' V5 u) U3 E

- y& N; F# k0 [; V' r4 j) G是不是需要在DSP.CFG中进行配置+ C/ P8 e5 F2 `' q: [& ]$ ~
我现在的配置为
# s: R4 o3 n- k2 e) e& M- W$ H
/ ^# ]7 y3 I0 j% p3 t. B/** j& f0 I1 z8 {! M- w% s
*  ======== Operating System Configuration ========9 _- J7 b+ Y" z; a. a( G
*/
# S$ U9 p! ~' V7 F# |' a7 b- h' D% N9 l: e# ]& w! \
/* no rts heap */+ `" x" V- `, G
Program.heap = 0;1 ^7 v( _; f+ p& E' t' A' }; k0 @
Program.argSize = 100;  /* minimum size */
# Z2 _/ }% }: |9 A6 u5 `$ yProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
/ K  u- A$ D+ l/ U2 |0 u$ ?6 I) w" [3 P/ K6 \8 K* j! o$ ]
/* create a default heap */
. C' G" p' F& Avar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
: F* ]6 Z, U- o- y4 l% yvar heapMemParams = new HeapMem.Params();
* w$ C! ^! N1 e' a2 \heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大5 c0 t1 k% [- j7 ~
' H8 e7 D0 J' T/ a4 Z( A% a4 R
var Memory = xdc.useModule('xdc.runtime.Memory');! U* P$ r+ D, F: z( ?: B
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
* [9 o3 C, O5 ^+ a+ Z
9 S5 [, ^. N- t3 R: h* q8 m4 k9 U/* configure System module */0 \) O, J. @3 s$ b  J
var SysMin = xdc.useModule('xdc.runtime.SysMin');
: s, ~5 p' B7 }% t+ v: USysMin.bufSize = 0x1000;9 e; o" ]2 S; L- h
SysMin.flushAtExit = false;% q. O* H+ t, H
1 O* O2 \4 H1 u* }0 V1 `& W
var System = xdc.useModule('xdc.runtime.System');
! z3 ~* V3 p4 w; `* ?0 }System.SupportProxy = SysMin;
  ^& n  f$ L( E& k1 P5 e& A( A6 h& e! S) }
/* configure SysBios to use the lower half of Timer 1 */9 W) h, k( A9 e! l( g
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');& I3 H5 O) ~. [/ D# j, |8 W4 p, c
var Clock = xdc.useModule('ti.sysbios.knl.Clock');# b2 m7 D) w+ M3 Q" e
Timer.timerSettings[1].master = true;: K1 w% L- {6 r( x
Timer.defaultHalf = Timer.Half_LOWER;) Y0 g% V: h6 q+ q$ \
Clock.timerId = 1;
, e; \! v/ b; L- C0 e" f+ T, w6 [; y5 P: [0 V

0 J! T5 C: ]1 T( \/*
$ i5 e1 c  i4 m *  ======== Miscellaneous Configuration ========9 h( |1 H& Q' R" g  ?
*/
1 O, K* }3 B7 ~. l
+ Q3 @4 A7 K# g3 s/* set default diags mask */
/ d) }* h& Z5 i. E0 Zvar Diags = xdc.useModule('xdc.runtime.Diags');% D4 R) i9 r( \7 Z" i5 k% o
var Defaults = xdc.useModule('xdc.runtime.Defaults');/ X- f* d5 A. k' A! E, }; [

. y8 h+ q8 F, @2 y1 ]* a5 SDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;3 T& Y6 \& U( N
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
4 V- U4 X% l5 O0 E( x9 t2 f$ `; sDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
8 M' p$ l; H% ~2 n* @Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
' t$ t* v: D$ QDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
' G& M8 Y$ L0 H) WDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
9 F8 M* v' |" W9 t5 ^( tDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
1 R( N5 N& s6 `% PDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
5 X9 I% E# Z' s3 VDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
1 s8 X+ [0 b2 m& e2 O# [Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;1 l, [: w$ R3 f4 T+ g1 G2 b4 G4 W2 U
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;& O1 e8 c% @+ `" o1 r) B$ z2 p
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
  I0 o+ ?4 L( P# t- u# {; d9 ?2 wDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
! {; {0 i: n; o$ p# J5 _2 V9 o0 ~( _Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
- ?. y  O- i- K% I- d9 f( m0 M. \& S1 q0 f4 J
/* override diags mask for selected modules */
/ J: f2 y! y1 V: c- }6 T& Gxdc.useModule('xdc.runtime.Main');1 n" w+ s1 S  J1 E
Diags.setMaskMeta(
# f0 ~) A3 ^0 m3 r3 Q    "xdc.runtime.Main",
1 u; f+ K2 k# S. A4 _! |    Diags.ENTRY | Diags.EXIT | Diags.INFO,( P7 L$ ?8 z* s2 K( }0 b& X
    Diags.RUNTIME_ON/ F/ s3 h+ U5 k
);! j# W$ T( D1 e; c6 B: C  ?) D) w4 c
  I* i% Y( t+ t% }; m
var Registry = xdc.useModule('xdc.runtime.Registry');
) |# P/ ?) y2 x( N- Q. G/ VRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;4 e. l' j2 f7 w2 B, w" k5 f
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;( y5 H8 J+ B+ @3 Z
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;' w1 c9 @& U0 r$ K# c3 Y) w+ L/ |, o) v
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;& O9 |+ |# m& D( o

/ E' E5 f) a4 r/* create a logger instance */- ~* _8 u  a3 v- K
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');  U" i1 u2 ]1 k; e; ?  j
var loggerBufP = new LoggerBuf.Params();
0 W* x4 Z# @  ~1 [. ]4 Z2 @! ologgerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */! m+ g8 \! o" M# S" c
loggerBufP.bufType = LoggerBuf.BufType_FIXED;' l7 v0 B% z& a$ |6 t* U5 G
! C; f: U1 w/ ~8 w* Q  K
var appLogger = LoggerBuf.create(loggerBufP);/ C) t1 @9 p: I5 U
appLogger.instance.name = "AppLog_Core1";. d# I- L# G& ?/ A! z
Defaults.common$.logger = appLogger;
0 W0 Q1 C% U. d& AMemory.defaultHeapSize = 0x8192;    ' w( A. _# B# i5 W2 e! j1 A
Idle.idleFxns[0] = "&LEDStatus";7 @7 \0 d  F" N7 H: F
Cache.initSize.l2Size = Cache.L2Size_32K;+ a$ I5 W/ D  z9 a3 c* r8 d
# D& L8 c1 G# ^2 w) }/ b1 O- 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 */2 o- v4 H5 O2 U. Y8 ]
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');0 G7 I& n  U- \6 M9 l
var heapMemParams = new HeapMem.Params();
+ p$ r. d+ N' c- w) V3 KheapMemParams.size = 0x4000;$ D. D4 K# |# Y; P  a

# f, `1 K/ Z% q' O) b! x) {. Uvar Memory = xdc.useModule('xdc.runtime.Memory');. Z! z& Y/ O8 a
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
1 v$ Y9 c# O# ^* H0 ]" T' h( ^. I& [+ A- O: o/ ?! J8 Q
我大约calloc  每次共计大小为5K*16bits,
; i3 ?* b# d; Q% q. h而默认配置才0x4000、需要改大。7 c  j: i3 W2 Z$ }! \  ^
) u" @+ F7 d% R% U" p' R" }+ e
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
$ i- m7 T( R  v' s& UProgram.heap = 0;
) Z  t4 s" @4 s; H6 |  s8 k; _9 sProgram.argSize = 100;  /* minimum size */4 ]8 c9 }! z. d+ p
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-23 12:56 , Processed in 0.041065 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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