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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
0 Q, S( w/ ]: A& [
7 m; `( V$ w" s9 E2 V3 ?    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
3 i9 V* |; i9 P/ m+ d8 c2 ]
4 u; ?, L8 e. `  }3 \  j其他程序段。。。。。, b, J4 p( ]( Q$ B- f1 w
% ~7 f7 D0 l! c4 d" J+ s1 R
   free(x_d);: \, d, s3 D: o: O4 [- A

1 Z. X5 @0 Z2 H. ]3 S使用DSP侧单独调试功能,验证动态申请没有问题,) S$ {7 b* s& e% g+ A5 G
$ L' K1 X; `4 u( Y% L6 \, v
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
3 D( l" O& `9 k9 }( U( P
# j) u( U- T0 v% F8 l  d( e

* M1 Y6 x1 }# _% L3 p0 W6 r! m# D) n4 e' U9 d* @
4 A+ B1 |. a% r/ V5 A
1 k# I3 |" G5 O
# Y& C& f! ?: X" v

; @$ Y- K, W6 Y5 R, x% a5 m. t( \. i" x# I

9 }5 m- l9 C* K0 m5 |/ \( p- Q8 @% M3 e  @0 K; _+ Z3 J
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明) G6 m2 g9 p' s5 g' {7 q; K; e& M
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
7 P9 }7 H! p4 ]7 v(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
3 J) C' m* F* m5 {0 y! T- T: `

8 n) C& u* s8 P; [) H是不是需要在DSP.CFG中进行配置: s: R6 R! M2 W$ ^" d: X! ^  c3 f% F5 a
我现在的配置为
4 j! y2 a) ^, o/ s; n3 D* K1 p
- p; B6 C; l& W/ A: ]$ T/*
% l. {3 T$ B) Q  A *  ======== Operating System Configuration ========
% K( s2 \7 A1 I, r! j( j */
6 w) B% [5 Q4 s- Z: S0 h# h5 T6 J! v; t! [( e) H2 ]2 l8 H+ U& B
/* no rts heap */
9 W/ }, \1 \7 O( ^5 v+ yProgram.heap = 0;
$ F/ o$ x) c0 Z. ^. O$ PProgram.argSize = 100;  /* minimum size */
. c. A* Y! c( i  G- b  p' FProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
# c" l* }1 d$ S, K! ^4 Z2 E$ E3 e
4 K0 P- _* V4 M8 {/* create a default heap */
. N6 {; k0 S; n7 I$ Cvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
! E  z/ A9 a+ I6 S# @var heapMemParams = new HeapMem.Params();
. G. W% ?% L0 M) P4 AheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
- O5 {! `4 k% b( D( ^/ z" i* t8 }9 \5 Z1 t9 S! T
var Memory = xdc.useModule('xdc.runtime.Memory');
5 b9 ]6 W# W! u" C) h' fMemory.defaultHeapInstance = HeapMem.create(heapMemParams);0 A# N4 i- }1 C5 H

8 P, X6 O- P5 M; b& m" F/* configure System module */$ z7 a" N8 G+ l" E' P
var SysMin = xdc.useModule('xdc.runtime.SysMin');
+ i# C/ m' _6 B6 X9 WSysMin.bufSize = 0x1000;
5 C. [' Y. ~! _! v# A. g2 p  bSysMin.flushAtExit = false;
: P- t: a2 ~* z: ]8 {% h" [
  u, r! H6 _3 l5 _; m7 dvar System = xdc.useModule('xdc.runtime.System');
8 d9 Z& m& O' B: d. j5 JSystem.SupportProxy = SysMin;
# G" z& k! o0 l& F) G" r, ?5 V% B, \( P; w
/* configure SysBios to use the lower half of Timer 1 */" ^. Z  ]: L0 v' Z2 S; @: G+ ]
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
5 b. T' h  O$ }/ L' C5 jvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
* f- Z& s% U# @# ]5 j% yTimer.timerSettings[1].master = true;
8 S9 L9 t3 J+ E( g7 oTimer.defaultHalf = Timer.Half_LOWER;
) w  E! J  `5 k* QClock.timerId = 1;
0 S- k5 x( L% ~9 t& U
# o- e8 f+ Z# U" F! u
: I! R! W1 Q  m* a& Q/*
3 f4 Y- r; T- X *  ======== Miscellaneous Configuration ========4 o/ @; s. C' {2 n+ W! j' T) M- m) v# ^
*/
+ S" m6 [& v) s" i9 \0 W: B1 w$ T: V- j7 i3 @  k% J2 C4 k  l  o
/* set default diags mask */7 r5 H" H2 h, r: C$ X' |
var Diags = xdc.useModule('xdc.runtime.Diags');
; Z% [! X+ t2 E+ j- k& Y; u$ n2 b6 rvar Defaults = xdc.useModule('xdc.runtime.Defaults');
) C+ |0 j6 H: @
- N1 B0 D: Q) \# k. ZDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;' }) l# U5 b0 y. b2 M
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;' E& {7 ~% m. A0 {
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;3 @+ Q! M' W- Q6 w5 Q
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
2 K$ W4 C' R7 P" a% Z1 H% b  jDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
- L+ g5 w: \. ?0 M  WDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
: }* L0 U) O- v6 e/ `Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;4 t+ S( `! [! ~8 j* ~1 ]5 @
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
' H5 Y& {, P) a9 Z# @9 YDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
3 x, B% Z# E* w6 l! ^Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;* b/ q  Z5 ^) x% H& H0 j4 \% d
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
$ @* y  c2 \6 H" ^, Z2 z& e1 }! }Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;! U* z2 ^  v& i" c& O
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;0 S& \% t+ z& G! G: I1 a5 J
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;; M/ @& R9 {% D$ n( m* l
  x; |0 Q& F0 Z" N* D
/* override diags mask for selected modules */
, _" o7 K* A8 Uxdc.useModule('xdc.runtime.Main');5 p3 q0 c  e& b
Diags.setMaskMeta(, U8 e; x0 z3 i' j2 G+ p; z/ ]
    "xdc.runtime.Main",* ~4 a$ W+ b1 X0 d# ]
    Diags.ENTRY | Diags.EXIT | Diags.INFO,( r  E- v" y1 F$ l( a+ l
    Diags.RUNTIME_ON
+ Y* f; u2 O  k2 v/ y5 S  Y);! G: ?% g1 h7 A
; d5 J4 m/ l* T; w+ o1 [' J2 m
var Registry = xdc.useModule('xdc.runtime.Registry');9 t3 L, f( L3 U3 l3 C7 d$ d% N
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
- Y8 G) [; J7 }' I( {Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;# D2 X$ D4 {7 K6 M
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
0 Y/ n" t; W9 L; L" T, G/ U2 q' PRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
0 E5 |# y# U0 \+ t% ~. _: q) A0 v8 o( s2 U/ ^+ J2 x
/* create a logger instance */
; F( V- X& A5 U9 E4 t& ^var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
, D3 p3 m7 ~- ]) ivar loggerBufP = new LoggerBuf.Params();
$ F' M4 E5 G9 Z+ m4 Z: [% NloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
* X" L: D7 [8 W! E, CloggerBufP.bufType = LoggerBuf.BufType_FIXED;
7 F' x  x- Q- c$ Z6 W) F# a  B* I9 ]- d% a; a  l% P
var appLogger = LoggerBuf.create(loggerBufP);
' x0 y6 z2 s0 g0 M! L% t; LappLogger.instance.name = "AppLog_Core1";/ ^; O6 p% B( A# C: u
Defaults.common$.logger = appLogger;
6 t3 N( Z1 _; e6 z) oMemory.defaultHeapSize = 0x8192;    . v5 O9 m$ Q2 X' \* [6 d6 G; @' o1 ~' c
Idle.idleFxns[0] = "&LEDStatus";
  d* n) A4 r- B* Y9 V/ q# ^Cache.initSize.l2Size = Cache.L2Size_32K;
- m" T1 A/ q  t) p. w/ y2 a. A" f
回复 支持 反对

使用道具 举报

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 */
  F4 B9 }/ k) i) \var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
& A6 d/ h/ Z4 _. @4 Vvar heapMemParams = new HeapMem.Params();1 R: t. r- l: b
heapMemParams.size = 0x4000;
9 S6 _0 t- q% y% L8 F- r% \1 n* {! m6 q
var Memory = xdc.useModule('xdc.runtime.Memory');+ \4 O4 p' z) |5 z& s0 u
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
: W4 C- y& M6 @( r/ j: o0 I
. y% A4 F) }$ l" k1 ], X我大约calloc  每次共计大小为5K*16bits,
, m( {; V( @# v: K8 c而默认配置才0x4000、需要改大。
; H) l3 Q0 M1 b1 C% |" w. V* B2 p# r/ B
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
: _3 Q. o0 \* e7 ?2 gProgram.heap = 0;* {' H& N  D, r/ y
Program.argSize = 100;  /* minimum size */
# d3 c: C- M# ^9 Y3 R# Y- JProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-28 02:35 , Processed in 0.042299 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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