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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
% _& w) u6 j& T6 Z3 `6 d6 ^0 l4 x; |3 Q6 l6 J( E
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
' z7 U' ~/ i% Y6 H# p2 W! h
8 l' @1 l/ S7 z其他程序段。。。。。8 E# \, s2 {2 Y3 M, T8 I
1 r2 `5 [# e( n! j# }% n) S6 \
   free(x_d);
. _( k) w0 D# f. i, I! ~: _
. l' R+ J3 G# p- M3 h/ T使用DSP侧单独调试功能,验证动态申请没有问题,' H$ Y$ F" r% {8 _; e! {3 r8 t& i
9 _; q/ g$ u$ k0 Q: g
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
+ L  Z8 i2 x0 C9 i( {
/ e% p: ?0 p! L- e: N& j* X% d
* i4 w2 [- x  G  }
: t) K7 J2 f! g

9 y+ v) J4 k1 ^- H5 t* ~& l5 g! \0 e- h0 n$ |

* u2 p$ [& H/ E5 F  ~" E2 W  D* a: w. ^2 e& k
& |+ J% K, o4 o; m- z$ L8 }' @
) b$ q$ u  J- b4 t. W! S. C# b/ f

/ f* U( s3 f7 k. b
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
; P8 L* `2 Q" q! z8 }5 y我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
; `- q7 a9 Q$ ~. I: h(不过疑惑的是,为何单独DSP仿真就没有问题呢?)& @1 R& x1 d# [5 `6 m

" u  d9 G: f5 w+ P是不是需要在DSP.CFG中进行配置
( b6 P1 J2 d1 A  s" s; u我现在的配置为
9 g+ Z/ [3 w3 T' U7 J) _! B
' \' J3 `9 Q9 u, a1 l/*
9 _( v& N9 [& k  J/ n *  ======== Operating System Configuration ========/ L$ Y: L" w$ Q- Q. ?8 x( g
*/
0 E, t# K! p' [  P- C0 r7 g" \  ~* X+ h1 m; O- [" u+ i) _* U3 D
/* no rts heap */
* h6 L9 m2 \. d+ n, A, D1 e7 K+ vProgram.heap = 0;
3 q  i" X7 t' f1 [% f$ @, `8 GProgram.argSize = 100;  /* minimum size */* n7 g' ~0 K, ^$ i" Z
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大7 N. C/ o. a3 D6 g. }; D/ [( ?
, c, \' B( g( U8 r* ?) c
/* create a default heap */9 B- h! T7 q" x8 y. Y3 ~' k5 j
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
& D$ W: b0 |3 C% R2 ?var heapMemParams = new HeapMem.Params();
' q) d( p4 J, J4 l9 W  C: s, T; \heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
" W+ j  n) \$ S; o4 t& W3 h: l8 K  a' f. m' O
var Memory = xdc.useModule('xdc.runtime.Memory');
( n( {( z! e! I1 o& G9 F$ e. ?9 mMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
& |6 J* c2 g$ ?3 t  R. ]# f( \4 E- T: O! m# C+ `" t/ d( f
/* configure System module *// D( j" i! Y& s; F5 Z  h' u  H+ G
var SysMin = xdc.useModule('xdc.runtime.SysMin');
! B5 e3 f0 @) v; j* p/ OSysMin.bufSize = 0x1000;3 r$ Y. T) {' A2 A
SysMin.flushAtExit = false;1 X8 k1 v6 C  z- w, ~
$ u! Q6 W/ E$ @. w
var System = xdc.useModule('xdc.runtime.System');
: u: I$ @5 w% R1 T. P& D3 xSystem.SupportProxy = SysMin;
/ j3 v: A* g  U
. n+ Z3 ~/ E+ z3 }# }: d# t8 S$ t/* configure SysBios to use the lower half of Timer 1 */
$ b7 o8 O  I6 s2 tvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
/ Q, Y" C  [# {4 vvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
! L( h. I" f0 D( sTimer.timerSettings[1].master = true;/ c. n! t- q: {; z
Timer.defaultHalf = Timer.Half_LOWER;
# O$ c0 t/ m0 [, }) GClock.timerId = 1;
2 P8 R" T* J  r8 M, _" A4 r: z$ h* ]# j5 f- J3 d; r- |
! E* o+ l" c/ Z+ }: K2 o
/*3 n! h% h0 F1 b2 d
*  ======== Miscellaneous Configuration ========
, U( r' l1 ^2 O' L) A8 r0 _ */5 l' X  s, P/ ^* \# S

, Q5 w! m" U: }/ p6 h4 b8 l/* set default diags mask */" t# c1 r$ ?9 _) X5 D
var Diags = xdc.useModule('xdc.runtime.Diags');* x7 B3 U. _. D
var Defaults = xdc.useModule('xdc.runtime.Defaults');
' p3 @3 {# H6 \8 I2 T3 d! V/ c: C$ h; j* w) D2 U
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
) R. g. W* L: A5 P, ]Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;9 ~4 l1 c1 Z6 i: d2 ^, Q
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
: E! \( f# M/ m# eDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */9 \2 L/ ~5 F1 ^  p/ W
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
8 Q! S# C) A1 A6 a8 @; C5 }! NDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
- ~, z$ v* s' n& HDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;+ e: E, c* O3 e0 I' l; z
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;* u. |0 X/ X: H5 h5 f& t
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;, g6 t1 k- U  Y; D, P& W" B* m
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;8 w  @. U( Z# M# ~& F
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;* s2 O. w# ]/ v9 Y# \# T7 B
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;1 }3 O" G& h8 w5 `4 k1 y
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;  `7 C6 s% ~/ f4 ], x
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
' d4 M3 y9 g+ }' B8 k3 q8 V$ A; p/ H
% ]  z, k# A( q7 @2 o1 T$ O/* override diags mask for selected modules */8 N' k+ ~3 N' d& u0 v! P/ S
xdc.useModule('xdc.runtime.Main');
$ O+ }* Z& f) m2 m" X  {Diags.setMaskMeta(# H3 V) Q. e: o! g( p+ [3 s4 v
    "xdc.runtime.Main",' h- u( U' B" ~% h
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
9 c1 f' q" _5 U+ {( n# E    Diags.RUNTIME_ON
& }! q" l# b$ |$ O/ a/ ^2 v! M7 l);+ ~/ m+ E1 G8 I. Y
! c6 O% A, s' T; A" j
var Registry = xdc.useModule('xdc.runtime.Registry');
+ E4 A& j0 {4 vRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
8 Y+ B' P5 z' ]0 Y! pRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;7 ^! p0 Z, w1 N0 b. j- w8 g, G
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;* I! G! ^$ s) {; f/ F0 j
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
$ u4 J3 [( I0 K# o! i. ?2 O2 k0 `# ]: d
/* create a logger instance */
. n+ h" j8 f" \, Mvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
  c5 c% j; Q2 z. r; p* _! I" j/ }* mvar loggerBufP = new LoggerBuf.Params();
7 l' k, S1 b5 P" \loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
4 V; F1 w& U' ^/ c2 F# j3 ]loggerBufP.bufType = LoggerBuf.BufType_FIXED;% Z( D* K. v, K7 L; |+ u( w+ W
2 t4 q) g2 B* i
var appLogger = LoggerBuf.create(loggerBufP);
/ `" A; i+ l1 G- l! `' F/ QappLogger.instance.name = "AppLog_Core1";) ^: m" s5 B4 h* S, S6 i
Defaults.common$.logger = appLogger;9 [) Q) B. Z( a( T' ^
Memory.defaultHeapSize = 0x8192;    ) F: v. j# a% O8 R. F0 w
Idle.idleFxns[0] = "&LEDStatus";6 B9 D: M& D' \3 l+ x$ m4 B  X6 a
Cache.initSize.l2Size = Cache.L2Size_32K;
' x+ v$ _: D' I- ]# f: T* \, C) d! U% @( M+ _
回复 支持 反对

使用道具 举报

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 */, F( H' D: h4 [4 ?
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');9 d3 R* h+ }/ X4 Q, y
var heapMemParams = new HeapMem.Params();
% }) Y6 F+ K) q* B3 s6 vheapMemParams.size = 0x4000;' r. h# {9 c1 s  F3 J# G$ k+ `
& |/ G" g5 ?1 E: A: s3 ?4 c
var Memory = xdc.useModule('xdc.runtime.Memory');0 k6 X9 _* b% c  D% J
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);* p2 B. M# ~9 z8 x
0 w1 j( P- r" x, v+ M
我大约calloc  每次共计大小为5K*16bits,
. d/ p. d  y* U! o: q而默认配置才0x4000、需要改大。3 N# z6 `6 }" A2 q1 p/ ~) ^0 ]
8 O$ |/ e- U/ w  b' d+ |7 P2 U) J
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */5 E! j; z: i( ?* y
Program.heap = 0;
: s  _  }% }. u: A; u3 eProgram.argSize = 100;  /* minimum size */
* u  A7 W  z  X1 `6 q$ X- t$ mProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-17 17:47 , Processed in 0.041948 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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