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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构4 g/ N1 y, {" E/ q( E5 a
5 [' q. ^9 o2 Y
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
9 R$ ~# u4 [7 j0 A9 |; A3 W
! k6 m; _0 q2 Z4 Q/ U  W其他程序段。。。。。( i! F* o6 y9 h' `+ F9 B) O
( i% }* I; ]) P# r  d) m5 `
   free(x_d);
3 q4 K) J# m9 y; _+ E; q1 B& O5 Y4 {2 B. a+ e
使用DSP侧单独调试功能,验证动态申请没有问题,
2 x' U1 H" m! `/ ?3 |9 J4 Q0 v0 ?( w& p7 t! |5 M
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
- R  A, e/ I. V2 N; r
1 d# j2 m0 G8 B" I4 v
' x& q! t6 v7 F- ~  \/ [
  \+ Q+ Z0 N- ^* K$ s' l& g

, O% d/ l; h! c& c$ @$ D4 W( p7 @; \' E* x0 E" J4 G4 l& x

5 l5 V7 @' v2 }' F
1 n5 X$ D: I% |- U0 U1 |/ `( M. ^

8 O- S. y$ R; z6 H  D7 F/ p5 t; A& a! n- l$ g* `; N
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明9 n( R8 S# j$ |3 s
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下; Z* g8 u$ {& [! f
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
0 g& C/ f5 h& q2 U

# l3 Y! w* e) Q4 H0 [  k/ X. z是不是需要在DSP.CFG中进行配置
. {( z% u  |2 V( {我现在的配置为
: X3 i, |; O3 M0 J( F7 F; m0 L* y% f$ B' E+ Y
/*
( w2 ~5 y4 T0 y0 k+ T! N *  ======== Operating System Configuration ========
5 z$ x. J" a) x0 l */
1 J+ i: w  \8 k* O0 W8 |
) F6 k/ k- K$ R+ c+ _) K! q& v/* no rts heap */
3 q9 K+ @# U6 V4 `1 s  }" hProgram.heap = 0;
, u( w! k0 F+ y( T  ^Program.argSize = 100;  /* minimum size */
: {* W0 L1 N3 k7 C% |/ }# v  B( N! \Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大3 O" N/ n  D7 N) z2 W8 O
) j2 N8 h" q  M- S
/* create a default heap */
5 Y4 s* O0 G* T8 ?1 l! yvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');8 x  ]: A/ J; p/ f1 s- \
var heapMemParams = new HeapMem.Params();
7 b& z& s  j" d9 {heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大; T' Q0 \+ J* |( k! q
, b4 F2 B# G0 [& \+ k3 F
var Memory = xdc.useModule('xdc.runtime.Memory');
% v# J1 O6 u# j7 ?- AMemory.defaultHeapInstance = HeapMem.create(heapMemParams);0 u# Q, ^) t% c( G* f, }
  M9 h/ D9 K/ n7 y
/* configure System module */
3 [& F6 |- P! i! {1 G: ivar SysMin = xdc.useModule('xdc.runtime.SysMin');
/ E+ i( P+ R, C8 M6 f) gSysMin.bufSize = 0x1000;' k$ x$ d% U6 u4 P: X" B
SysMin.flushAtExit = false;+ b) e0 b! {( d8 |8 F

1 u  z( {& R, ]8 d8 X: a3 Hvar System = xdc.useModule('xdc.runtime.System');8 e4 q5 T! P7 y- W9 [: G
System.SupportProxy = SysMin;
% j' q- e) @: I( X. q3 |, k0 F6 }  N5 X. Q, |
/* configure SysBios to use the lower half of Timer 1 */5 i8 j$ p1 I/ p4 f5 ^
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
/ x2 v% o3 r$ Y& q6 Z; _var Clock = xdc.useModule('ti.sysbios.knl.Clock');0 x# v3 a) j" b3 q
Timer.timerSettings[1].master = true;/ R% R6 Z! c2 o, o* K4 a
Timer.defaultHalf = Timer.Half_LOWER;
' g$ q+ j) W; M, c/ cClock.timerId = 1;& z4 k( g7 M5 ^  ~
1 j8 M) I; v5 d- f6 Z/ l( e3 I
& |) ]" _9 d. y6 S
/*
, h* I5 b" ^: B# H* y  G *  ======== Miscellaneous Configuration ========
; @7 n4 H* O3 U/ x */
: N* r# M) [' S- L) H5 m' Y
0 B* k* M) F1 E5 w, f/* set default diags mask */
$ }% ?8 D+ h! p' V0 w: e7 c' l' Zvar Diags = xdc.useModule('xdc.runtime.Diags');" H1 g! d% K7 w) e' Q' d
var Defaults = xdc.useModule('xdc.runtime.Defaults');# f- M. }3 H; E  f2 \
- ^; o) A( a$ o8 w/ x- F
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;! J, N" C: o8 X7 m- N/ B6 L
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;, Q( [; ], [: x9 k. T  d) P
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
5 t- N- g9 J3 ~5 GDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
% L- B$ U7 u" y+ _: j4 s9 _* hDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */  `' l* H! b) m, @- U
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
" Z9 j9 c) q! a: v" r: t$ bDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;9 X* o# s0 d/ g
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;* F- h% X# G0 |- x
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
  n/ J2 i, X8 D5 n; ^/ n. c/ ~Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
' E6 s4 x& N/ Q( oDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
. U& ?. I9 q( S) |. l! l4 d: sDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
' o. m* l# p; ~0 T3 mDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;! C" j7 P% U7 m& u; C2 I' `2 p
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;$ F& _* m, [( Z' p1 W+ e, d6 h( C

- L9 q8 Y# a" p  b, j/* override diags mask for selected modules */
2 P9 s3 L  a: F1 l- M" H- qxdc.useModule('xdc.runtime.Main');5 E% ~7 \9 m9 v( T5 `1 L
Diags.setMaskMeta(% [0 b* L9 p+ \2 z
    "xdc.runtime.Main",7 F4 e4 _* W% t
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
' H# f  N) X: U0 I5 l* }/ U. n    Diags.RUNTIME_ON  }' f0 B5 e+ s' v& ?
);; d& E# E- f& {- e/ F7 l. |( N3 G7 c6 f! l

4 `" t  W& C% @var Registry = xdc.useModule('xdc.runtime.Registry');; B9 C; s% H# f" c6 n
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;9 I& C) A8 B8 }' L  ~. z' {
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
  u# h' @% b. JRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;" y3 ^( ^2 E) c$ p  u5 r
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
( h0 ~4 q2 X, p1 v6 e, R
% L( x# }; ?- M" o+ x/* create a logger instance */
3 w0 x1 A) O5 u' @var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');; ~6 G/ i/ @2 J; @" z
var loggerBufP = new LoggerBuf.Params();, _% M5 G( o  Q/ K3 h7 b: [( \
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
# A; n! _+ X9 b9 J0 gloggerBufP.bufType = LoggerBuf.BufType_FIXED;3 s3 G. f% ~0 @$ C2 X! v9 t

9 I. I' o" j+ p* B3 h; s: G1 Y, mvar appLogger = LoggerBuf.create(loggerBufP);4 Z4 g; p7 ~& W% g8 N1 i
appLogger.instance.name = "AppLog_Core1";
/ \' v2 d2 t/ z& B+ K% dDefaults.common$.logger = appLogger;
" U* o# r: [/ q# L5 V; kMemory.defaultHeapSize = 0x8192;   
2 B; n5 X* F) a) D5 |5 l! oIdle.idleFxns[0] = "&LEDStatus";
0 Y5 W6 B4 Q- B+ h/ qCache.initSize.l2Size = Cache.L2Size_32K;
+ k+ n/ h, @% Y- g
$ p, u+ M( F6 ]; [# z' o7 J/ a$ X9 W
回复 支持 反对

使用道具 举报

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 */
9 F+ o' Q4 R- C8 H4 K; x- Xvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
$ u5 x$ A) G3 Q+ V! evar heapMemParams = new HeapMem.Params();
3 A/ u7 r9 Z8 D* Q* t1 F; U- l& @heapMemParams.size = 0x4000;
- m3 Y2 [1 s# O) R8 o6 n
. Z2 T5 R/ j0 i5 lvar Memory = xdc.useModule('xdc.runtime.Memory');
6 r% \" l+ p1 u# j0 jMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
: e) A! V8 F; r0 Y, }7 {0 R- l
3 o# J# i+ B, a( }( _. G# X* D我大约calloc  每次共计大小为5K*16bits,( y0 ^0 q5 y( f2 Q
而默认配置才0x4000、需要改大。* z1 D) U4 u. P8 _
+ N8 W# t1 J  ]% ]4 F( L5 u% `
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */: r! s$ p9 S8 b8 n# {
Program.heap = 0;
6 M0 n3 D$ J* s, y* p" F9 g' rProgram.argSize = 100;  /* minimum size */% C0 ?! [3 s5 ?0 z5 b
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-25 10:21 , Processed in 0.042390 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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