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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构. T! d1 U, D4 W, L, N3 F% K
) L# k' A( J. j, [
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
5 u0 a( g" Z" s, G! f6 ]: U% y$ {, T3 N' h6 L: _- O
其他程序段。。。。。
: I& b- c) B! P% d2 ?" e4 d
( Z6 ?! B/ ]# h6 Z0 F' a. H   free(x_d);
- Q( Y( c% P. R0 X1 [. c$ k; w
: X$ _% I: X5 {- h- \5 u7 j使用DSP侧单独调试功能,验证动态申请没有问题,& v* e+ E9 J# c( j4 a$ I9 H

2 @: t, y4 f2 ]2 C+ v4 n7 k" M  f但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。2 O& }; |7 d7 }
8 l! R0 x7 `  S) M
) [# |& _: L% \0 C. e1 U( \

2 D' B1 ^! S4 x; M, n9 J; o; c) Q

. }0 W# M3 ~7 E# [& n# q4 b% W+ e, m; Q) H" r7 C2 t' A  |
9 z6 K1 s% |7 r

/ H9 ~7 c6 m( ^) e4 L! Q/ O' T  n0 P# @

; @2 n4 `" \0 L3 B! L- e
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
+ G5 ?/ V; M8 R+ |  W1 q我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下; w9 A- b) }# Y4 v& d* k/ ?, g
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)0 T2 R1 W4 I2 F) R8 n
# A0 d$ P4 }2 Z: {& Y/ N
是不是需要在DSP.CFG中进行配置
  W% t6 E' f$ p5 n# U我现在的配置为
* j9 ~1 f" M3 H$ U* s
9 D7 T$ H$ A  c8 B0 U- h+ N: I/*
) r$ Z# t& B7 T5 A" U" i% Z) X *  ======== Operating System Configuration ========
* M! h& Y6 f8 ?6 \+ A, S9 J( z */; ]3 V) Y" I  i* k7 ^9 g0 a. W
0 Q+ V/ g& X4 ~: p
/* no rts heap */
/ b2 K/ t; q8 V9 ?# f, vProgram.heap = 0;
8 k5 a" J$ h. oProgram.argSize = 100;  /* minimum size */; \0 f/ D) c$ |
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大% @5 K6 _* O/ N8 o

. i; O6 K* y  }. X% l/* create a default heap */
6 y' ]* F8 ^: A; N1 uvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');8 P9 ^( `% M/ _7 L. q* M
var heapMemParams = new HeapMem.Params();
! K, v" L7 y! o$ u' ~) Q; theapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大( C5 o1 @( T! y

9 I4 s6 I+ b7 R; D5 @' p
var Memory = xdc.useModule('xdc.runtime.Memory');8 s! r0 q1 w( F% ^. N
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);  y6 x8 u7 p6 j* t$ b
& u$ Q0 m: V# W0 n
/* configure System module */
% \$ ^7 N& P1 Y2 x2 wvar SysMin = xdc.useModule('xdc.runtime.SysMin');
# V8 e% }7 O1 U; A* SSysMin.bufSize = 0x1000;5 W- P( Q/ c0 m% \* M5 ]! x+ |
SysMin.flushAtExit = false;
$ P& C" N- a/ J9 f7 N9 r" t2 n* Y! ~6 p  C( _7 L1 l4 Q
var System = xdc.useModule('xdc.runtime.System');
5 z6 }  t0 ?  n9 b7 N$ ^System.SupportProxy = SysMin;
. \: t9 R, }5 k4 h! N, f5 k; }+ i+ O. o+ K# t; ~) V
/* configure SysBios to use the lower half of Timer 1 */: N- N8 n2 t9 m+ ~
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');# W1 H0 l+ E8 H: ~" h
var Clock = xdc.useModule('ti.sysbios.knl.Clock');+ Z7 W9 A' i1 O: D* ^
Timer.timerSettings[1].master = true;1 h4 V+ |& n$ ?9 Q6 v9 l# D
Timer.defaultHalf = Timer.Half_LOWER;8 [: b1 v) P  N/ a+ y6 v
Clock.timerId = 1;+ m: [6 N; D8 K

# c1 q  U5 b; A! G2 G  k
* X! t2 Z( u- S0 W/*
* }- ?0 v# x8 o" H *  ======== Miscellaneous Configuration ========  k9 X7 B/ W0 t6 m8 Z5 M: j
*/
+ n& z8 d( V; b7 j8 S" e: l& }0 z0 G2 f. G* q: g2 Q
/* set default diags mask */" `7 ^" b$ ~' v5 B  m
var Diags = xdc.useModule('xdc.runtime.Diags');
, p+ C9 O# ~. n0 x  v1 G. evar Defaults = xdc.useModule('xdc.runtime.Defaults');
) V+ B# ~) ?% i. }, w7 Q
. F8 U3 d/ c% T' C. n0 |- TDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;  c  {; h$ N5 X3 }! U% ~! X8 T1 q. r' Y
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
+ ]# S) o- f* a+ n1 r$ J/ Q" L( @Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;6 R( X% E' N- }4 h) K, e) [6 I8 U
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */* A, B0 R8 n4 y2 t$ Y
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
) d1 C* _7 g8 x2 {2 b- T) bDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;' K; }; |$ T- O7 x" M( b
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
+ M1 q; A# N$ aDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;/ X$ ~* `* E5 J, n& u5 x, S  B  e
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;) A1 F" t: I9 l% u; c6 o
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;0 M0 |( [& x; |0 ~9 m
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
% ]+ {4 n9 ?  e$ x$ t0 uDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
* \* B2 S0 G9 E7 Z- sDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;! ?8 g0 E, q9 M" ?
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;- ~0 T7 B+ h+ O- z1 v5 h
& W" U: G" V& L  c
/* override diags mask for selected modules */9 O7 l. H$ A+ W+ g4 G
xdc.useModule('xdc.runtime.Main');
+ j# ^7 `( m) dDiags.setMaskMeta(- u2 m9 a: V" {: M$ J# E
    "xdc.runtime.Main",
% o1 x/ g8 }3 q  D    Diags.ENTRY | Diags.EXIT | Diags.INFO,
9 @- x# l* u, M/ r$ E1 r    Diags.RUNTIME_ON* Z6 X& D  e$ K# U: J2 ]
);; L, ^- }! @2 O6 n; H
$ z' u$ ?. P( E6 ^8 D' P
var Registry = xdc.useModule('xdc.runtime.Registry');0 c- V+ Z5 g& g
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
8 C7 U- j1 }/ _+ H0 j: T6 e' W' HRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
9 ?" \+ ~0 c  J3 w: f& b* I5 XRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;, b3 y4 \/ |) \1 q
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
) k, c1 `: c7 ~& y' S, B
0 Y( o# J& O' y  S2 s+ v/* create a logger instance */! ^7 a4 y) S% M9 r
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
' v' T) ^/ Y$ L+ d, F( Dvar loggerBufP = new LoggerBuf.Params();6 J. E8 {9 k6 [0 p8 ^8 H
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */3 ~$ ?% K0 v/ W- P  K* `4 _1 K8 W
loggerBufP.bufType = LoggerBuf.BufType_FIXED;& p, U# [1 Z" r
# G) V3 i8 b) E! C
var appLogger = LoggerBuf.create(loggerBufP);
' I7 @& ~4 p# [% ^appLogger.instance.name = "AppLog_Core1";0 Y; n6 ~' L4 d( g
Defaults.common$.logger = appLogger;
- k$ K9 D2 Y! N6 `- g  @Memory.defaultHeapSize = 0x8192;   
: h- b6 Q7 _& h% d" O* [- U" J9 rIdle.idleFxns[0] = "&LEDStatus";
5 C, v. A1 n1 @Cache.initSize.l2Size = Cache.L2Size_32K;
6 f. e+ b9 `4 T  o# c$ ?" P( k9 l. _3 ?- k5 z
回复 支持 反对

使用道具 举报

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 */
( c1 F% O- T: J( m) w) lvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
0 @0 k. |  ^! Q1 K7 A1 v' Kvar heapMemParams = new HeapMem.Params();- [5 d( v3 [# J& g" n- ^
heapMemParams.size = 0x4000;
! O  d' b4 }3 s% r% R( E
0 d: n& A/ j0 D) hvar Memory = xdc.useModule('xdc.runtime.Memory');; ?( N' L; T' k# t4 j& U8 B
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);/ Q$ m* T& Y2 p/ e# d$ b7 [4 g& D3 }
3 w3 ?. `; ~: n
我大约calloc  每次共计大小为5K*16bits,9 ^) X2 r% b# `: Z% B! c: [1 {
而默认配置才0x4000、需要改大。
$ u" R" V/ T) S9 l1 n
8 j$ C4 j" x( K5 ~) L
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
6 H8 Y+ r' H+ j" XProgram.heap = 0;# ]& N$ R2 f! G
Program.argSize = 100;  /* minimum size */# H& s; |* i6 z. b% E8 B
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-15 19:36 , Processed in 0.042175 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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