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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
1 C: y* M) h. D
/ [% Z( |: f$ V    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2564 n4 O2 {/ t, d; B" G
3 @8 N/ e' b( i* i
其他程序段。。。。。3 @+ n7 ?; E; j9 w
; i2 h% n; `8 b
   free(x_d);
" A, p, Q% Y0 C- V0 F- B4 E# q
使用DSP侧单独调试功能,验证动态申请没有问题,' c- J- {1 F: _' v* e' T/ K3 L6 H( i
. a: x3 X% v, _/ [, V2 @: K$ Q
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
- N9 ^' X0 M* q. q0 _
2 R) f; _7 d$ C, ^" b
6 N, g' F! r/ L+ ~+ `4 Z
6 b" V, J. P* k% m& J* \
' ?; ^; c+ P! x9 ~
( G; b4 j0 l% g4 w4 s0 K& s

2 M+ ?# P: L& C: n, L) F. }, w7 ~' I: t: I/ E$ G4 L
4 L1 G. f3 m& ?1 ?
4 B' r% w! O4 R1 B8 U1 V6 ~

' o) f0 N8 r- E* E: c2 m7 G+ m9 s2 }
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明/ O. G* p( l; H
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
! z# s- ?5 l& u" O(不过疑惑的是,为何单独DSP仿真就没有问题呢?)- _( T# t$ J9 r! C, b. d. ?& V
" k% r& T& d* c' e0 n
是不是需要在DSP.CFG中进行配置
8 d# @) Z5 m8 n6 B) W5 e我现在的配置为6 `& A2 n* J& Z: F6 k
( f& @; y  Q# N( f8 @3 x
/*
8 n8 R4 d* {7 @+ E4 _( y3 N- z *  ======== Operating System Configuration ========
$ s3 I7 p! q2 Z1 c5 [" k& D9 u */
2 I$ l5 b4 Y8 p: v( j4 M+ B" x) t3 v( `  C0 M
/* no rts heap */
5 u3 Z: Y/ Y8 \1 O; n/ ]. g' fProgram.heap = 0;3 S# v# U4 ~( Q. V, G9 V: y. b
Program.argSize = 100;  /* minimum size */
% i; y9 ^0 t: h: k3 ]5 r( k, pProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
! ^8 E% I" j5 I3 J( N# ^  {" f1 E
) n5 C+ C6 U6 U0 {+ I, X) R* q8 L/* create a default heap */1 K& O1 U5 G# H) B$ r
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
% `6 L/ s0 }# O5 f) evar heapMemParams = new HeapMem.Params();4 j! \0 y  m! S8 Y2 m% Q% ^
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大8 n' O1 K4 B' b6 N; r' x2 a) `& y
# J' W$ B: {& O$ f+ d1 @
var Memory = xdc.useModule('xdc.runtime.Memory');
" ?- j  i! u. jMemory.defaultHeapInstance = HeapMem.create(heapMemParams);& V+ E9 E$ A8 t( o

" ]+ B& s0 |  ]" S% V8 [/* configure System module */
% a4 V( d8 T7 Z! S' xvar SysMin = xdc.useModule('xdc.runtime.SysMin');% U  _: i! k. j3 u2 `4 x
SysMin.bufSize = 0x1000;
" N( ]4 d: e* l! [8 V+ A( N% dSysMin.flushAtExit = false;
  u: Y: {! [# j& ]) p# O4 s3 j
  p8 x( d7 [$ F5 `var System = xdc.useModule('xdc.runtime.System');
% f# j7 N3 S$ l/ NSystem.SupportProxy = SysMin;+ A# D* \6 Z6 {4 @7 {( k

. t1 v: I  S! V' ^4 C% y( |/* configure SysBios to use the lower half of Timer 1 */: u3 W" o4 D# ], T
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');( C; n- b4 U) m8 g! i
var Clock = xdc.useModule('ti.sysbios.knl.Clock');% w; L4 u7 x: W6 |
Timer.timerSettings[1].master = true;
) }3 [, f1 K: ^9 T* H* t$ nTimer.defaultHalf = Timer.Half_LOWER;& F3 D5 z' P& V9 w9 F! T9 L  v4 ~9 I
Clock.timerId = 1;/ z, D5 ^. R6 F& c5 H: ~
0 ~& @) ~6 o, m

% F. |3 ]( p0 F4 B% p7 z# x/*
+ @! @: o8 s0 c, j; Y) H *  ======== Miscellaneous Configuration ========3 a; b2 }; q3 K
*/) D/ R, U0 |+ i
0 G1 @4 @8 c  P4 v1 C
/* set default diags mask */# m- v% v7 P+ T8 X& l3 F5 v7 ^* x
var Diags = xdc.useModule('xdc.runtime.Diags');
: ~% q1 h& x& gvar Defaults = xdc.useModule('xdc.runtime.Defaults');
- j9 V) g% H' n, |, K- b5 y0 q' V- W; K, `$ i: {
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;/ L  F3 t3 \+ H# b& D. r
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
( [  t% e) g( QDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;3 s1 _4 w1 O$ V3 n' |" P: H
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
5 p4 `: ]9 G' |- P+ R2 q* zDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */, @3 Y( K/ U" n+ b
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
* ?6 N, v( r$ \  ]' D/ ~2 QDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
. u* L! W/ t; [$ YDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;' v3 |2 Q4 F9 E+ f* B0 \
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
) l, u3 _% I* G" t8 ^9 jDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
8 A" W$ ], `. g6 XDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;/ [9 Z& _; J/ ?' [. l
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
5 R. {4 c5 x( {Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
$ `& [, O% G1 g0 O$ L- tDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;6 |! F7 `  b2 j0 u+ N' k% n
1 ^- [1 x# t; z8 b; z
/* override diags mask for selected modules */
/ D* @# \9 f+ I0 f1 F# Z' qxdc.useModule('xdc.runtime.Main');
: L! h% S$ c- b8 e+ k4 PDiags.setMaskMeta(# C* Z( P$ @2 H' R) C
    "xdc.runtime.Main",
  R% m0 b0 O0 {! d% s- `    Diags.ENTRY | Diags.EXIT | Diags.INFO,! ]; t# R4 E1 @9 ~- S* _. X% |/ a
    Diags.RUNTIME_ON. L2 n4 d# p& R
);" h# T! q; o; g" _& Z, ?" c
6 s, m1 ~# `7 C) A; K
var Registry = xdc.useModule('xdc.runtime.Registry');
; B, T$ n0 t8 z4 J! h0 DRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
) O8 l7 W$ _5 B. W( v+ t9 eRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
, @& `- Q6 Z/ d* w+ ZRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;- {$ r6 a) E6 u" }! [0 R/ B
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;* o' ?" d/ n, I  F
5 m, J# ]5 ^! _! P- t- h
/* create a logger instance */2 Z0 G% a& O3 {& g( m" @1 l# V
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
+ Q! w& k1 y3 K  P% ^" p- o5 Nvar loggerBufP = new LoggerBuf.Params();* {# q) v0 V% {; x( d! d9 A& F
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
; [3 }" S# b6 l+ c+ h" WloggerBufP.bufType = LoggerBuf.BufType_FIXED;
1 E  g/ F& d4 o: T  k- ~# R2 V# T" }$ N& F3 Q& E# [) I. l
var appLogger = LoggerBuf.create(loggerBufP);
% B. a" n/ J+ QappLogger.instance.name = "AppLog_Core1";
3 i$ L1 m6 ], U4 F- FDefaults.common$.logger = appLogger;7 C4 q8 d5 p- k. W/ {! Q+ k
Memory.defaultHeapSize = 0x8192;    ( I3 ~! c/ S5 A  s; j& j) Z
Idle.idleFxns[0] = "&LEDStatus";( o; F* P4 q; l9 a$ g( b
Cache.initSize.l2Size = Cache.L2Size_32K;: t) u% \' r, \
5 j1 O+ M! J1 Y- w+ \3 p
回复 支持 反对

使用道具 举报

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 */
$ y  }7 G. A$ A& mvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');8 `7 V7 ?7 A; F3 N1 |6 K
var heapMemParams = new HeapMem.Params();) H) s" \' O5 c4 j4 s2 W
heapMemParams.size = 0x4000;( }; ^2 W& _/ L2 A% X( r% x6 ^
7 `: t' p8 p/ a) `# \/ I
var Memory = xdc.useModule('xdc.runtime.Memory');
1 c. S8 [, R3 k5 j) b' h& V* E# lMemory.defaultHeapInstance = HeapMem.create(heapMemParams);4 Y* k! Q( A- J' A# ~

9 M1 M# g' e" L1 P& J, H我大约calloc  每次共计大小为5K*16bits,! N. U! [: ]' t
而默认配置才0x4000、需要改大。* C9 ~0 z) U4 n! w0 K% ~' L
, l6 f) A/ h1 V( u6 s5 l
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
$ I4 _1 h. k8 x2 iProgram.heap = 0;7 W0 t" q4 _0 w! J
Program.argSize = 100;  /* minimum size */
% @4 _: L# n- o/ V1 D9 IProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-8 01:40 , Processed in 0.044190 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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