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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

. T; z$ \! C. ]* Z1 R    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2562 B6 O9 M  `! I9 ~0 H! Y# S7 ]

- G! |5 ]$ B, j( e2 s+ F其他程序段。。。。。. Y; Q3 J- F$ O4 l

& j7 n0 N: ]1 H1 ~* t9 g   free(x_d);/ ]# k; l( U/ t* V

: Y# a( ~3 L$ z& H& W使用DSP侧单独调试功能,验证动态申请没有问题,2 u7 V, J( d' W( K0 I
: w2 y* p+ q4 K
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。: x. m6 K( P! S! d% K- l* V
: Q8 v( R# @7 j+ M. p0 `
0 d- t( |7 ?6 d( \2 ^" \/ ^( U& i
# `; I2 {5 Y% J3 g3 @& A

! [7 C1 G) z9 s" o7 r) p9 S* e2 A5 ]. y3 H

# ~/ Q# |1 B7 T- O+ F6 O  G2 c
5 R6 N- _& D- o! v, N3 d  Q; K8 G' S7 v' z7 ~

: {+ k7 \+ W: x$ |. o) U: Z+ z" e+ N2 A' X# W! `( g
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
  x9 {. I7 l- D0 i0 U+ B& x6 ?我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
) |, j# |6 ~" h/ M4 O" ~(不过疑惑的是,为何单独DSP仿真就没有问题呢?)' r9 C. q6 k- A7 e) k) }  d

& X+ E& h/ ~3 H' x是不是需要在DSP.CFG中进行配置
4 ], |; F$ U5 Q" R7 E: h1 ?9 n  R我现在的配置为
4 l) D3 [/ ?: D5 T# k- B# M6 L; G4 S0 x4 v9 [
/*
$ y0 ?0 \) ~$ G3 H( q *  ======== Operating System Configuration ========4 f9 t+ q8 V1 s6 `3 Y5 W7 \% h$ N: Z
*/& W% ^. G7 P) l' v) Z

. t( K+ }! s9 d1 {6 g' q. e& y/* no rts heap */
$ ^! W! ~9 F& r9 ]0 @* bProgram.heap = 0;
" z1 ~1 d0 m2 d8 l$ kProgram.argSize = 100;  /* minimum size */
% [9 S$ \; k( u% QProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
# i6 r5 n8 `4 I( {& ]6 G' R3 D5 a) e; r' h2 G
/* create a default heap */, t& y: \6 U6 _# g/ F7 k
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
6 \# ~0 [* j: ivar heapMemParams = new HeapMem.Params();
; v% F8 B/ }* nheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大) S: T% C8 s% h9 K
  k5 b# p5 R; a) d$ c1 k- E; p/ Y
var Memory = xdc.useModule('xdc.runtime.Memory');3 J: V) U3 K2 e
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);: o$ P3 k( m  R. e0 `% r
# R  n- w* Z4 l6 \9 P' l+ a
/* configure System module */
3 |9 \3 A8 P& K( [: }, X8 r% xvar SysMin = xdc.useModule('xdc.runtime.SysMin');
% q  S* {' y+ t) ]% P% ?SysMin.bufSize = 0x1000;
; U' k/ |" g# ^7 T3 ZSysMin.flushAtExit = false;
3 T4 Q  S- j8 c; ]0 l0 N; K- k( F* W
var System = xdc.useModule('xdc.runtime.System');
- R5 T$ C, ?; i" E. ]& PSystem.SupportProxy = SysMin;( [3 M( t1 u0 K

: z$ [2 W' @! R  d/* configure SysBios to use the lower half of Timer 1 */8 q( r4 I! k0 L, G
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');) F3 V9 }9 E' U) j& M; I' h
var Clock = xdc.useModule('ti.sysbios.knl.Clock');5 b/ G, I0 |( ~/ M8 ^8 x
Timer.timerSettings[1].master = true;- S' y8 v& ?  z4 n* K
Timer.defaultHalf = Timer.Half_LOWER;# C1 I$ \8 S+ |* U5 D4 w
Clock.timerId = 1;7 J9 x7 @9 k. T# e5 M  e
: i: f2 J9 i0 T: I0 N' L% \7 u* [

6 E& Z% P1 u( A; ~/*
7 q; _: B7 t+ M/ e8 g *  ======== Miscellaneous Configuration ========4 {5 L0 G+ h8 q( d
*/) c; V' u  `6 T7 Y
0 ^$ E! c' Q  H7 h7 e7 w  E9 E
/* set default diags mask */
$ G+ |+ \  s. s' e3 o  B6 Gvar Diags = xdc.useModule('xdc.runtime.Diags');7 {; d2 h) }! n' ~1 X" X0 T* K
var Defaults = xdc.useModule('xdc.runtime.Defaults');
7 _: x/ k. `) g
/ h" ]0 _. y8 z4 z/ o, RDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
% F, e7 S# }5 I/ u" B3 l, PDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
. t. N' G3 ?- W) u/ A1 |) [& qDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
& f' e) J8 y, CDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
; a/ Z0 W+ ^  p* A7 JDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */9 D5 w- h% `* o1 _/ H, m
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;3 G7 n; U, \# o8 |- ]
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;( T4 v) ?; g) V/ o$ k# l* ^
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
  s/ E2 _7 r; K. a. wDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
% a( P- B' F- v* J' `Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;! R! J9 |) Z) ^; J
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;. ^3 D8 f- o. W4 |
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;* b% F) o" i( r& X6 `$ C
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
( H2 R$ m6 _+ UDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;# ^( h! t# y: r- Q# t" n/ m1 ^

( I- B5 s( i" m! t" f" W/* override diags mask for selected modules */  K( ~, B1 V7 z1 Z( v- j
xdc.useModule('xdc.runtime.Main');
: Z% D; ?; U0 U( DDiags.setMaskMeta(
% P2 _2 X6 ^) M9 o    "xdc.runtime.Main",
1 w) {+ {* {- M" b9 @" f5 D    Diags.ENTRY | Diags.EXIT | Diags.INFO,& @' _) n. W/ e5 G$ F, V  |
    Diags.RUNTIME_ON" M* R. l) ~) Q
);
3 E$ e" h( I# w3 u! `7 K% x, ]" v6 H1 J1 E% g: P
var Registry = xdc.useModule('xdc.runtime.Registry');+ Y) z5 M2 m8 R- ^  \2 Q: Z3 f0 j5 R
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;8 Y: g9 ^' d+ K+ F) L& r
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;7 S6 V* u8 d1 Q% b* ^, H
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
1 @  T& W! j- d5 r8 wRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
) z! y. n/ j4 F- ]) }
5 A8 i8 y- r$ ~8 n: ~; M5 j/* create a logger instance */8 b5 n& u, v3 Y
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
. Q& ?3 D% b( s& o. {( @8 w7 Q: m8 u9 tvar loggerBufP = new LoggerBuf.Params();
( r( Q- M) \2 p# g$ u3 `loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */3 z. }  ~8 C4 g* H
loggerBufP.bufType = LoggerBuf.BufType_FIXED;. L6 d. o5 Y' e8 T% m3 H

4 n" o6 ~% r9 m$ L1 P% w5 tvar appLogger = LoggerBuf.create(loggerBufP);
- ~! D2 x$ F6 ]7 i) dappLogger.instance.name = "AppLog_Core1";7 e8 m0 n1 B& ?3 b% j+ f
Defaults.common$.logger = appLogger;% K5 z" A' Q* s6 ?7 y7 u
Memory.defaultHeapSize = 0x8192;   
0 D5 q1 d: Y  ]* k, ?Idle.idleFxns[0] = "&LEDStatus";- q% E; D0 g7 ?2 d. w. m
Cache.initSize.l2Size = Cache.L2Size_32K;' k! m/ e9 a  a7 v* W: B0 a
% s8 c5 |3 O, k
回复 支持 反对

使用道具 举报

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 */" e( Q: L; V' t) i) W0 L
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
0 `; s) q# A' ]4 j6 E/ ^, \. {var heapMemParams = new HeapMem.Params();6 y8 I! d# a7 u0 o# _( w; ^
heapMemParams.size = 0x4000;
7 q! _5 m- @( h7 l4 n# u% O
* j" Y& P- e9 f' H* lvar Memory = xdc.useModule('xdc.runtime.Memory');
6 p! ^% K$ b4 ]0 V; C" x; d0 k7 eMemory.defaultHeapInstance = HeapMem.create(heapMemParams);. r6 G& @. y0 D. F

7 K. a' x5 [+ v" W我大约calloc  每次共计大小为5K*16bits,1 J" D2 d. k2 t  X, u) V: o1 J
而默认配置才0x4000、需要改大。3 o9 z( \/ D% t* u7 }1 ^
" k/ `# V: i2 }' Q$ v9 i
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */( a0 c& v7 v3 X$ Q2 d
Program.heap = 0;! n8 \; v6 o& Z
Program.argSize = 100;  /* minimum size */
# e; u4 P- C( d8 w+ E$ Q# |Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-30 08:17 , Processed in 0.040450 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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