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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构8 D5 c7 u& L/ m; S/ z  j3 s
/ v2 y" W( c7 J( V6 j  W! Y0 \* M
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256/ i% }, V, N$ b, L

+ T3 _. N! J6 m其他程序段。。。。。
: G7 [3 ^/ c9 \6 l2 n : u+ A& f) o6 ?
   free(x_d);
) Z: |9 s) S  T7 t6 s: B8 |. l( f, z7 l
4 h& I7 ]& m; F使用DSP侧单独调试功能,验证动态申请没有问题,$ {, m* q9 B- O. n
: S8 F% \8 b6 @2 K, l
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。0 J2 ~5 B* Q, c9 g  m: ]* c

; B& L4 S1 ~. H; A/ A. m" a! z5 L/ b; A

& v- o3 s+ G: ]+ \4 v3 W7 M6 F6 E, [- p$ N: j
' b, e8 Q" n) a- g7 }
7 X7 s) G. J* x1 d% |: s1 O
. v. ]0 J8 {' i3 R/ o3 v

- f5 c' ?+ B9 Z  k8 ~+ I$ A0 @/ t
" L  i! C  I2 j4 X$ I' b0 P: n& k% A( f
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
7 N7 H( I/ d1 @Program.heap = 0;- _  E# y3 w8 R$ i" @1 T
Program.argSize = 100;  /* minimum size */8 k* y: ]# Z7 w4 P
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */& B6 ~& B2 U" ^6 D5 d; r
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');, L1 k' H7 t. y. l- d  x$ Z7 X8 z
var heapMemParams = new HeapMem.Params();8 F2 E, R6 I3 J1 q5 Y) z7 Z
heapMemParams.size = 0x4000;
, _4 Q1 m$ G/ V# o& i2 }, z9 z, ~% B* q( ^! H$ S
var Memory = xdc.useModule('xdc.runtime.Memory');3 x7 P; B$ a& w( v" N- X& d
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);; c. p' @! b; f% i" s  T3 s

  f' R$ _9 D! i+ x5 W7 |我大约calloc  每次共计大小为5K*16bits,1 K  o( ^+ K4 C- |
而默认配置才0x4000、需要改大。
/ b9 u* G7 M% q. z; X! @. i* G6 \2 j( J$ K$ L- x
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
& h9 A/ N6 y8 m, B# g$ A- t我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下, \) m, L1 H" C4 U6 O
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
( g% d  K. N8 z1 v6 A) D6 y5 F
% I" A. v8 Z8 d0 U
是不是需要在DSP.CFG中进行配置
+ y# v7 S7 j% l: u3 E' i我现在的配置为( ^4 ~4 L- r* e4 ^  Q$ Z9 @
2 g+ y. z( Y: D. J4 j
/*/ n* u6 B3 X( v) f; {5 y
*  ======== Operating System Configuration ========% M# p3 S) H+ {0 d; ^# v* `# N
*/) r! X* @  o% {& A) \2 _% I- }

; j' \6 K9 l/ _: V/* no rts heap */% E& I9 b) k6 w9 T) ]0 i
Program.heap = 0;
5 h1 s0 c" L9 R7 f( q& b( uProgram.argSize = 100;  /* minimum size */  ^) p: l4 `- }2 X4 R# v
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
$ |/ L- t& n- u, x$ r( J
5 K) a/ A# [  j" ]9 }/* create a default heap */0 |& ~1 P: n$ q: y; [7 u& V& K
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');7 m/ L( _1 E- Q& W
var heapMemParams = new HeapMem.Params();6 r- s5 ]- y* Y, s
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大1 J" Y: g' K# o8 l$ T

8 a. W' @! P% H" W9 Q
var Memory = xdc.useModule('xdc.runtime.Memory');
2 F9 x. N7 H# m% s4 o7 \Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
, s' N! ?5 D2 V: V7 h8 ^+ `/ s
9 H/ B* Y: C, ?  ^/* configure System module */
; O3 U2 v; I7 Z# @var SysMin = xdc.useModule('xdc.runtime.SysMin');
$ f0 R: p& D# [) M" S! p9 j# r; zSysMin.bufSize = 0x1000;5 O) S* T$ o; B7 z( Y  U
SysMin.flushAtExit = false;# v0 z3 h; t& g! t" j5 K

6 G4 G, e7 [" w& j$ bvar System = xdc.useModule('xdc.runtime.System');
" f8 V. O+ h$ z, c: fSystem.SupportProxy = SysMin;! W1 u8 h8 H1 g. Z" d4 q

& U4 E: z7 n# q* d# G6 i# n: x/* configure SysBios to use the lower half of Timer 1 */
5 K, H( }( R: W, C  s( Qvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
$ u" g/ u% s6 @6 D2 ^" _# u9 Gvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
  q( Q4 C; q( D  N5 |- b" qTimer.timerSettings[1].master = true;
6 e7 x- g9 r: @( V+ D7 m2 ~# C, UTimer.defaultHalf = Timer.Half_LOWER;
! H4 X, L* S  U7 V" x& v/ zClock.timerId = 1;
2 `' x; J# C2 y1 `! u/ Y# ]" n6 p* s) Y6 Y
. U, k$ c2 Y% b0 r* [
/*" k, @% o6 X+ c7 v8 ]# v
*  ======== Miscellaneous Configuration ========4 j6 C7 Q. n1 j" m
*/
8 E  |( c6 L2 B! R* w, ^) i- x- f+ v# ^) \( W: q& P% r$ Q
/* set default diags mask */# i4 g0 P/ J2 T& s) i
var Diags = xdc.useModule('xdc.runtime.Diags');
1 V) D# U/ f! m: ~4 a8 F# Nvar Defaults = xdc.useModule('xdc.runtime.Defaults');8 g' I7 g5 {3 v8 h  r8 }& K+ L# X

$ {# q! L& r9 U  [* GDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
9 q& J7 u! t# KDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;8 u; e# }* y6 V4 H. n8 X0 T+ S
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;" O% H, |" }& I8 j6 m* J& f. o
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */9 C, X; A0 T* ]+ f3 O1 r( V
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */- z) T" Q  e5 P- D- d2 Y
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;6 @9 S' v3 d; T2 ], M% y
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
5 j0 [7 K5 T. d( aDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;3 a+ ?1 l1 D" {& [
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;" l4 v% j+ j( S7 H& N
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
' y5 _" g: Q! r1 T5 P( w& r; GDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
' ?4 G! Y; u. u1 D3 l5 N: jDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
" {+ P. V+ M" ?7 [Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
0 |+ K- j5 N- D# T1 j: EDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
  d$ `5 L1 y7 H' v4 S
7 A4 U/ K, d; p2 `/* override diags mask for selected modules */
! ~3 ]: \) y* E% `" }  v1 K9 V+ rxdc.useModule('xdc.runtime.Main');: H1 Q, v2 q7 _" o- ~
Diags.setMaskMeta(
% b  V! D7 W5 H+ f  }3 v1 F6 W8 R; m    "xdc.runtime.Main",; b. F! h6 @! r1 Z
    Diags.ENTRY | Diags.EXIT | Diags.INFO,% [1 x( I% o; _9 W
    Diags.RUNTIME_ON+ E7 V7 P$ B" Q7 E; i- U/ O) n
);
) a5 h' k7 b2 i" d3 L
) B, m! O% w: b$ h1 V* R. Bvar Registry = xdc.useModule('xdc.runtime.Registry');
( L6 n# t, ^8 [2 tRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
" Y7 Y- \9 R1 S7 y1 YRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
3 c& j, U" D& K! [% H/ O1 R' cRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;5 m  u7 E5 H- l5 X& G  O
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
% x5 }  \& t7 a4 z# T% T- P+ H3 }1 E  }1 I
/* create a logger instance */: X4 D2 a& q; z3 J8 ~9 s, k
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
; h/ w7 N; Q8 G$ \; ?- y4 yvar loggerBufP = new LoggerBuf.Params();
( I) w6 c( h( `: ]) s+ }3 I# H; PloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
+ S. M: l7 R. \# t/ j# {loggerBufP.bufType = LoggerBuf.BufType_FIXED;. y% d1 W% t/ Q- ]9 X

( I4 c' @9 N) P) \var appLogger = LoggerBuf.create(loggerBufP);
' Z2 l* v: b) J7 ^* ^appLogger.instance.name = "AppLog_Core1";
5 u  d, c4 }- e" Y0 d: C4 IDefaults.common$.logger = appLogger;
3 K8 }/ x4 d& _Memory.defaultHeapSize = 0x8192;   
0 m: i$ k# ?' H3 o" M( jIdle.idleFxns[0] = "&LEDStatus";
$ B; C! X* r, {3 u: ?' ZCache.initSize.l2Size = Cache.L2Size_32K;
: d( O% v; A1 ?( b) G& p- E8 M) x8 Y  h6 K' j4 d2 J0 n
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-25 04:54 , Processed in 0.043120 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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