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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
/ v! _9 K! J& F% ~, S! v3 G; F
% J% N8 b0 R' ]    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
+ a3 g8 D; [; g+ G+ v9 U
, @7 L; H+ d1 ~; W8 h其他程序段。。。。。
/ b+ _+ Q: f0 t! ^8 B5 K
& _9 z) h4 c5 P7 _# K   free(x_d);- t0 j/ i* ^- t. n

' E, x* w2 C6 ?使用DSP侧单独调试功能,验证动态申请没有问题,
2 m. s, P* f8 _( y# X, T/ A3 l, i* C" |3 s9 X' s& }
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
1 @  n; r, h  O. Z, [1 X

, x5 h) W8 C5 C+ k9 d
1 H, w) C: {1 W% _1 P+ |3 {7 l) ^5 T
) v2 c# `0 J1 Q" M' @! g
/ I: j- |1 @, M

6 o& T* T* _- ~. N: S# m, h$ y* K/ t

$ L8 y" o8 f) H6 R* q' R) e" S: }/ W; _/ H
% Q: [+ q% J1 K0 h
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明4 F7 {5 D2 F9 P& f9 `
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
; ^. N1 t" c) n- N4 b" r(不过疑惑的是,为何单独DSP仿真就没有问题呢?)' C" B2 A* d( k' V, n
7 g. o. w3 O1 Z3 Y2 y& ^
是不是需要在DSP.CFG中进行配置
. K& {3 C  H) O2 K, D2 j5 U我现在的配置为! P( u5 m7 q" u

  y7 _. v0 \) R1 P$ ^/** k- k2 v- o& [2 }8 L2 y
*  ======== Operating System Configuration ========
+ F  ?3 [! v% L5 ]9 w8 q */$ ?( q; w5 N9 E) M3 e4 q$ L0 z
/ k$ E) Z) r' d3 K( o/ Y9 @
/* no rts heap */- Q$ J8 E. u: g$ W) `6 @
Program.heap = 0;% `! M1 X/ u6 I* C; f
Program.argSize = 100;  /* minimum size */* j1 j7 t# d( G  k
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
8 R) G# P1 ?1 Z# q/ x1 ^  u4 S! D, @" P5 S7 `- i) B
/* create a default heap */
8 Q: {" {4 m' u( b2 Q1 fvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
6 y3 {- j" ~1 p1 R/ K, ovar heapMemParams = new HeapMem.Params();
2 x4 C  F. M8 V1 S- LheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大9 L7 ]+ `, [/ k
( T3 I/ o) O$ V0 ~
var Memory = xdc.useModule('xdc.runtime.Memory');: t+ G. m# s7 r
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);7 o! e: E# F1 L" z3 V2 B$ ^8 Q
1 X% ~9 e' s5 ^
/* configure System module *// M, e0 H: C( o) K" O9 M
var SysMin = xdc.useModule('xdc.runtime.SysMin');6 X) [: e$ e1 D& v6 }( F7 y/ M% }
SysMin.bufSize = 0x1000;( Z7 ]! \$ X/ x2 u3 b( d
SysMin.flushAtExit = false;
7 D1 c: B  \% h# k1 d: p6 @/ D( ?5 D3 I" N3 E; v9 d5 t  `
var System = xdc.useModule('xdc.runtime.System');7 Y/ N+ l6 O; k0 I) [. k* n
System.SupportProxy = SysMin;7 [  F0 Z( O3 |
9 g% n- M' s, {: b6 R' P" _
/* configure SysBios to use the lower half of Timer 1 */
5 G$ N% `% S: S7 v1 x0 Rvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
% y, T+ J/ ~6 M$ J2 W6 r" svar Clock = xdc.useModule('ti.sysbios.knl.Clock');4 l$ j* p3 ]# @) I' g+ x
Timer.timerSettings[1].master = true;) e, v8 z' h' a
Timer.defaultHalf = Timer.Half_LOWER;
) X/ e: s+ _$ g; B7 @Clock.timerId = 1;, b3 R7 U( f, n, [# b4 _

. }0 e9 I+ ]! t8 S4 n6 Y  d. U2 v& t" @% ]: M; @
/*
6 V+ Z! `- o+ b9 \5 h2 X *  ======== Miscellaneous Configuration ========
. c* K" b  I, `( K8 I  N+ g6 K */4 S9 Y! @: x3 b, U; p

  {' f' H" ^8 n' ~, @7 A/* set default diags mask */
3 t/ z& ]5 u" q) `var Diags = xdc.useModule('xdc.runtime.Diags');
7 F+ M  m; _2 w' wvar Defaults = xdc.useModule('xdc.runtime.Defaults');8 v% M* Y5 o( p4 d& F( ^" U
9 @. n7 e% i5 `9 _9 m) u
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;0 w& j& T0 q0 E) |! ?0 w& c1 E9 I
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;; [  y; h4 a3 m. }& [7 m
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
  J+ K+ h7 X- j# H# [2 Y! s/ xDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
% D; ~/ D5 ~* E/ J0 W) |Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */4 M. p6 H. D& S) \9 d6 g% u# |: I/ c
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;4 a. D1 b# n( m* G- A1 }7 k
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
. x. X+ t3 z& k' T0 {Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
# {% \8 W& G9 P* S+ M" sDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
; |5 T$ ~& a, f: \; KDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;  X5 ]- u. @6 V/ R% u% b
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;7 z0 N  q# \$ K0 b7 u3 b# C3 Y
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
) O1 f3 v2 Z8 ^/ ^' z' ?# k5 dDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
4 L$ X; Z* _9 }. N& m- ~Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
2 }2 Z. ?$ F5 Y' ], @+ B9 g+ J) g9 h# x" L) v3 L, g
/* override diags mask for selected modules */, H: E4 t5 K; u1 A6 t
xdc.useModule('xdc.runtime.Main');
2 I5 ]% f; s3 `# o7 IDiags.setMaskMeta(: q& z5 M7 |) ~
    "xdc.runtime.Main",, V9 j6 S2 u0 x
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
1 q/ Q% H9 ^( Z3 s2 q6 B' e/ e    Diags.RUNTIME_ON1 ]* u3 w0 v: s, u$ P0 I" `
);
, Y# h+ N+ h, F, M8 z( }5 ]2 M  C* I1 i# ^2 f
var Registry = xdc.useModule('xdc.runtime.Registry');
4 g7 {3 q2 v9 b$ D; ]Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
) [/ G8 R& j( K- a; e7 PRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;( K- A( u: M; P1 J3 O* E+ n0 ~
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;  e8 E9 L. h  h( `/ I  i7 @* E9 w
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
$ A- j& ?% g/ j
- s/ ?5 M/ C7 m/* create a logger instance */
1 _, y4 Z  Q& fvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
& r' y# X4 n. s/ w2 B: {var loggerBufP = new LoggerBuf.Params();
) _" Y& W* q0 ?7 t2 J$ @: `! ^; \' I4 FloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */- V2 h/ m1 q* {2 t  {% p
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
% g1 V) W% E/ S9 b& a7 e- p9 x& x% j0 Y) q3 \4 [
var appLogger = LoggerBuf.create(loggerBufP);3 k) T, z, O  R' a$ P& S  X& @2 K
appLogger.instance.name = "AppLog_Core1";
% Z6 C) g9 W5 b% O, m% lDefaults.common$.logger = appLogger;
+ r( P. ~+ |# G  L* J4 e% l  P; N. YMemory.defaultHeapSize = 0x8192;    4 u( v/ s+ J2 q' x
Idle.idleFxns[0] = "&LEDStatus";7 E3 @- O: ~7 U/ H& s
Cache.initSize.l2Size = Cache.L2Size_32K;. W% e) f7 P: }$ F
- j5 }1 V0 t5 d) z6 p$ g+ J; ]
回复 支持 反对

使用道具 举报

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 */
. ^) ~" b1 j! a6 ~var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');! M/ o) \" ^$ R; m# B( `2 s
var heapMemParams = new HeapMem.Params();3 o2 z: y& @1 G8 `9 s1 j( @$ V. m
heapMemParams.size = 0x4000;$ i; ]. v( O  n8 d* ]
( A1 G# q4 ^! ~% Y9 r" z- c
var Memory = xdc.useModule('xdc.runtime.Memory');
7 A# @3 J/ ]8 k- TMemory.defaultHeapInstance = HeapMem.create(heapMemParams);5 T8 M. Y7 B2 o+ [
+ j+ a( N$ o# A$ e/ u: A0 m7 |
我大约calloc  每次共计大小为5K*16bits,* d/ p; `8 Q. T% T4 y% b" n
而默认配置才0x4000、需要改大。, P* K# X( x# A8 E
9 `2 t5 P- G  c5 u+ d
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */' W* ~/ i  J/ ~, ]; I% d
Program.heap = 0;
! V6 j7 J# ^* Y# a% a/ iProgram.argSize = 100;  /* minimum size */( A4 S% {3 r% ^' L
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-4 15:40 , Processed in 0.050231 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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