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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构, n4 g* ^* B1 Y) p. ~/ E' ?
( O% A! Y. H7 g
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256! e9 Y1 q! A1 _$ O

# \1 x6 T: ]6 Y, I其他程序段。。。。。/ e$ a# F% ^' Q- `3 m. G
% W# T" A, J/ D% V" t
   free(x_d);
( R* k0 ?3 u$ ?9 t* z/ b7 _
/ O7 J- v7 Y5 i0 M# Q+ Y5 Y+ e1 q使用DSP侧单独调试功能,验证动态申请没有问题,$ ~3 R7 l( G# u7 o4 X

0 ^0 e( Z- {( c% @5 y但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
2 t6 k8 u- M! e- x
- @  S, [9 ~9 c( b2 x
: I! O, Z5 v9 Y1 y0 z) B

$ N/ G0 f: m9 b! ~
8 j+ v3 h; k- s/ [. i
  s; Y7 V4 E5 q$ w! k- L3 K' n- @8 c/ G+ t! h- |. T- R2 E

+ g9 F8 W( u+ C% k) `4 Z5 r+ A1 q* `1 @9 s7 G: a( ^) c  I

$ K4 x$ W: }4 y" `5 E3 T- x9 }
% h3 q0 P  ?/ o! \7 b! F2 L
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
' L+ g+ U$ H2 G* t/ T$ l我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下& P  J2 w! A) x. ]
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
. U1 ?. V% [" e/ q. k

+ X  z" M" V5 R; n是不是需要在DSP.CFG中进行配置1 q" R  H! H3 [1 j' ~/ j: g6 |. l
我现在的配置为
6 ^+ A, j: }3 V( y  i3 q/ k+ E6 m- {( ]. p
/*
. |" P( `- ^8 I; }/ b *  ======== Operating System Configuration ========
0 w/ y0 L  c2 F/ H( V, { */- V: c" _. j- E0 X' b
; E4 B' `/ d2 l& s9 T+ f  C
/* no rts heap */
# o: f- B" j! PProgram.heap = 0;& K3 C; m. P1 q0 Z: t- Q/ b; s
Program.argSize = 100;  /* minimum size */
- c) T& F; F. P. X& }2 D' _0 `) X. AProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大! `; L; M0 ~7 A" V3 R. X

  K/ f- l& U* e; S/* create a default heap */) `: ?" }5 `. F8 }0 g+ `7 E  s
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
. u+ l- a7 t; @7 J. S# t; c" Xvar heapMemParams = new HeapMem.Params();. _: E9 P6 S- m% u  p
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
: o0 K( @# K4 \. V* f  ]& L! {2 o. ]) m. j! X
var Memory = xdc.useModule('xdc.runtime.Memory');
- g' D4 Z$ {" d" I8 oMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
& a  B# k3 Q( y
6 c3 s$ L4 e" B/ r/ A7 Q% w+ z/* configure System module */
0 b# E9 {5 S# O" I" X9 |/ Jvar SysMin = xdc.useModule('xdc.runtime.SysMin');
. F& z9 V& l5 c" ~. `SysMin.bufSize = 0x1000;
+ `: i4 F8 S1 f2 P' E* D1 i$ LSysMin.flushAtExit = false;
. q- x0 b' D4 r( Z; R+ K% X2 A2 V
$ `  O% |( Q5 H4 O  gvar System = xdc.useModule('xdc.runtime.System');3 K: B% w4 G) K: Q7 F/ S; u
System.SupportProxy = SysMin;& ?6 c2 _/ k* G4 a2 u7 R
; Z3 O) f4 s+ p1 w
/* configure SysBios to use the lower half of Timer 1 */; j/ C4 U$ C( r* S/ h# ?( c
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
' @, J% D4 w" u- ]& ]8 E: Jvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
! b7 m; h' @. t- L3 P9 UTimer.timerSettings[1].master = true;
8 D9 K# E/ Q# O2 ?" |3 {$ h. D7 iTimer.defaultHalf = Timer.Half_LOWER;' ], X$ K; U1 N3 m$ |7 I
Clock.timerId = 1;. @' j4 m( ^4 C! i$ a: m- Z9 ]
  H, M, {& r5 k" x% x5 w
; E" |% ^2 x2 @, w  W0 I9 Q
/*
/ Y" Y6 B6 ]. a  k *  ======== Miscellaneous Configuration ========; @2 }. p2 B1 q% I2 v0 L* H; p
*/
- F, i. S/ ~6 G
$ R1 T/ c6 \+ y0 B/* set default diags mask */" Y8 x7 R  s# }
var Diags = xdc.useModule('xdc.runtime.Diags');
$ ?9 b% Q# e, d% Uvar Defaults = xdc.useModule('xdc.runtime.Defaults');
6 V1 z) }) c4 ~! l/ k( M1 t# Y% |0 }5 x- {4 m' [
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
9 P9 V  B# c- ]( L% @& tDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
6 j) ?+ I7 r& M' e* g2 uDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
; z' G7 f: u6 ^2 oDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */; Z% T/ \' X  Q; a( ]" o6 P
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */0 f3 T3 J: |  E# q$ z
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
: b4 T( D0 x. b1 }, ~1 B% w- tDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
5 ?$ S0 a% V. T8 zDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
+ x$ ~0 X, F" U' [Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;8 N4 k% b& ?" ^1 b
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
& E4 ^) c3 A" S% @2 O) y' BDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;. G/ J2 C3 u/ ]# s/ I; T- @9 O. u8 `
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
5 H- a) e, K1 O! a9 yDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;  x6 I. j- E( \# G1 D! E# u% A
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;% G: G: V) p, ~! m: }$ \7 w9 U. q. W

3 @7 C) C' N/ C" N" e2 ~/* override diags mask for selected modules */$ i% N; \6 _9 Y7 A1 }
xdc.useModule('xdc.runtime.Main');' Y& j: d) ?! O1 |0 }' u
Diags.setMaskMeta(/ t! A( p3 V' w  o' ~
    "xdc.runtime.Main",
/ v! U- V4 Z# A& B$ c    Diags.ENTRY | Diags.EXIT | Diags.INFO,, M3 p; v- ?* T- x, h" U0 ?9 D
    Diags.RUNTIME_ON1 v. p, I  ]6 P2 T' u) J: J, ]
);
. T3 w1 d. h) D% I; |. X  ]! d
! m) Z$ \- c: ^: ivar Registry = xdc.useModule('xdc.runtime.Registry');6 T* T6 x( N) d3 }+ W" N
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
% {* G8 q  H3 r" j2 h& C0 ORegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
7 A% L; P2 T4 l% LRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
7 W$ K3 u  B( H( yRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
7 s# C. \0 ]9 w5 E; H( s" r2 }. V0 K+ S! U
/* create a logger instance */
# z& ^" O& A4 H( Q% x* _var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');! |3 ~8 D( e+ n0 {" y/ D4 Y
var loggerBufP = new LoggerBuf.Params();
$ L! E0 \) `5 ?+ F4 WloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */* v; B( g0 S: X
loggerBufP.bufType = LoggerBuf.BufType_FIXED;3 s' S/ l) b1 W1 D; \
2 y9 n2 x- @9 A* V1 M" E
var appLogger = LoggerBuf.create(loggerBufP);, r- b1 @3 l9 q: v
appLogger.instance.name = "AppLog_Core1";
$ U" \- M( b, v2 u9 {Defaults.common$.logger = appLogger;
$ Y" c% u; y; D" Y9 T2 DMemory.defaultHeapSize = 0x8192;    % p6 B0 c7 c' N+ r5 A
Idle.idleFxns[0] = "&LEDStatus";: q5 w2 G5 t# k0 q# ~* w  ]
Cache.initSize.l2Size = Cache.L2Size_32K;0 |4 I5 [4 G. y" s. L3 t# Y

+ p) i5 ]7 e! [8 ^7 T7 u( S
回复 支持 反对

使用道具 举报

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 B2 r2 \2 e6 w% m' _1 u! o* m3 j
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
' U5 w+ c9 ~7 e: ~1 g) W/ uvar heapMemParams = new HeapMem.Params();1 e& t8 u1 k9 T8 O# B
heapMemParams.size = 0x4000;8 E5 o2 p( u" g) E; ~
- n( ]5 I2 j, c- a. ^, p$ M
var Memory = xdc.useModule('xdc.runtime.Memory');
1 B5 |4 l/ q$ \7 F9 R3 oMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
" [9 o: L7 R, i, V8 O5 @, e/ A" n2 c# L) F" b1 G4 Y
我大约calloc  每次共计大小为5K*16bits,
: L% ^: w! i9 q0 m+ x而默认配置才0x4000、需要改大。4 Q( `' M$ H6 m
% v6 Q5 a& y& W
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
' v3 q" A9 ~" `, R0 {! cProgram.heap = 0;
: L0 i/ e7 \, w. L+ p& S( YProgram.argSize = 100;  /* minimum size */1 R* Y7 Q/ g/ o( j
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-30 21:00 , Processed in 0.041191 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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