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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构- N$ ~6 O1 M+ |9 Q/ c, W
) b8 I3 m" T  ]+ i
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
: v; W) I- y+ @) B; I/ F3 f$ o% d: ]( l8 q
其他程序段。。。。。
& d  x$ `7 M0 m8 \; a$ d& D 3 k+ U2 U( Y' v" U$ N
   free(x_d);; c7 n* v; g6 S2 u3 q' g8 d* x

6 Z. I" Q0 Q9 ^# s" u( z7 m+ X& }使用DSP侧单独调试功能,验证动态申请没有问题,  W, h' I3 u8 ?+ g) [" v6 B
3 P& d* ^0 H7 @- T% n1 X# i
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
1 H3 Y. x2 `, M3 L5 S

$ ^8 Z* u* R& X+ a
: I' a/ s) M- C" c. X& V, G
. ~% @( ]0 h. z0 y6 k) _- Y& _, O/ L
& E$ {! A7 a; K& l! _8 x
/ n4 Z8 u1 B. ]1 w' [5 D' q
/ ]' E" q' P7 l' Y

$ I/ w) o  i& {- P# B3 x
% Q% a4 c% g% R) X: v* g/ K  p; d0 A, ?$ I: b. r
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明* e+ _+ v- K; U! j7 W+ s. p) ~
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
3 r. W' `! C: w- f# T(不过疑惑的是,为何单独DSP仿真就没有问题呢?)5 ~* v+ ]1 t) U, q- d, C- A
$ ~+ {+ O8 g7 p( P' `; z! b* i0 |
是不是需要在DSP.CFG中进行配置
- f: C' V" X' I% y* M我现在的配置为
& E5 m. X2 ?6 F! O3 @9 g, c* G& j* @' R" `- \' z0 \
/** Y( F" w- D- L0 {3 k
*  ======== Operating System Configuration ========
; o  h; Z$ P& L */" ^* m) w+ Q- p. i# b

5 G0 T" B/ `0 e0 h4 ~8 w! C/* no rts heap */* n8 b4 `6 \1 Q4 h
Program.heap = 0;
0 r! M$ g& W% v+ Z0 PProgram.argSize = 100;  /* minimum size */! @  x6 o# N" Z
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大0 L6 d. N2 _0 f6 J

) h4 Q# J+ y- z6 O  l" x, `  C# T/* create a default heap */8 J& d$ }+ j* `" e0 b0 S9 I
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');0 V, n: y# I  q8 l: t
var heapMemParams = new HeapMem.Params();
3 S& W+ u! M- {& b& d) BheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大" a9 E0 l/ Q& H! `- S

; [( r$ M- V1 W2 U' s# q+ X* y3 A
var Memory = xdc.useModule('xdc.runtime.Memory');# `0 j  A( @% o, m. C+ b
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);4 d& m- a5 J8 z7 i. ^. b

# V9 v) S; }. L' N5 v* I5 {/* configure System module */9 H6 J, r3 ~9 v. ], I) D
var SysMin = xdc.useModule('xdc.runtime.SysMin');
/ p' r6 ^- l5 ?7 QSysMin.bufSize = 0x1000;
8 p4 H9 a8 @6 ~9 eSysMin.flushAtExit = false;
9 N# F# s$ O6 o
/ K7 [- P  c" o, ?var System = xdc.useModule('xdc.runtime.System');
& R  {/ ?/ [" ]& H5 ?) u  D* q" NSystem.SupportProxy = SysMin;! Q& Y; M7 @; l8 a

7 N1 T" \  `8 m. C7 f! C0 n/* configure SysBios to use the lower half of Timer 1 *// x6 D. W. ]/ u9 }3 S! M
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');/ Y$ v5 f1 E4 |+ G+ L9 g
var Clock = xdc.useModule('ti.sysbios.knl.Clock');. q+ S3 S: N4 g% n
Timer.timerSettings[1].master = true;
% H$ y" R( x$ ?( O; DTimer.defaultHalf = Timer.Half_LOWER;
% h  W6 Y: J7 }) F! G8 l" HClock.timerId = 1;
4 ?7 w: R6 K! c9 S0 l' X9 ]5 D$ c6 j7 S0 K7 g5 L$ F
" J& A" z" y& a# B; h6 N
/*
3 R/ Z+ z/ a; n+ N6 B: I3 q *  ======== Miscellaneous Configuration ========
4 r' }8 [  k; N) D */8 u# q/ ?* f/ r% L  T4 O% b

: ?' P  r8 a2 D( q/* set default diags mask */
- l8 g* Y8 V4 P& E; jvar Diags = xdc.useModule('xdc.runtime.Diags');6 Q4 I8 \2 P" ~0 V
var Defaults = xdc.useModule('xdc.runtime.Defaults');7 b1 D7 Z6 X! C0 L) X8 D# E7 A
# r* |5 W) e( k" D, y
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
7 a! D1 T. g: r3 u+ \6 o$ ^' ^Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
# w+ s9 s4 l  W' T5 cDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;7 v: m" C$ Z: Z
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */; l5 a6 k$ @9 E/ P/ }! F
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */% W* [4 M" m2 }% a1 Q0 H+ n8 u
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
9 i1 w* ?1 u3 O) |  GDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;  @4 U5 E) ]+ X6 ~* ~' z1 q
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
6 D" Q, \/ N7 sDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;8 I( W9 P) ^  P4 N. ^! b9 m- @
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
( A* O* g7 F: c! UDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
0 `% k/ p- y$ {Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
/ _' b. V  G" Z% \+ O' t$ F' F, ODefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;  a0 f  Z9 W+ u, }' _
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;; ]% q4 r* {( x
2 n1 }+ }" L# s( \9 |+ d
/* override diags mask for selected modules */
1 w' r6 P1 _) V0 ^' X1 {xdc.useModule('xdc.runtime.Main');9 b, C' W# F: q' t. ?
Diags.setMaskMeta(1 f' T2 q: C( S3 r
    "xdc.runtime.Main",
7 l( p7 p4 j. t2 h    Diags.ENTRY | Diags.EXIT | Diags.INFO," B& a/ z/ q  g9 f, D" i
    Diags.RUNTIME_ON* \9 l. v) s: p  z( S0 P
);+ |- o/ P+ x! a7 B& O& e
* S1 z( @2 s; I% W  M* A: D
var Registry = xdc.useModule('xdc.runtime.Registry');- {, t- C; q2 a4 e8 o. A
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
9 F$ s' h3 S' G# b2 V& Y" B  }9 kRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
7 E: ^2 ]1 D2 [; l) Y: E3 \Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
/ d0 G" i7 v- R1 h* ~: N/ LRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;4 ]1 q+ _$ y. j1 Q8 Q+ E! \6 G

& ]7 j0 Y) k; H# g. N% r/* create a logger instance *// [# W; _: Z7 N# r9 b
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');( |. K( k, S0 M
var loggerBufP = new LoggerBuf.Params();
3 z1 x( K) d$ O1 Q- PloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */% ]3 _1 N, v: S% s% o4 a* F3 o
loggerBufP.bufType = LoggerBuf.BufType_FIXED;; u, ^2 X, g8 q

8 M( {/ m6 J+ Y' M% e5 qvar appLogger = LoggerBuf.create(loggerBufP);
. P; Q1 X& Z& ]* `5 E  ZappLogger.instance.name = "AppLog_Core1";
0 M6 s9 d3 k- B1 cDefaults.common$.logger = appLogger;
3 s# \0 K$ y4 Y: c) lMemory.defaultHeapSize = 0x8192;    $ j9 Y8 U7 z7 Q4 b) \. d& x
Idle.idleFxns[0] = "&LEDStatus";: P, F; ^+ j& a& U) r0 w* M  H8 O: ]
Cache.initSize.l2Size = Cache.L2Size_32K;
6 `& g6 i4 g$ L: b' X3 N  ]
5 U: R1 p# n4 C* 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 */
  ?) I2 V2 j# I! Q) {/ v& Ovar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
7 p+ A  ^  m+ G- [: l9 s. B4 }var heapMemParams = new HeapMem.Params();3 h& ~6 Z" [' Z6 }, b( y" B
heapMemParams.size = 0x4000;
; n# ^$ T: R( x$ o9 ~& o, G. _: L: Q. s0 V
var Memory = xdc.useModule('xdc.runtime.Memory');# T* ?( T# J. P' c
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
4 `3 U% t% A( G8 Z6 a$ {6 p8 v! ]- B5 T  l
我大约calloc  每次共计大小为5K*16bits,
/ e0 D9 r, N2 |; \( |! v5 g( S而默认配置才0x4000、需要改大。+ [* |- q/ T7 T7 n/ _. N- Q

# x6 g2 Y, L9 M: E0 J" i/ [6 b
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */* b. c* D* A9 ~2 K4 T, D
Program.heap = 0;
5 B. X  L8 m9 J4 RProgram.argSize = 100;  /* minimum size */0 o, B7 ~) A: S8 u: X
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-18 01:35 , Processed in 0.043742 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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