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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构+ z4 ^$ I+ b! e4 x' Y
% ]$ s4 |# O8 J% v$ Z9 J
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256" E8 k. w0 L0 g  Q6 L, t
# F% @" q( \+ u" q- y& D2 J
其他程序段。。。。。
2 J! ~& X4 X" ?2 }$ p. ] ' J5 Q- v5 v+ Y& v9 a* @
   free(x_d);
# Q* z2 ]9 e: {: y
4 D+ k/ K3 x2 T+ ~- W使用DSP侧单独调试功能,验证动态申请没有问题,
6 h* Z- h" n- g/ B1 q! o
. _7 U& A* V5 ?4 ?$ X  |# s& \但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。) m# x, S$ o& E; B7 d% A8 C( T

. ]2 I& N( b. a9 {4 ?! h6 Z3 a: L: h. i
2 z  m; r7 }3 }! I! I

) {" v8 k: f8 r
2 h! p* h* D: Z8 Y; b, ~2 s( P8 `  F  L. O( \+ _+ H" S

" B- i( E7 \9 r* O! E& q7 y1 V; P. [% d! D

/ P+ H& Y+ Z. v! x2 R4 c
7 m/ z( ~' d$ N  k
分享到:  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 */' u' d1 D) [+ ~  Y- G
Program.heap = 0;
) y+ I+ K( o7 L2 {$ ^; f' |; Q! BProgram.argSize = 100;  /* minimum size */0 v5 q5 Z  b2 B
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */* c, D: w% b2 j9 m" Q
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');- g5 o& V+ ?' D6 ^, ^
var heapMemParams = new HeapMem.Params();9 ~) G9 [" j0 T' F% r
heapMemParams.size = 0x4000;+ S$ |3 h' g. Z1 E( |# D
9 ]8 f% D# S" m& |% B/ @3 ^
var Memory = xdc.useModule('xdc.runtime.Memory');
5 K) r6 z- u4 x9 P/ eMemory.defaultHeapInstance = HeapMem.create(heapMemParams);; S& K2 p7 F; `7 G
: r& X& |/ s$ W" e
我大约calloc  每次共计大小为5K*16bits,
5 ?% U& Y+ ~6 c- p* I而默认配置才0x4000、需要改大。3 X) u& I9 `; j9 \
+ p( d& u# d  k/ _8 L8 U/ R, H$ V
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明/ n7 d1 Q! L  `, C- D9 u
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
3 z. _! a, h  I( h5 g& \(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
! d, ~( Z, Q) J. `5 I+ Q

; m6 n& N" q- ?* B/ I4 l是不是需要在DSP.CFG中进行配置
# a( i' [# E, p7 B; J; E7 @* d  n# G我现在的配置为2 _1 C7 V. Z. o6 |, z8 g
% T3 H$ d+ @, I1 V: e+ g/ f
/*
5 W  t( f! ^( R  H *  ======== Operating System Configuration ========9 i: o$ ?, d& \2 [
*/
7 p# }5 J9 O, h+ A: G* T: X1 i
2 {' i4 P& ~/ s2 n0 }/* no rts heap */9 L) I' i1 x% b# O6 ^& U- m
Program.heap = 0;. E4 P! U  @; p
Program.argSize = 100;  /* minimum size */4 [6 b! ]) i8 R! e7 H; }
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
, i1 v1 S6 S; r/ c! R& o2 ~* J: d& f6 d
/* create a default heap */3 z: H; Q, t5 r+ i# R( L! g- @4 T( Z
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');2 U6 l& d" n  z3 A9 y) c
var heapMemParams = new HeapMem.Params();- j5 i0 e& @: ~# K) t
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
) U" j9 ]% e! H5 n( ~) S5 c! a
: I$ M$ v3 I& q+ z8 I
var Memory = xdc.useModule('xdc.runtime.Memory');7 J/ M7 `9 g( r+ e
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);* L) R% k2 q- [( @% `0 p( N
: j4 N$ O7 j5 t1 @  L5 S2 ]# c
/* configure System module */8 ]1 K( y* a4 p! Y, y/ T
var SysMin = xdc.useModule('xdc.runtime.SysMin');, u3 q* J( U$ x* ^2 _  w
SysMin.bufSize = 0x1000;7 a+ [1 r  V! z
SysMin.flushAtExit = false;& ^1 O; \. M7 S6 h1 I- m2 V
/ R8 Q9 e9 H- T  n( C
var System = xdc.useModule('xdc.runtime.System');6 s# J$ Y9 ^7 i( ?6 J6 Y3 D
System.SupportProxy = SysMin;! w; @6 p5 y5 ~& F
7 e# [: L# C* N# F) D: j) ^$ K. m
/* configure SysBios to use the lower half of Timer 1 */
, v" o4 f2 l0 K0 v* \' s. o" mvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
" T! h0 w6 Q" D0 {8 R% M. Qvar Clock = xdc.useModule('ti.sysbios.knl.Clock');* h& u9 {9 B3 ~( c3 K# s) p& ^$ A, f
Timer.timerSettings[1].master = true;
1 R' x( B9 ^6 b$ X0 R. r( K4 QTimer.defaultHalf = Timer.Half_LOWER;- `% Q0 I  L. k; @
Clock.timerId = 1;' g) b' ]3 d6 z1 j; |. f3 a( ?
. S; ^0 q2 ]- o0 M" ]1 s8 m

) y9 z: I) R* f% C9 V& s# p5 ]) t3 M/*7 J2 Y: J$ q0 J& s7 {
*  ======== Miscellaneous Configuration ========. j0 r7 R7 [* B4 ~. s$ T* S9 S
*/
3 D" w8 J  F8 H' K9 L# R# e+ O$ V" Y" ]# Z
/* set default diags mask */
3 C1 ~) ^9 v, gvar Diags = xdc.useModule('xdc.runtime.Diags');
" c5 {; q3 ]5 Nvar Defaults = xdc.useModule('xdc.runtime.Defaults');. z2 Z4 o, H" K. _% O  l) p6 z6 ?

& O( c' J/ M$ m7 Z1 [Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
2 `7 v! m4 o% M+ p" x1 yDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
  ?+ G: @4 a- U( L4 qDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;. }7 u/ r  `% S" e
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
; D# B/ a+ h3 Q* y7 ~Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */1 r1 S% U. R3 @! _6 [+ |
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
6 g1 j  ^' y  C- S# v5 q% e# Q  ]Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;) |) H5 F& c4 x- ]5 N* Q
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;5 S8 a: N0 D) b! }( G
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
3 M. V! P+ e& u! R: [Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;9 p% }2 {# g" E7 ^1 r6 z2 Q
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
9 _4 X) ~1 e( f3 l! u- B1 WDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;, T0 H; L: g' P( [* _1 D* C5 F# G
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;- T1 i; |3 w! g$ W
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;2 [2 N/ S% @1 }- P/ @
" S# k5 @/ B4 y  F
/* override diags mask for selected modules */
& F7 |) D7 a1 k, i7 Rxdc.useModule('xdc.runtime.Main');# m) L! T5 q: K, k5 e6 p8 g3 h
Diags.setMaskMeta(! B) i, m! V+ e1 I- P3 u1 c( Z
    "xdc.runtime.Main",  ]0 Y$ n4 e% }, O
    Diags.ENTRY | Diags.EXIT | Diags.INFO,9 w# A! X2 @  A& p8 m# S, \% F; ?
    Diags.RUNTIME_ON1 `$ a+ ~3 Q6 K( |( _1 W
);
% ^+ N1 N4 L7 i
2 l) ?$ v! b- ?9 Tvar Registry = xdc.useModule('xdc.runtime.Registry');
/ T  f! H2 C0 q- \& h6 v7 `+ u" E& _Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;+ @% x' |' j3 Z. K1 D& E
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
* z* z, n1 `) u! w" eRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
% _* p9 g8 }/ c: n. n, TRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
! N4 o# G( m0 P/ o
$ m. ]7 j1 I5 @) h. b" K. {7 {/* create a logger instance */% j5 K' z) V: f3 m9 Q- e
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
, e! c3 ]; l) Q3 N; \9 Wvar loggerBufP = new LoggerBuf.Params();
. K# X" \, O9 J% o1 y" b' LloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
# }; n  M7 T% O& S- \5 e0 g, qloggerBufP.bufType = LoggerBuf.BufType_FIXED;& m9 M1 I7 D0 A# Y

' k: j( `( `8 k/ y9 n+ lvar appLogger = LoggerBuf.create(loggerBufP);2 S- X9 d1 N1 B; L
appLogger.instance.name = "AppLog_Core1";
7 a( i- Z6 Y0 n, h# yDefaults.common$.logger = appLogger;
# m- \2 o2 J7 N7 t- d& EMemory.defaultHeapSize = 0x8192;    ' g- x2 L; g" e. m/ A1 Z
Idle.idleFxns[0] = "&LEDStatus";3 j( v. P7 ^4 G. R
Cache.initSize.l2Size = Cache.L2Size_32K;
* I. F3 D% y  s0 M% F( i* T( Z* K0 `  J0 D- Y6 H' A
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-5 07:58 , Processed in 0.044474 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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