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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构: c. W' x! H0 r/ f& {  H- |

4 X, V+ ^; C0 @0 ~) g    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
3 w0 B* I  u2 w, w" }4 f6 _& y( D" h/ F2 J
其他程序段。。。。。
# [% {0 \( u6 C $ C. B2 J5 u; l
   free(x_d);
9 |0 h  w) g, z8 _& f$ o" B/ q4 K, N. ~6 a0 Z
使用DSP侧单独调试功能,验证动态申请没有问题,
" d/ f( L9 L0 K+ ^2 `
( @, x9 v9 T" C$ U8 k8 S但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。, A' q' @6 u5 v) U% a( v
) P- g" \& r: O7 k! z. Q$ |
- g1 j, J) e( _0 u: B

7 F1 _/ c$ F( ^5 x2 t
7 N" f3 L! y# z7 M* ]8 n( m/ {- n* r. I" F- Z. M4 ^! `( b/ J
5 l  I# Q. Y) b

, a* q- K6 D% C
1 v) |* P1 P- ~: [8 r/ g
" B& p" G) \  o4 d- H2 |' @! W0 u1 b) A( a; y. W) q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
6 a2 I" Q. S; e2 D# H# LProgram.heap = 0;
7 _, q* D) m9 F% l" ]- OProgram.argSize = 100;  /* minimum size */7 }: h  e* j5 x* v8 W7 B
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */& x1 J8 A5 W4 f5 J
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
9 a, a4 I: c5 U! V/ U3 \9 l. Ovar heapMemParams = new HeapMem.Params();
5 ~9 ~+ z2 s$ I1 ?, {* N1 j3 H9 TheapMemParams.size = 0x4000;4 ^# e( i! k8 m: i, P' T
7 k' E! H' Z  |5 [  F9 r7 C7 C  s
var Memory = xdc.useModule('xdc.runtime.Memory');
5 G: ?# r9 G- XMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
$ k8 t6 j- h$ q9 Q* c9 ^& v) S' r' ?
) p# u7 R$ n- ?+ a: A: [2 p我大约calloc  每次共计大小为5K*16bits,0 A2 {5 K, C8 G0 \9 E* e& M; t) d  o
而默认配置才0x4000、需要改大。
! m6 s/ q) b* W' B% `8 v( }1 G! i* i) P5 r' ], s! J
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明* Q, t$ N2 ]; O5 G% k9 {0 X
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
4 D& S' |2 u2 a) z" S/ ]1 [+ T(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
% y" V6 U5 e( r. _. b1 ~2 X
( F& {4 N; S( b8 w5 ]. P3 p5 E
是不是需要在DSP.CFG中进行配置% r* k& h) M: q5 D2 t0 n
我现在的配置为
5 [! k5 d9 C8 y# i5 `: E. Z
0 p7 w  [; |5 V7 ]# ~/ M( q/*
5 n% }9 y/ S2 {% S2 ~0 ?4 C9 V *  ======== Operating System Configuration ========
( N3 V/ S  N) t. M */1 K. x! m% k$ {3 J! g3 p1 g" H$ s
7 P9 T$ ]' m% o2 A6 \
/* no rts heap */+ X* ^. ~9 e9 x
Program.heap = 0;
( a2 W0 n% M, A5 f4 B# e3 nProgram.argSize = 100;  /* minimum size */
1 ^2 r8 D. j0 P* M8 }Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大1 B; n4 u8 s' @  C% h! k7 m
' g4 t! a* |- @
/* create a default heap */
, o; t( r6 F1 fvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
# N6 J' B( o% ?1 `- X9 pvar heapMemParams = new HeapMem.Params();
/ I7 E* [8 e4 O  VheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大8 W5 S. w" d7 Y2 o" q8 M2 V

. {* B! j4 X4 n. v0 p
var Memory = xdc.useModule('xdc.runtime.Memory');
' F; E' ]# A4 K5 z9 _Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
. }# X4 o# m, L1 [6 D. G8 N& Y5 b: M; w1 O5 ^* P
/* configure System module */6 g8 _8 ]% @" h8 \# N
var SysMin = xdc.useModule('xdc.runtime.SysMin');- t/ V" n3 k* g+ Q- U1 _, E
SysMin.bufSize = 0x1000;
0 Q. g2 J5 L  \4 I& hSysMin.flushAtExit = false;
" [3 n# N( h- w. g9 M
/ i- q0 I/ L! i' Qvar System = xdc.useModule('xdc.runtime.System');
0 _4 I- F: i/ f: e7 A. X+ lSystem.SupportProxy = SysMin;) @9 b, y/ H2 G$ m2 A) g

1 m' Q. ^* \; W/* configure SysBios to use the lower half of Timer 1 */
1 Z: D( v* m7 T: {. D/ A  z: |var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
8 B( w) d5 O# I( Vvar Clock = xdc.useModule('ti.sysbios.knl.Clock');; B1 h& G* o# }
Timer.timerSettings[1].master = true;& E. _' }) L. }5 h1 f
Timer.defaultHalf = Timer.Half_LOWER;
% @$ c, ?8 [, @5 p5 FClock.timerId = 1;! [0 `* Z  J/ o" v9 @
. v* t& N0 G8 Y7 h0 N" ^; X
% v3 @3 G8 ]6 K5 Q; z
/*% u9 |- F2 o5 w1 V" v
*  ======== Miscellaneous Configuration ========' Y% d! D8 L/ g) r" z3 ?
*/) D/ H* s* U, X$ Z* d  H

8 D# s* z0 m& F$ ~0 D. A/* set default diags mask */# m5 [* @. i: b0 Z, H  v9 p% I
var Diags = xdc.useModule('xdc.runtime.Diags');
) Z7 G% |" h" Q+ C" a' Z3 o" xvar Defaults = xdc.useModule('xdc.runtime.Defaults');
2 ~  h1 h! w; v/ x& x# L% |8 |: E+ ?: c5 e* F* P
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;; Z" ?: K% Y, B2 x5 q
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
! M5 \0 l& _8 Z* h% D2 j- B7 k# }Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;" m2 ?/ ~) n5 p& X- x4 v0 H
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
' z' O% C1 F# l+ G) DDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
+ b* `) c5 W, }, P+ BDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;! J4 m& M' |* `/ d( }: j
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;: A# h; S7 H. o! T) L- E
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;0 ]. k" \5 p5 q* ~
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;/ P; {2 i3 Q1 m: T
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
% M, Z/ W$ E, _Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
4 K  {; ]( C$ G) w; J% @9 pDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;9 j+ b7 r; y1 [) W& I1 O" E" ?
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;; d- d% Y3 l- Y8 b$ {; @
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
8 [) {  C4 u5 L5 g) C( @/ n( ^; _# ~( }* N+ P, ~' A
/* override diags mask for selected modules */
2 g4 g8 E6 Q" z) t6 x8 @xdc.useModule('xdc.runtime.Main');
5 r- V& \: k4 u) ?; IDiags.setMaskMeta(& ?9 X) _  B  m* v4 }
    "xdc.runtime.Main",
( B# o9 J" |7 c6 }$ h    Diags.ENTRY | Diags.EXIT | Diags.INFO,
# l5 x3 J/ o, y  W- R    Diags.RUNTIME_ON- A' G0 M1 f9 l7 Q! I/ u/ }4 |( o
);
) N6 M0 p/ y0 U7 @3 @' T5 x' j6 R1 r  t' q- ]: P
var Registry = xdc.useModule('xdc.runtime.Registry');
9 N0 U0 \7 x# M  ?' `* R( i# _1 kRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
; r0 `6 |/ y9 ~$ p; O# ?5 M0 ^Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
; Y1 _4 r$ {3 a* H; \- Y9 fRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;$ w) i2 f4 i' Y
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
8 C/ y) w* E4 v6 ~9 V' r5 P; y! T8 H5 P/ l" B
/* create a logger instance */
  R5 _# a2 A1 B4 uvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
6 I5 {" s( [( y- G) R  q8 f, ~; Y+ l& R- Nvar loggerBufP = new LoggerBuf.Params();% r; ^5 H3 }2 }& b' F
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
# m" x9 o1 t; C* floggerBufP.bufType = LoggerBuf.BufType_FIXED;
' M* n, S; h1 I0 P4 i4 q; F: G; y0 M- V
  z$ u1 [7 ?  J0 n# O; [var appLogger = LoggerBuf.create(loggerBufP);
- \8 |+ Q( j% yappLogger.instance.name = "AppLog_Core1";
; w0 N! y) M6 V" I/ yDefaults.common$.logger = appLogger;
) e+ s9 |! o) K8 |  e3 U* v: eMemory.defaultHeapSize = 0x8192;    - E8 C3 B- p* A' U
Idle.idleFxns[0] = "&LEDStatus";
1 f" C3 c+ G3 {Cache.initSize.l2Size = Cache.L2Size_32K;
& T, Q( G3 x) j9 V0 D/ X3 V) Z& E/ u7 v$ |0 \
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-1 20:07 , Processed in 0.055897 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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