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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构9 D/ h& _3 i0 y5 y
5 V6 E; u* u3 n- y) V
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256, ?* S. V5 K# ~* T6 Y! U* j, B! I

. z9 }" s8 G8 Z7 g/ l6 H: l+ C9 |其他程序段。。。。。( H4 u& ^% }1 Z  z+ N7 o8 }
! w! n7 F- f3 w7 [5 ^
   free(x_d);
( W3 x; o) Z4 K/ u0 W1 B" X
3 K  V/ B% V8 R1 Y6 Q+ p' L使用DSP侧单独调试功能,验证动态申请没有问题,
; F1 I  s$ h- T, j# f& j+ ?! R4 |; |3 _0 Z' i# d: u! X9 s% C
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。! V& L3 Z$ T" @4 h* k& \+ [, E
" H" j6 K* R3 H

- w. w* l3 G8 }, E( d6 n! a9 W4 \* J- ?" i

, I3 C8 M2 F7 e3 p% x* y$ o5 d( V. H( A7 ^) d* Y7 @! f
9 P3 C0 R4 `* P& c4 I! h5 a9 l6 P

; M9 ^. z# D3 W& Q: M- Y/ s$ o4 a% _0 `) i4 u  k
7 |* c! ^; N# K% s" w# S  C

1 [0 ^  }7 E( d; v. h; k* Y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
8 d; N8 ]" ?! O! V6 I* H, w, b我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
; u* V( z4 J. V& _(不过疑惑的是,为何单独DSP仿真就没有问题呢?)3 x4 `8 b  b, r+ j  y
( o0 p1 I! W9 N9 j' }- d* A
是不是需要在DSP.CFG中进行配置
4 E2 c7 Y9 M, S我现在的配置为
. G$ h3 I+ ?% [: ]$ o5 W3 a4 f6 ?/ `4 ^
/*
7 n, w% x9 _7 k  K* G: P  f/ K. k *  ======== Operating System Configuration ========
/ x% i  [( O* R- F. }$ k* L, w0 z */9 X; N0 ^2 B( k1 Q. H% Y9 }" q
# e7 \3 {4 b. n" o7 q. B
/* no rts heap */
" S& U1 d8 A8 p1 o8 g8 ]- A: |Program.heap = 0;
6 F1 c0 b; L8 m6 Z( qProgram.argSize = 100;  /* minimum size *// ~& s/ R- n" [3 @) }
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大9 U4 H1 _) F# j( \. g

: e& s* H3 Q3 p( L3 v6 _/* create a default heap */. G; F+ M5 {7 n! A* N
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');( g# ~" B8 C/ q" ]5 ~1 P4 O
var heapMemParams = new HeapMem.Params();0 o" I  ~0 K" F4 n% N4 v
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
  E+ V$ W# ~  S9 z1 p$ b" e( Y+ e- C- p. [% ~4 x; B0 ]
var Memory = xdc.useModule('xdc.runtime.Memory');+ B& P3 P$ ~6 m7 R/ b8 F% g  T
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);1 O. [" C! Q6 C; H/ U# W7 s: @1 W  P
2 d+ C+ U: r! l) t" D- d+ u; E
/* configure System module */
2 g' ^6 O2 r- C6 bvar SysMin = xdc.useModule('xdc.runtime.SysMin');
, H6 c  w( M) @! L# u" WSysMin.bufSize = 0x1000;
0 m# ^8 W7 A1 `+ B9 SSysMin.flushAtExit = false;
' F3 ~8 @, q3 L* c& S# }, s9 {, C8 L
/ r* U2 L( p) ?  @0 F7 f' uvar System = xdc.useModule('xdc.runtime.System');
5 S: a- m/ A. {1 p/ OSystem.SupportProxy = SysMin;
6 @7 i# j2 u; r( P7 t; d" C8 E* o0 C$ v# o
/* configure SysBios to use the lower half of Timer 1 */. }1 \( Y3 z  y( M( J$ R3 i
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');: n4 V; x; M5 u. ~0 y' l
var Clock = xdc.useModule('ti.sysbios.knl.Clock');" ~4 V4 C6 b3 l! h* r3 s8 T
Timer.timerSettings[1].master = true;1 f# W& _5 ~% f* ~9 T8 @, l
Timer.defaultHalf = Timer.Half_LOWER;
- v7 g5 G) Q7 V  K+ n- n7 r( e: jClock.timerId = 1;- T  |4 h+ [" M6 e  Q  m
& k- x( S7 E2 {* A6 C& K4 b3 f8 b' _! M

1 N9 H8 a9 z3 Q/*5 g' p, s0 c$ x0 w
*  ======== Miscellaneous Configuration ========
+ V6 J0 }7 {0 S: z4 h% i' \- t6 ?2 D; W */$ }4 f4 I# e0 X) p$ Z( t3 v

$ G* q% b) B/ E8 H- g, }$ Y/* set default diags mask */
8 J9 c, n; F4 H% |var Diags = xdc.useModule('xdc.runtime.Diags');
1 A7 d% Z# D2 e9 gvar Defaults = xdc.useModule('xdc.runtime.Defaults');0 x( [; w+ ]" v& n! s  f9 {

/ m5 w9 T% ~3 w: ?  f# SDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;: }1 U7 a6 B9 T; [% u+ W
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;& {' z/ h% D' @9 |6 s7 L
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;9 q* J0 n  L3 L, e+ I* W8 [8 ~
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
+ _1 p! g# u# r3 z4 v4 zDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
4 X3 i/ b1 G/ x# U' `$ |) j% HDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
+ a1 v4 W" H6 q9 F+ D; rDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
% K, T0 \5 `9 v# E# ?) m# pDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;* d9 o( I0 `* S* z* p5 a
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
+ T  x/ `& _/ n  a4 m' T4 G% ?Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;& |5 p9 J% Y5 P- f9 X' e3 |  l! w
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;1 p8 ~0 }* d; D9 V: @
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;8 _; K6 m: u( n. N$ v% o1 }  _- y/ c
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;; U7 u4 g% B' x: \
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;1 O! C: Y( q! J- y' i$ n3 _

8 C: a* }) o7 g3 O/ z/* override diags mask for selected modules */0 \6 a# k, D# y) j# ]6 @
xdc.useModule('xdc.runtime.Main');
& J4 \) \; x. ~3 f: eDiags.setMaskMeta(
5 }, B" }% C9 f7 |    "xdc.runtime.Main",
' X8 i1 a! Y& Z' f9 U) C  }9 a    Diags.ENTRY | Diags.EXIT | Diags.INFO,
* b, z+ N+ {( R, ^+ \    Diags.RUNTIME_ON
7 n9 y: S/ l1 E  g1 K8 c);
( B( i0 M. J7 r3 Z$ p7 E. f# m
* D# U) u  `; E9 rvar Registry = xdc.useModule('xdc.runtime.Registry');
1 ?7 g2 H4 C& J- ^0 E& K: eRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
$ w! R: O" u" VRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
: t) U& J7 O4 E- _Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;% d' G3 h, G! }# F
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
; K& N" @0 I. n4 V) _3 }* I
3 P, U0 t* G5 w" Z' u- Y9 s3 d5 K/* create a logger instance */
" n( _5 Q$ y  `7 }0 H( j: Jvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
! |3 [+ n3 T3 {var loggerBufP = new LoggerBuf.Params();' l$ b8 \; e0 t- i1 u1 h
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */) I5 X! n, Q( @' s: ?
loggerBufP.bufType = LoggerBuf.BufType_FIXED;5 O: i  u, H1 u3 j8 R$ l3 N
' C7 Q- r7 A  I6 ?; r
var appLogger = LoggerBuf.create(loggerBufP);
7 n/ Z  z- \  ?7 ~3 C6 TappLogger.instance.name = "AppLog_Core1";% B0 Q. N! c: d+ o
Defaults.common$.logger = appLogger;  U% \: ]. D+ J2 }( x8 i0 s
Memory.defaultHeapSize = 0x8192;    ( `# r  K, n) x
Idle.idleFxns[0] = "&LEDStatus";: a, \2 w7 f- h) t3 b6 @5 z
Cache.initSize.l2Size = Cache.L2Size_32K;
6 [: _! L6 Y+ j: w* b
& Q! p( n% v. ^) `; M1 c7 [
回复 支持 反对

使用道具 举报

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 */
- l; z1 r& R9 ]8 r, Z( Svar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
% x/ X; @8 O0 [; f1 c8 Bvar heapMemParams = new HeapMem.Params();
% b! }- k* c$ T( G$ z# KheapMemParams.size = 0x4000;
  K/ m/ a! z) t4 L6 y3 n# n+ X/ Z4 y! e, W
var Memory = xdc.useModule('xdc.runtime.Memory');3 U+ V+ b' z) o5 X0 l) t3 G% f( ^* Y1 a
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
' P6 G; ]% m: b% ?
  f1 _8 B6 M7 p: J) Y. r  L我大约calloc  每次共计大小为5K*16bits," ]# n& I" B+ j8 ^( D
而默认配置才0x4000、需要改大。: @7 R& d. }% P1 O- d4 Y2 `) S
$ k9 y1 B( v4 S
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */1 `4 @$ \4 L8 h4 G/ o
Program.heap = 0;0 V5 ~( K* I! C1 p+ }- [' z+ L/ P
Program.argSize = 100;  /* minimum size */
+ B7 ]8 \; V# y  C% mProgram.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 06:09 , Processed in 0.044960 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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