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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构2 m2 `0 \% A! {* z$ `
- x$ {% a* a* ]" v7 y
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
* A$ |" C- z; o6 c1 m: J) }, m( u7 a7 x- T: Y8 G1 F
其他程序段。。。。。
# ^% g+ b6 N: y; X3 v ( d' _3 y* ~/ q3 f: {1 c
   free(x_d);9 F6 j3 @1 `  O, c# q

$ B* w' B5 J2 |$ z; w使用DSP侧单独调试功能,验证动态申请没有问题,
+ F; W6 i( H/ @1 w+ m( k* A
. M$ j, p; Y! Y' J: G但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
8 Z$ u/ B( u# X+ ]# d5 M. q

/ b2 ?: e# L& n- g2 ]3 X" `9 F0 A  Q0 Z

5 }3 q) G9 Q  T7 m2 O" z6 |7 O& y0 u' M
7 H* n1 m2 x% b, F, z

. z3 _3 m# d- G1 X; F8 X. S* q/ l1 R% s8 u2 \
2 `: t; {- A' K1 o' E1 C

1 \4 h5 _4 v  b5 G; Q" a+ V& D5 J
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
5 |) b( K( Y0 \' o. F我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
' k: F% p* r, f! w, i(不过疑惑的是,为何单独DSP仿真就没有问题呢?)- R+ b: [% Q1 Z  t) f: D+ n
" [! ]% D+ b8 w/ H& R
是不是需要在DSP.CFG中进行配置! a0 S0 S% Q5 [
我现在的配置为4 v/ n( S. R2 [% n7 t* h: p+ ~1 \

  B/ n1 o/ _6 |$ q( ^/*$ Q& z! r' t% G8 X  }* f9 q1 g; h  s
*  ======== Operating System Configuration ========. ?" N# R* o# x* K# R1 X
*/9 {5 M) ]  q# E3 [0 G5 |3 Z) C
. ]# f) R2 u9 W- ]
/* no rts heap */
5 P. L; C8 M) M- L7 w! @) rProgram.heap = 0;
/ E' n" \& s9 b( E, oProgram.argSize = 100;  /* minimum size */* N, e1 m, \( l) V2 y+ e
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大( P3 E6 U1 W( G
9 U9 v6 |4 W8 C* C$ W& C) K, i' Q
/* create a default heap */! k8 j8 r0 j9 [8 E3 _4 ~' u+ ?, z
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');0 W# A' d" R6 a6 J2 T. ?
var heapMemParams = new HeapMem.Params();
0 ]( C' v; }! c: P2 U! @! Y' N/ ]heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
9 G# q7 V7 [0 M1 E# @$ U& A+ ]$ c9 P' F/ W$ f1 j$ J- H5 p; t/ p
var Memory = xdc.useModule('xdc.runtime.Memory');
  {6 @; F! ^. B; uMemory.defaultHeapInstance = HeapMem.create(heapMemParams);* w) k+ v6 |* l! n$ M* i

8 D$ l* X& v: P0 G1 K" ?/ a/* configure System module */
. x# l' F- x: c$ m" kvar SysMin = xdc.useModule('xdc.runtime.SysMin');
8 k; o, o: S  P9 D' ]3 [SysMin.bufSize = 0x1000;
+ O& I% V# @  G( r7 H0 USysMin.flushAtExit = false;
4 j; U1 |' {% z- Q+ X' z- U! j# z) R
var System = xdc.useModule('xdc.runtime.System');$ [3 S) I* r6 d0 ?
System.SupportProxy = SysMin;
$ T' K% y* \7 \" I1 R, Y/ i, o: O" ^# I# `* x7 P
/* configure SysBios to use the lower half of Timer 1 */. j$ O" J# {/ x/ p
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
7 m$ y; a, H2 D6 C8 z* \: E1 tvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
  v0 w9 E% q) uTimer.timerSettings[1].master = true;/ l: ]( E- f+ W. ~  V  F
Timer.defaultHalf = Timer.Half_LOWER;
% _" C, q) \6 v/ x% u) MClock.timerId = 1;0 i7 A  y  p* e, u8 a
8 k( I" y' |+ x8 ?  f

# F' K: I) J! ~% Z/*  X# T* S8 H9 b- U5 e
*  ======== Miscellaneous Configuration ========6 e; K& p! w% z2 c3 ~
*/
" z- f- @. B% i/ [9 C5 u8 G  P- _8 a2 C6 G7 p
/* set default diags mask */
1 |2 R2 d) K6 b& x, kvar Diags = xdc.useModule('xdc.runtime.Diags');
; N1 B) ]& n1 p" H( G& Rvar Defaults = xdc.useModule('xdc.runtime.Defaults');$ ]7 X. F' n# t
- x8 ^$ C; O# g. I% y( K$ u
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;: i4 |5 e  u' s, c
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;+ Z% w7 N# f' f  g  G! L
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
, E5 f# ^% F6 t8 [1 p+ ?' |Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */8 h1 [0 z0 r' d1 T  V: G
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
; ?7 Z  H; I! f( f( r  HDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;. B9 X! U1 _5 r9 h0 {* R+ x
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;# z; Z4 p3 Z$ s0 b# q
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
- _  H- S3 g) SDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;; U4 S. c' h8 |
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
: o! s- `/ y/ xDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;; v/ e% e" Q$ C# j  u% t  a
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
/ J: ]1 e7 R" s2 U* Z9 UDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;5 ]- A4 d" b3 j
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;/ \0 i' i% N3 w. E% \+ z

0 Q. ~: _* V" z( g* Q* c4 \/ I% D/* override diags mask for selected modules */
0 M& A3 l# G6 |# q. xxdc.useModule('xdc.runtime.Main');
. h+ [# S2 A1 ^  S' ZDiags.setMaskMeta(
6 ^2 G3 l) G  ]- _& o) T1 y  h    "xdc.runtime.Main",
5 U4 W% @) V- A" z) v* n. L    Diags.ENTRY | Diags.EXIT | Diags.INFO,
6 m2 N" ?* v. r. f. a2 ?    Diags.RUNTIME_ON
5 e4 x2 L& @, C- C2 N);1 \2 F: p$ y. X$ t" Y# ]

$ ~$ r* C) d1 ]; R$ G- I3 hvar Registry = xdc.useModule('xdc.runtime.Registry');
3 [) L& h) a4 ], VRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
; s: e( b5 M3 V7 {% f0 J: TRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;9 \4 Y: y) W0 ^) ?: o% }
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
$ K/ Y$ f- y+ E6 h: M2 yRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;# L" B5 \* \, n' E# L9 C! ]2 l& k7 m
' _9 H6 e( X+ D+ e/ f  ~" V4 e
/* create a logger instance */! e3 P" ]3 }% H, S% u5 |0 V
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
$ X: Q7 E) y( l+ E/ u0 e$ Xvar loggerBufP = new LoggerBuf.Params();+ K( b( ^- v* z+ v
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
/ Z5 q: L; s& u- tloggerBufP.bufType = LoggerBuf.BufType_FIXED;
; R! p3 ~' {7 j; |1 w. Q
; Q  B0 J: Z1 e* Zvar appLogger = LoggerBuf.create(loggerBufP);5 m$ e8 g( k" ?  `! d" i1 O) E
appLogger.instance.name = "AppLog_Core1";
7 U' A8 }5 f9 KDefaults.common$.logger = appLogger;
* d1 x) g7 ?( A$ l$ O/ hMemory.defaultHeapSize = 0x8192;    ; G* }, Y- D$ Q6 I* }1 A
Idle.idleFxns[0] = "&LEDStatus";
; K# Y7 S5 T. U' K/ ACache.initSize.l2Size = Cache.L2Size_32K;/ a$ a/ m# Q# P. h2 o$ D* P3 [6 h

* Y' H* i4 R  I; a! c6 d0 G3 I
回复 支持 反对

使用道具 举报

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 */$ O. m, Y: k, \# [  r
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');) \2 @% w0 V5 s: ~2 j
var heapMemParams = new HeapMem.Params();
. d8 B* \7 o; K' Y% m2 V" t) KheapMemParams.size = 0x4000;' c# }) @4 `& T

/ s2 A: A& g5 V7 _7 H8 yvar Memory = xdc.useModule('xdc.runtime.Memory');
- m+ {2 M7 a4 ?$ L5 _% ?Memory.defaultHeapInstance = HeapMem.create(heapMemParams);- g1 O% L  f' W. u1 W' ]

4 b) ?, m6 N7 p+ m7 e我大约calloc  每次共计大小为5K*16bits,2 T# y  @& g. ^  Q) F3 M: }3 ^6 e7 @
而默认配置才0x4000、需要改大。: o- j( u: _; Z  u" L0 H: d
( E2 `8 T$ F+ W/ t* T6 l+ l
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
9 B3 i5 Z; u) G2 vProgram.heap = 0;
3 n/ c/ }+ ~5 W  z, w# k3 ^  |! }Program.argSize = 100;  /* minimum size */
& e- h% M6 y4 F/ i! bProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-3 04:57 , Processed in 0.058465 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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