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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
9 n3 j% l& h5 t; `# e3 O0 ]% p9 O
/ w  E" V3 U% h8 v* i    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
& V3 u* ^& q7 f+ V+ D+ R8 K6 Q- ]% c# N
其他程序段。。。。。9 q& I1 Y* F0 ^2 s
8 q! M, P1 ]! s# n4 A" p. h: ]
   free(x_d);) j- s& w' a2 }  h% P: P

: N* r" N6 u. t, F3 f' o/ l; @) K使用DSP侧单独调试功能,验证动态申请没有问题,
4 N% W/ J" L. i5 j
" @. ]" J) N  ?' W9 I$ O: y但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
1 Q% c9 n% J. a& @: H

$ y* l+ [4 f9 H  j- @3 d8 Z# @6 ]; ?  y0 ~

9 o. J6 l1 C, A! Q; @( y$ D2 c. }4 b1 q+ B% H  [
0 [3 i8 T7 r' O7 }! k; `
4 C4 J! ]$ z: ^8 H7 l8 m( q0 S

% L1 Q! m2 {7 e$ N& k* ^! A1 ?7 a. g" X. b9 A  K3 K1 x/ c

* j: Y  H# I0 q. p# _4 y8 n5 {8 e
* k- x1 P' `: d; b
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
3 D; @: _! M0 \. X, A+ ]/ G/ N我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下8 \6 r0 x- c# L: m4 Q/ A  n! _
(不过疑惑的是,为何单独DSP仿真就没有问题呢?): M3 w. C8 l: N* w  }' U! @7 |

0 \* w( ?  u2 }; r是不是需要在DSP.CFG中进行配置& t! h, p# o: i; g- r/ `6 Z
我现在的配置为
9 b' ~* H1 g# Z0 k, R% \4 ~. A  k! \! R7 Y
/*/ ?0 U9 z' r5 u# J
*  ======== Operating System Configuration ========0 A2 X, ]7 A& y9 E% A/ G. @0 d
*/
- e0 F6 N2 q9 I) ?' R0 D6 z2 V5 B0 U3 c6 ^1 z: Y* b6 B
/* no rts heap */
0 q; j, c7 \3 s5 [Program.heap = 0;
  {$ q' \) Y6 a: T5 d3 tProgram.argSize = 100;  /* minimum size */$ h: P  `1 Y0 i, Z1 K
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
# F" `# ?: ]# s; n( n. g+ R& c
( i. x3 A( g( D7 p- f2 D/* create a default heap */; ^/ Z# X1 w. Q; C5 }- \
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');+ |% o) Y* V% N' O, p
var heapMemParams = new HeapMem.Params();
7 d" a* f% N* OheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
* p8 {" ^/ y) ]; R* A
6 f; H7 W1 }# _. p+ }% V
var Memory = xdc.useModule('xdc.runtime.Memory');
+ H. Y" }7 U) }; N6 H. w3 `  z5 |8 JMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
6 J$ G; F; k! G8 F/ B: y/ Z/ b% Q, r( H% Z5 H0 n5 E& X
/* configure System module */' d7 N9 x  }8 |
var SysMin = xdc.useModule('xdc.runtime.SysMin');
( u$ q+ o5 V- H( ]0 F3 o7 p) kSysMin.bufSize = 0x1000;
, W7 z3 K6 Q3 |0 ]/ {& v1 B/ v$ C4 j% wSysMin.flushAtExit = false;
6 @2 H8 M9 N7 p9 t; S. e) t4 q) [. x
var System = xdc.useModule('xdc.runtime.System');  w3 k7 N8 I4 q& N1 y7 y6 y
System.SupportProxy = SysMin;2 B* Z8 Q9 \$ O

7 ]  ?7 a) [, Y/* configure SysBios to use the lower half of Timer 1 */
1 X3 O- x7 [" @7 b% Y: p9 @- S. {: ivar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
7 D6 p7 [8 M3 ]' N- x4 i# evar Clock = xdc.useModule('ti.sysbios.knl.Clock');
6 [' ~: s+ f" d9 r; C/ xTimer.timerSettings[1].master = true;
* P: M8 u' z& s  n  b- [. [Timer.defaultHalf = Timer.Half_LOWER;- S8 P! C# X3 H! |$ `
Clock.timerId = 1;
# A# {; X) m( O( k
& w, _9 x( z6 G$ @
9 t! W: y: w0 |; m/*
! H& I1 F8 o+ p *  ======== Miscellaneous Configuration ========
6 W) I( e  v8 f/ o */
; j6 p0 U1 v" |/ y' d. }$ A; w, o  C+ r5 n& t# D
/* set default diags mask */9 F3 b2 d9 ~5 _( `
var Diags = xdc.useModule('xdc.runtime.Diags');
1 ~: p" F& Z& X( |! c; Gvar Defaults = xdc.useModule('xdc.runtime.Defaults');
1 `  I, x/ p! w  e- N3 f( f. A* `# o
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
2 b8 R( f- Z# f, V7 sDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
  E5 z: @0 X' J) i6 A" s0 \) GDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;$ o4 Q+ T5 u. X
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
- e2 Y6 D  H4 a2 z1 c6 MDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
8 b8 t: W( r. E) E/ d# m( Z; y$ U8 qDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
3 `' t' J( h1 B) w. uDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
$ i& W9 J  Y% `6 I8 b7 cDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;0 W) ?8 b, n  y. G- U" c5 v
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;  b1 V0 |5 P. n' A4 j9 s
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;% c( l: ]  U# Y
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
- c/ e% t/ W- L3 Y" {  r$ `Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;, a2 x; `% N( h  g: X$ T
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
% j; s' r5 Y( ?- }/ P+ ^% LDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;; Z- G2 x. f7 s. N0 Q- b$ Z- x
) g6 g- v; m: D6 U6 J9 k
/* override diags mask for selected modules */
5 K% M* [. K: Rxdc.useModule('xdc.runtime.Main');: V4 j1 @! [, ?- [$ a0 q
Diags.setMaskMeta(/ W6 I, [. u4 F1 t( M4 }2 w
    "xdc.runtime.Main",3 V5 y9 E  ^8 \2 D8 A* L: D, X
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
' J/ B$ ^3 t0 h2 n; u, H( A    Diags.RUNTIME_ON- A7 C" Q7 A2 s
);
  T- I- U/ u/ ^% Q5 r9 h. r2 S+ p
! j% u6 ]! _# t" i. _7 Cvar Registry = xdc.useModule('xdc.runtime.Registry');
) w/ _/ g2 \4 U- Y$ ]& P8 ~Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;  ?# Q$ d$ K" I
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
) Z+ L: _! D/ H' R, hRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;! E+ T+ X) M+ G8 A0 C2 y
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;) o. {$ h$ P6 u( W7 Z. |; I, g* E

' A( A# S' v5 u) x/* create a logger instance */1 @% \5 R8 j+ {/ K; a
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');6 e! ]% r" j" f8 Z- q' G! t
var loggerBufP = new LoggerBuf.Params();
) ]9 `) o" Y* _" A6 u6 D6 ?loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
6 r% v% p6 k- \loggerBufP.bufType = LoggerBuf.BufType_FIXED;2 D/ @' I7 [+ R  P# j
) O' N# s; h, n
var appLogger = LoggerBuf.create(loggerBufP);2 [4 _! M0 ~" t$ Z1 v
appLogger.instance.name = "AppLog_Core1";/ Z* S, _$ |9 V9 @3 H. S5 g! L! u  X
Defaults.common$.logger = appLogger;% ^* b; ]4 Y$ w2 W% z
Memory.defaultHeapSize = 0x8192;    ' v. z! n7 p! P3 t2 K5 O
Idle.idleFxns[0] = "&LEDStatus";
4 u( I: h8 I/ R6 B- w! NCache.initSize.l2Size = Cache.L2Size_32K;
" j: E5 ]. W. w+ x) m3 c& U. ~& o5 W% H
回复 支持 反对

使用道具 举报

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 */
4 j% @# \3 A) e# J3 Rvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');. A& F) `: w7 O0 b- N) w
var heapMemParams = new HeapMem.Params();2 C# i& m; Q6 x0 G9 ]
heapMemParams.size = 0x4000;
- S7 r5 m2 T# O/ l, S$ q* \/ D, s) Y9 P- Q6 K9 S
var Memory = xdc.useModule('xdc.runtime.Memory');
- Q. _9 t$ Q% P! Z8 W$ ]Memory.defaultHeapInstance = HeapMem.create(heapMemParams);$ W6 _3 d+ W3 G% P' s7 i' j7 [
& V6 X' A4 w- @* W8 v1 Y
我大约calloc  每次共计大小为5K*16bits,
% s% g  a7 ]# G( T8 M0 H而默认配置才0x4000、需要改大。
* m% U8 a: M' g% x# h9 O8 p5 }8 ^3 F8 M. A( A) Q  v5 r7 v& e$ a
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */. p# p9 W! {" G" l
Program.heap = 0;
; x; z8 p" f, ~# kProgram.argSize = 100;  /* minimum size */. P% {) r- w* n
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-17 02:56 , Processed in 0.043447 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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