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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构7 z2 f, D$ G0 e, I3 [

7 q3 L. B$ x, n# I9 ~    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2565 r3 W7 ^" H: Y- l' |$ _
; s9 g6 y% q' r
其他程序段。。。。。0 U" T0 |! P* Y/ S
: C& ^0 I7 x* U! _  m
   free(x_d);
9 T" h2 v, h/ D9 \& z2 x( T1 q, F, P
' a/ [/ k  D" N$ @' ]使用DSP侧单独调试功能,验证动态申请没有问题,6 M7 K! Y8 H2 w% s: k+ X% M
& Y& W/ M6 P3 n6 R
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。9 N6 H" l) A; Z

  i9 d& }9 @% G, }4 c/ e% b2 s7 G5 [4 R6 e) K

" m! u* I& A$ F# B2 @3 J6 M6 S* p7 X4 E) I4 a* m2 r8 K) F, \2 `) V# n

% {& ]  v6 Z% O. p( {  G% p0 D/ i0 Q) H, y& o( u6 d/ e

3 T$ S/ D, ~  X$ \7 k' O6 c2 X1 [& ^4 h! \6 J7 z
4 Q9 I* @" n% i% n. @' g% \6 k
+ }) X2 e& ~. D$ Y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明9 h6 t+ W$ q% q) S. g+ i
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下9 D9 _( @/ I0 g+ ^7 h, H
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)9 {3 j9 S6 \7 B: N! ^3 V! w/ S
& Z- f) Q+ I/ e% d; r/ |! p
是不是需要在DSP.CFG中进行配置
1 L2 ?: C; F/ M0 H7 F. v我现在的配置为
3 u. v: ^3 r: ?9 g
$ j* n  G  X- v$ K' U7 v/*- I) u; j5 z- B5 E& l3 I1 [
*  ======== Operating System Configuration ========  n4 J/ I) T7 A' \$ Q+ r
*/, ?/ j& F% L/ B' Z% R$ {! w

1 v' F* H: Y# y/* no rts heap */
$ ^0 j  }7 @+ q- G: G7 p, {Program.heap = 0;
" C! A  T& L- n5 W1 DProgram.argSize = 100;  /* minimum size */
. u5 C( |. u9 {& |4 a1 NProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
# n8 y: u* L% h" o# D* H* ?- z* ]' o4 l' v3 M
/* create a default heap */" [0 J* ?, [. g" C1 Z8 k
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');( X% Y, x! d* W  G
var heapMemParams = new HeapMem.Params();
% P6 X5 x, q: U% F; e4 FheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大9 o0 j' Y- m: ]

9 T; C1 X: ?) i- _" m2 E
var Memory = xdc.useModule('xdc.runtime.Memory');" _! }* ~& [9 R$ b6 W
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);, H* H7 T# V# `5 C* a! s$ f- A) X$ \

0 k' W! z; S2 W/ V) _/* configure System module */, s0 i* g' A1 E& @9 f, i+ f
var SysMin = xdc.useModule('xdc.runtime.SysMin');5 j9 k+ {! B, B( ~* F
SysMin.bufSize = 0x1000;( v) o8 z( ~+ _% E! y
SysMin.flushAtExit = false;
' e2 s$ _- w; |. a9 P: m/ \9 J; o$ i1 ~. g
var System = xdc.useModule('xdc.runtime.System');
  A! F9 ^$ ], i! w  ySystem.SupportProxy = SysMin;; T. b- ]6 a+ o: J1 y
/ g) S6 s- T9 y1 k9 Q& t5 `
/* configure SysBios to use the lower half of Timer 1 */, H2 p3 \/ q: c9 o
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');8 C1 q* c' S  K& F4 }4 S! d8 D
var Clock = xdc.useModule('ti.sysbios.knl.Clock');4 P! }5 r3 D+ D3 |
Timer.timerSettings[1].master = true;
9 x  m6 S4 E& b. QTimer.defaultHalf = Timer.Half_LOWER;1 K6 U+ i3 H! I5 l% u) ]
Clock.timerId = 1;
% t) f* i$ C4 U3 Z4 H. S- @: K& {2 V9 H& r) Y" U* j9 k

/ `# }* v3 Q. g5 h0 X5 E/*
& R' O1 u( i9 E  s8 t( i$ z *  ======== Miscellaneous Configuration ========: h( u# B+ E% Q0 }2 n/ V
*/: t. p6 o) ~. p* S% F

* T; l: M# v; Y/* set default diags mask */
* S; s4 p  F4 ?7 B7 }var Diags = xdc.useModule('xdc.runtime.Diags');
, c- z) Q5 l- [( w; @, L' jvar Defaults = xdc.useModule('xdc.runtime.Defaults');$ C, u. G7 I3 V. u
' m+ M* a- @8 R( w8 q5 P, R7 b
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
: y4 z7 i  g1 r4 tDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;& J1 N+ Y  l  _. m3 ~, h1 p
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;) q, F' ]! [! J1 p6 \
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
) W2 }4 U4 R9 x! B2 `3 D  cDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
* e) N2 i# b2 q4 q, C* B1 w5 NDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
& D4 j* e' A# G" _& E7 X: y8 JDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
" A% [! V7 A7 H* O5 C7 UDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
/ `# m) [5 ~& m+ b/ j6 eDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
1 A& y9 X% Q5 b  h" cDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;+ |3 Q8 m; k1 y
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
0 }& h/ h6 V6 {7 P( pDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
" x* p3 N( ?9 ~1 ?$ @1 f. d  mDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
2 m0 D4 D6 k* P5 NDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;' v7 E9 v7 J- l6 i+ e! K: D
+ }: n6 K) A: y5 u, A) L
/* override diags mask for selected modules */" w0 W' u/ |3 u; f2 e; ?$ a
xdc.useModule('xdc.runtime.Main');
1 r7 }" X& t% z8 @1 P5 ODiags.setMaskMeta(+ j* Y: |3 B7 L. i1 e
    "xdc.runtime.Main",
% G$ q; ]( i. Y  c# e2 v$ ]# ^    Diags.ENTRY | Diags.EXIT | Diags.INFO,
, e( V# _& C& ~& h9 K    Diags.RUNTIME_ON
7 J( j) u+ y7 m8 l. M0 c) I);1 a- b) `' S* r: g  F6 o6 |
# ^2 t% ^% e% \/ s7 d! q
var Registry = xdc.useModule('xdc.runtime.Registry');
+ n& k+ ~& n( a2 }Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
! A7 W/ W$ `! I% ~+ ]5 Z! f7 p# FRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;" {) d* {% k9 l0 h  C( ]
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;) E) G1 T! x! Q% s* \% S: `0 }
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
0 u* V5 h" X5 w  B/ Y2 p+ |
, s" l  c: w5 O" z7 [/* create a logger instance */
5 {3 F6 {! j. d0 s* t  b5 pvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');  X! r5 s1 K) o& h- s
var loggerBufP = new LoggerBuf.Params();
6 ?. z- J7 R5 |$ S  PloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */" q. G/ p! j5 a8 _
loggerBufP.bufType = LoggerBuf.BufType_FIXED;2 s+ @; v6 n, Q

. Z; N! f0 r+ p( wvar appLogger = LoggerBuf.create(loggerBufP);
3 w. X* `' q7 n7 B$ NappLogger.instance.name = "AppLog_Core1";
* A1 L- g; Z' J1 x! B. oDefaults.common$.logger = appLogger;. A( r3 x. O* P  C- [. U
Memory.defaultHeapSize = 0x8192;   
5 A' L# A' k4 x+ v+ vIdle.idleFxns[0] = "&LEDStatus";
7 F1 }2 K0 g. m- A0 U  GCache.initSize.l2Size = Cache.L2Size_32K;  K. L, U2 ^3 r* G+ t# L! h
' t4 Y! d8 O$ s" Y4 o9 r
回复 支持 反对

使用道具 举报

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 */  R5 U+ I  b1 U
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');7 W. `3 V5 ]* q# c, c% @
var heapMemParams = new HeapMem.Params();9 V: S' B% @7 G8 g
heapMemParams.size = 0x4000;
1 S% L9 i3 L* E6 D0 N7 V- i
* S" z% Z  m) v0 |3 l1 `var Memory = xdc.useModule('xdc.runtime.Memory');
4 ]6 ?- E) A, |4 y! |Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
# H( y2 `& n8 v, A5 I1 d4 K
+ p$ ~9 B5 J% k- `' N+ {' K7 Z我大约calloc  每次共计大小为5K*16bits,8 r9 X8 M7 ]7 D' {
而默认配置才0x4000、需要改大。9 X/ P. i. V2 Q  U

. q9 Z  h; H' i/ J- [* l
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
) v$ y2 B6 ^9 n! M$ Q9 dProgram.heap = 0;
" a3 N# \  I' t! }" |6 [4 W4 O7 EProgram.argSize = 100;  /* minimum size *// H+ m( [$ d' G
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-20 03:53 , Processed in 0.037410 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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