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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构! G& \' a# s( F2 t, U
" O: V9 x1 ]  x1 D
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
/ R2 ^3 B7 Z" g$ P5 @, E. H3 [' ]4 X, G2 X' ~" x! P& s3 j
其他程序段。。。。。5 Z4 B7 I( }4 W( y

& c: s6 T8 o' X  ?   free(x_d);
- G* E' U: ?) |, ^; I0 z% m) w9 }+ X3 \* ?' F$ o
使用DSP侧单独调试功能,验证动态申请没有问题,/ X/ x" _; r) m" Q+ g& r7 d( b
7 e" H7 O! `, T, }& M  d
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。* t. j8 [% U+ k/ w& ]' A9 V
3 L5 E# e9 L! J9 T

* [* Y0 I, `5 |7 g( E) R$ \) Q% ~4 L
+ k  `' d9 F$ ~5 K/ u9 O. N/ `5 J" @# Y5 i: l

8 I8 w/ |" Q1 o8 c8 |
4 S& D% f" u  U0 T% }8 ?5 f. q7 i+ F2 e! |: |; n; f
7 T' R- x8 M6 c
$ j! G3 W) F/ t7 Z

- v1 }& V* j1 W" l: o: v' A; C7 q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明$ A2 A* j! M( t( K; y' T- V3 D
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下0 l4 n# |! ^- E/ R' o& q- w
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)8 O% c; m2 C* k% T8 ^' e8 x" C
5 e2 B7 o9 ?. H6 v( U' ^$ i
是不是需要在DSP.CFG中进行配置2 @# d3 c0 M# v" t: k9 s9 E
我现在的配置为
8 l* o6 C: U# D9 n( |: O( k* E- L. E
/*- e% n' T1 d+ |# Y! t$ i  P% P
*  ======== Operating System Configuration ========
8 n) u% J8 U% ]4 k3 | */' C" {, O+ t3 K+ Q
* c4 @2 ~, W: ^. H% D: c- `# G/ n
/* no rts heap */) E) G! K5 q8 s8 j
Program.heap = 0;
' S* P' c( w# N0 x5 E. Q# g# {1 i' T/ wProgram.argSize = 100;  /* minimum size */
; i3 {. V6 W8 FProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大' I6 ~" a4 O, ]7 N

1 T9 e8 ^+ V( z* O9 z/* create a default heap */
; O4 A9 @! H7 [var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
# ]1 `  |, H! X/ K2 L" lvar heapMemParams = new HeapMem.Params();
1 x) Z4 j" l4 ?- }3 C7 _6 R7 AheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大) K) @2 m1 S( i9 }
- C* W0 j  O1 F# p+ I
var Memory = xdc.useModule('xdc.runtime.Memory');5 _9 ?2 i1 T1 c: `4 S9 o# ^) v. Y% d2 d
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
5 A8 j( i$ ?* ], Y, d0 O2 g+ F5 ^
/* configure System module */
; m: _6 q9 c. d. ?var SysMin = xdc.useModule('xdc.runtime.SysMin');) M5 n3 x7 Y5 s4 m/ Y, q
SysMin.bufSize = 0x1000;8 I4 `) E: h8 y3 z: v
SysMin.flushAtExit = false;
( O3 j0 k/ d! u5 S. g3 w* ~% ~% `  A3 A5 y, Y- c! t
var System = xdc.useModule('xdc.runtime.System');
9 H# i' Z1 K  L+ f# KSystem.SupportProxy = SysMin;
6 A8 n% E1 s- p4 E
- s; M  p  l0 k" I( I  L$ u, p; L/* configure SysBios to use the lower half of Timer 1 */% m- G: f+ h0 P+ ~
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');" \9 h1 ^' }' ]* O3 M
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
  Q% l2 w# l$ c& pTimer.timerSettings[1].master = true;
- V% `$ x1 g% G% r6 TTimer.defaultHalf = Timer.Half_LOWER;
; E) |* g: B8 T  bClock.timerId = 1;0 r- `" `; S2 n

3 z7 f- N$ @# E- d& q& k& Z9 ~
7 c* ^# d( S( D$ y; s/*
3 k% z/ V6 v& F& R *  ======== Miscellaneous Configuration ========2 R% m2 c5 l: o+ Y5 o# t% m/ O  P7 f
*/9 g1 Z8 }4 e# y1 J
. f5 R, z- ]9 ^9 L- D! Q6 z
/* set default diags mask */. I3 X) u+ t1 Q: H6 e; B
var Diags = xdc.useModule('xdc.runtime.Diags');
4 W* x9 E# a: M5 Xvar Defaults = xdc.useModule('xdc.runtime.Defaults');, t' C* R' y+ Y4 U' r+ s  T, t

. |2 @% p( y/ O# @2 }Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;/ T% V/ M$ A' ]1 u% u+ F- J
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;8 m0 C7 h7 x' w% A: R/ y" r+ t7 o
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
6 y  i% N% y% D2 ~0 N  o" TDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
0 p$ j3 R% ]  lDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */+ N/ [1 w0 Q7 x# n, ?
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;3 I4 H+ a# ^- {1 |( O2 x3 }7 b7 t& M
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;- M( K/ |* |2 ]6 G) P7 N# x3 B8 \6 A1 O
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;+ [: W" h2 D8 m2 s; j' v
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
9 Z+ U8 D; j6 F( U2 rDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;9 \6 C& Z5 O# G" ^3 m
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;# {7 P7 q5 l" s
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;0 S, F1 W2 X0 \
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
- h3 r# U6 q. g  GDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
. p- S# q' H& b* n
% a6 L! a% I7 F* V1 D( c) }/* override diags mask for selected modules */
; P/ f& T8 C0 z6 G( Q5 jxdc.useModule('xdc.runtime.Main');9 X7 ?3 s6 O4 |- F$ h6 Z8 L
Diags.setMaskMeta(9 i8 c$ ]* o' g: j9 i
    "xdc.runtime.Main",6 t8 ^% X) v5 n6 A1 ?2 H
    Diags.ENTRY | Diags.EXIT | Diags.INFO,  ?3 z: U* O. y
    Diags.RUNTIME_ON5 m2 h$ F' S8 _7 {' W
);
* w8 o5 R. M$ a: C3 r
+ `8 t1 v, D. w- B' p9 e$ H- ^var Registry = xdc.useModule('xdc.runtime.Registry');
+ F8 r4 p, Z; s0 f4 kRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;- V  p- V- h& w+ l8 T, t. j9 f
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
# v2 ~( R% h: M0 r3 vRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
9 w# Z1 n6 i/ ]/ U7 ^Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
0 U/ x. v2 g" G' @+ f) r9 N3 d5 o% a0 b, A6 \5 _- B9 N5 ^) {
/* create a logger instance */
$ L: H( A- ~6 s- e6 `8 n3 Ovar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');$ i3 V' a2 o) d9 I
var loggerBufP = new LoggerBuf.Params();# ^9 u) S4 |( I1 ?: p* s  z/ [
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
8 z# z- x' _: }3 y, g4 ]loggerBufP.bufType = LoggerBuf.BufType_FIXED;
5 Q0 X) J5 D' J! u2 v( k$ \: n* m9 X& w& K( M7 [: f: j
var appLogger = LoggerBuf.create(loggerBufP);
# q7 U  \' [, \5 [. _appLogger.instance.name = "AppLog_Core1";
% S' }. C; h( T8 Y; ^% TDefaults.common$.logger = appLogger;# `5 k% Z: n  G6 C7 I. [: Z% `
Memory.defaultHeapSize = 0x8192;   
$ W3 H5 h9 z# t- v/ S- LIdle.idleFxns[0] = "&LEDStatus";. _+ P& L. G! d- U  z
Cache.initSize.l2Size = Cache.L2Size_32K;
9 w. j" [, I+ X3 c: l1 o4 O$ ]& H0 n+ \3 O
回复 支持 反对

使用道具 举报

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 */
9 z" l9 c/ E! _. W: @5 o0 _var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');% `5 [" }- z" H5 _% i3 r
var heapMemParams = new HeapMem.Params();
; }7 E! H5 L. V: S0 c- N0 ~" VheapMemParams.size = 0x4000;9 Z1 v1 J% F/ D1 g% `( m
( C. O- n& W: O* E3 w7 w
var Memory = xdc.useModule('xdc.runtime.Memory');
1 H+ D* ~) K6 e% b# {" l  I8 `9 gMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
/ D' \. Q- g* O, H8 e
6 [1 D+ s) g2 D7 q! `0 T% k" g5 |我大约calloc  每次共计大小为5K*16bits,% J' m) ~) H7 V* w/ B
而默认配置才0x4000、需要改大。7 S0 ~  f- W" U* [

6 @& F0 w; \" ^& B) d, ]
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
+ U. d) W/ m% O3 y( ~8 p8 V5 LProgram.heap = 0;
6 ^- W/ l+ d: u% W. Z, T% oProgram.argSize = 100;  /* minimum size */5 l9 I" c4 k& \; |6 l
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-3 11:08 , Processed in 0.041206 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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