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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
! B) y9 h, {2 Z% a2 g" Y6 I
0 `, e! E, Y0 I5 F' K! s    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256) k& ~8 S3 u9 i4 c" F
8 g. V8 M; h8 P
其他程序段。。。。。
# s1 Z8 {, p7 T9 p- g0 _2 w' s
2 Q+ X8 }  t+ H7 ]* W, v   free(x_d);6 d" W) x/ G5 Y" k& n
2 ^  f! H- G1 c9 _! G
使用DSP侧单独调试功能,验证动态申请没有问题," ^6 g! z' [6 M  e% i/ M
% Z+ R; V3 h, S, q# y" r, O
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。1 N6 y. H0 L  N2 s7 @8 x% A

) ?+ B' F( z$ H7 h) Z
5 J6 }; h3 Z3 p/ i
2 z- B0 p' ^  Z* m4 w/ Q& y8 y. t3 |) e5 R/ w1 b

. ]% [$ V- h3 i/ q: l; A  \- J: N, _- [/ U+ e( `
# g4 }! q. p% {! E

$ z1 }, B& e3 I/ _: u
* z1 Y. N0 N9 m# Q$ w
! S* I8 m$ V( P
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明3 ?* l1 J4 o; h  j1 v
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下8 G2 ~$ b2 ^4 w6 d0 J
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)& l$ @: Q: A& T! O

. y9 B0 g1 e3 F& _$ \  q5 ]5 f是不是需要在DSP.CFG中进行配置
2 \+ S. C" w$ D) m8 ]) m8 i% |我现在的配置为
" S* E5 C" }0 F3 i8 X( e4 Q9 Q3 E' |0 P" U' M/ M
/*  F/ _1 z& U/ E( n
*  ======== Operating System Configuration ========
; F& |. M! t& @ */2 u  }' @, [( l

  c, k3 f2 \1 |& E& x+ A/* no rts heap */* _! b! v$ C8 i7 ]7 h% n0 t
Program.heap = 0;
: I$ [: m$ P- Z; A1 G1 qProgram.argSize = 100;  /* minimum size */# T  P$ Q% ]* B6 T
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
7 Y$ b' \" t+ x8 a6 F2 u+ b3 }3 H
- C/ l( U+ {) \" T/* create a default heap */
6 @9 z3 w) V2 J# g2 E/ Q8 ^" H% \) _6 zvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');+ W9 t+ d3 P; b$ R/ W7 S
var heapMemParams = new HeapMem.Params();' b- P) Y2 ?0 v8 a" Q. j
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
- d5 {: ]: t9 s; l, X. w( m- ?6 B: M2 u
var Memory = xdc.useModule('xdc.runtime.Memory');
( p7 w2 p4 ]9 c! X7 p; z# ]: GMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
9 Y4 t! i- w) `  A/ d( F* @
) K+ r" o' S2 C8 O. M, k/* configure System module */
7 F- r) Q- `( @& G* @  Gvar SysMin = xdc.useModule('xdc.runtime.SysMin');
( M# k0 c+ s: g3 a, }SysMin.bufSize = 0x1000;* J9 C  t: S1 o4 a
SysMin.flushAtExit = false;7 m6 |4 T% e8 w
$ L, r; f' f7 @, [
var System = xdc.useModule('xdc.runtime.System');
4 r0 x- t4 z/ H2 `System.SupportProxy = SysMin;
. n% m* e" g+ ~
3 E# |3 p, p, R+ k) U/ y( |8 ~/* configure SysBios to use the lower half of Timer 1 */
5 q. l& P9 o* b, a( ]8 P5 rvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');3 R0 p# Q- u5 R/ J5 D, E
var Clock = xdc.useModule('ti.sysbios.knl.Clock');0 f5 D& k9 l& \, s& f& ], F* }
Timer.timerSettings[1].master = true;
+ u  x2 i; i1 U& y+ yTimer.defaultHalf = Timer.Half_LOWER;
( n4 N$ H3 H* i  R5 e% PClock.timerId = 1;
/ _, L, ~' W1 [) d, A! d* l, n: N, [5 W+ p0 u- K0 K

8 S# A4 S! t. f% w  W+ T" G/*
/ P7 n8 t4 f: i* _: j# Z *  ======== Miscellaneous Configuration ========& [" G9 W9 X+ }
*/
7 J+ G# h6 R; u, e$ Q6 q0 m
2 J: m4 Y, s( n* _- m/ Z/* set default diags mask */  L7 J) ], N. a* `1 M
var Diags = xdc.useModule('xdc.runtime.Diags');" a  j1 i* u8 U$ H
var Defaults = xdc.useModule('xdc.runtime.Defaults');
8 c; P4 @4 m6 Q# p1 e4 Q/ r  D$ G! z. \) i, a. a/ u9 e- P; z0 s% g
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;$ C4 G9 l# Y) ^7 U
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
6 y" i: m/ N4 [$ ^0 v3 e; GDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;% g, [0 y) M: \; U3 V& ^
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */3 ?! Z% ^' z& i1 h
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
  M  j7 Q, @+ z9 D. `Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;, O8 P& g5 J4 U, S; \7 k- O
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;  V/ l0 D! N/ I/ @# j
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;% Y- u% d  B# w. L) q# s
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;; m1 E$ ]3 X% z1 u  U# S- C- L# {
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
$ B) s7 K' \/ SDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
: b4 _# f, {- W: x, H; oDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;7 D; s+ B" M, g( c0 i+ j- B* F
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;2 [( D/ M+ g$ D. ^! A7 k4 M
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
8 F' S9 n) Z: g* T% W( r) `- }8 H) \5 W' D, ~5 q% ^7 p0 m
/* override diags mask for selected modules */
) o$ H- c& W0 z/ z7 p+ e4 Nxdc.useModule('xdc.runtime.Main');
9 P6 ], W! z4 T3 w% V% ]Diags.setMaskMeta(% A* @. k) ]; E" U/ P: q5 ~
    "xdc.runtime.Main",  H+ k8 _' o. O6 h* ^. o1 |" c  ~4 e
    Diags.ENTRY | Diags.EXIT | Diags.INFO,! C2 A1 ?$ f0 @/ z
    Diags.RUNTIME_ON, w' Y! }) N# [- b
);
% P1 v/ F7 z3 v# S! b5 X. o/ W4 z7 y2 E5 Q0 ?
var Registry = xdc.useModule('xdc.runtime.Registry');
! r. N/ A& ]- e; h& m: LRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;$ Y( W: x7 F6 V
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;( G4 u, P. X6 K- K5 s
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;/ k3 F& |" J! Z" s# }- P. _
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
& I% G' h  D  A+ V4 v- H& [; m8 w) w! M6 N" ]. P+ ]  A3 ~. Q! s
/* create a logger instance */5 d2 C3 w% S* K
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');  W+ k" Z+ B! ^7 U$ V% H
var loggerBufP = new LoggerBuf.Params();
3 G% d$ I3 ^2 B' R7 b0 o7 r) cloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
+ R# |  ?  B+ U. k$ E  WloggerBufP.bufType = LoggerBuf.BufType_FIXED;2 ^8 `3 p7 S5 K- c  C& p) }* q8 j
* I9 [6 t. L. D, j+ f" p, S
var appLogger = LoggerBuf.create(loggerBufP);
  y6 x' z: `8 }1 ~) Z1 P* u8 M4 @4 w& kappLogger.instance.name = "AppLog_Core1";
7 r* ?* U( a2 ]; z. a; S# r3 E- {( jDefaults.common$.logger = appLogger;
" C# l* ?+ N; M6 O& f% r! g7 V7 KMemory.defaultHeapSize = 0x8192;   
8 m; {4 `/ W) b# U. @Idle.idleFxns[0] = "&LEDStatus";* I) T( R  p" r- O0 U8 D
Cache.initSize.l2Size = Cache.L2Size_32K;: p) l" ^; v, z/ I" w* k

! `" x/ x4 F* F) R
回复 支持 反对

使用道具 举报

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 */6 r- x8 A/ u, V7 i. p
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');3 N9 o9 l; L& }7 c
var heapMemParams = new HeapMem.Params();
1 v1 I$ Z) }. Q! nheapMemParams.size = 0x4000;
( d3 f; }. z( d! V, ]  c8 o% j" |# e  W- D
var Memory = xdc.useModule('xdc.runtime.Memory');5 A) ]7 j% a1 J+ G
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);' r. V" e" |6 b- }: \+ F

3 F7 J3 L5 \6 v) f1 l我大约calloc  每次共计大小为5K*16bits,
: a8 z0 L, Q6 u* W  f/ k  S' F) D. g而默认配置才0x4000、需要改大。4 E: H# a" ]2 E% f* I$ |

. i5 B/ E: T* F- E. Y* k& \  ?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
# V9 `" z7 P& P* XProgram.heap = 0;1 `2 V; S* f" \% M1 x, W% X0 k
Program.argSize = 100;  /* minimum size */! g+ N# T% ~( l: q8 R
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-12 23:15 , Processed in 0.042475 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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