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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
  s: c; J1 P2 ^/ I0 u5 S# H$ l) l2 B) n9 r. _; W1 }
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2563 T  Q, I, N9 K
8 O4 O* W3 _5 b, g( u6 G" U
其他程序段。。。。。- Y$ d: @. Y6 m" _/ g2 l3 u6 d

4 Q) H0 `8 s% e, }# ~+ x   free(x_d);
" J( j9 e, J* ^. \
. @  g, {* c6 N5 a使用DSP侧单独调试功能,验证动态申请没有问题,8 U: b9 P3 \3 L+ w+ J

. d* O: B- g0 Y+ P但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。( N1 c9 J2 W; `2 ]
( E6 r- v$ J; T5 P6 Y3 c
# T9 t7 B$ S; e" b
' C: F, v% r8 N9 J( ]
2 @) C* Y# x! I% C  y( [; y
. ]# ?; H/ x1 s6 ?
% s7 m& t( h# m8 h5 w% @

4 u! p# K& s2 b$ l, y- t: o* x1 v9 }; Y
2 J( p% X, a) K, B( u5 W% }) `1 Q; ?

# f% D# x; L9 d# h9 A7 T2 u
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明* W4 D9 u! {0 i! i" ?8 w
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
6 W) F" Y% h# o( H; Q(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
7 H% h% a, G7 Z, p! C; X7 ^
7 ^* p& q6 n; l7 k. y) ]) \
是不是需要在DSP.CFG中进行配置
2 q' M# o3 r0 y& q+ E, a1 S5 y我现在的配置为
5 D8 O8 ?4 l! @; X* j* L, E9 `$ [) }0 s
/*
- |6 b' X9 Y: z6 `; @3 L0 Z *  ======== Operating System Configuration ========
8 `  q( s, h& V! S9 j */
4 s0 S6 K. \  T* s- K) [2 o( a/ l( P. p& W  ?4 P0 m
/* no rts heap */
) o+ K# f( p6 D4 BProgram.heap = 0;
7 _# }! A) ]# v, u' |( O& `Program.argSize = 100;  /* minimum size */0 G7 N4 @9 t/ a# ^0 Z( f
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
# D  X% L- P9 f: Z5 @0 q
6 s& v3 X' @% r# r- j/* create a default heap */
0 d& C) d  p7 r5 E5 w. R! ^var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');9 F/ }! {; \; x% o
var heapMemParams = new HeapMem.Params();
. Y: Z2 F1 {4 M- ~/ wheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大4 }/ r+ F$ O0 y8 n( F

( Q, ~# }% D3 f, [4 R; `1 p0 d
var Memory = xdc.useModule('xdc.runtime.Memory');2 {8 L* q7 W6 c% _+ e0 M' w  _
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);& d6 E, z/ H) B9 z# u0 u5 J) I

7 @" h/ |1 ^1 w5 H# J: c  @: k4 }/* configure System module */' M! @$ }7 q) r& g& n8 E
var SysMin = xdc.useModule('xdc.runtime.SysMin');9 N4 ]2 ?! ^& J2 z
SysMin.bufSize = 0x1000;8 m2 v/ h1 I! c+ @4 |; o' u
SysMin.flushAtExit = false;! h* E  r2 u  l
6 w0 N$ h& @) W# Y
var System = xdc.useModule('xdc.runtime.System');
! [8 k$ |# b% O9 O6 uSystem.SupportProxy = SysMin;
# {1 l% G( [2 m1 Y6 ~0 c' [: t9 k! @
/* configure SysBios to use the lower half of Timer 1 */
  h/ b& w/ P# J2 vvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
, Q5 K6 X: ^, x/ r3 Qvar Clock = xdc.useModule('ti.sysbios.knl.Clock');' z/ ]! ~! ?4 q/ N8 W  c  o
Timer.timerSettings[1].master = true;, N+ b7 v' U6 `( n" G5 N0 h
Timer.defaultHalf = Timer.Half_LOWER;6 q$ Y3 i* h2 R) j/ {2 Q9 \
Clock.timerId = 1;3 {5 M* m; w4 L; y: b3 b( r

0 }- U7 A3 ]7 k- E% r4 g4 A- V: Q8 D  M# X5 U( w
/*, b" l, l7 U+ D2 u% z2 Z( Y
*  ======== Miscellaneous Configuration ========
$ y7 n# e) ]! t1 M  |$ ? */+ z; n* v+ H: N' p

! i7 }1 ]$ u8 ~+ b/* set default diags mask */
8 V2 z' v/ r1 G' i$ p$ ?3 Lvar Diags = xdc.useModule('xdc.runtime.Diags');8 r6 k4 L/ M, k. y# |4 w
var Defaults = xdc.useModule('xdc.runtime.Defaults');
& ~; w' v+ f+ V! [5 r' y
( d* H" r" ^' eDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
7 @0 r5 m; B. m  tDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;" ^7 U! n6 l: j: o5 y( {
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
) C' t; B* s  T: S( nDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */% N) c+ Y, v# T& R5 E7 _3 a2 Q
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */# T# X/ W+ L8 W  y) y
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
' I8 N% f( r. A3 Q/ @% kDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;# e( D" Z! u" M) Y+ J: e
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
* d& _* M5 B* z  q, UDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
4 m/ ?1 D8 ^$ k+ y: I5 LDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;! p9 m+ w  \2 \, q* Y4 N' t, E+ Z
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;( t- f! Q  V2 z- M( K8 |
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
5 g# u5 J+ T: s* T4 VDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
! z) W0 t( ?' \4 C. d9 kDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;% Q2 T6 z6 i0 P6 r" R4 y/ m

( i- [4 v( d! R# y/* override diags mask for selected modules */
- O4 Z; o9 P' v7 Y' t' ]( Qxdc.useModule('xdc.runtime.Main');& R' t7 ~0 e8 u) f' T0 t+ V
Diags.setMaskMeta(
- @6 h, m/ E- K- H5 `& Z    "xdc.runtime.Main",
& h" ?% V! F* t9 }% {    Diags.ENTRY | Diags.EXIT | Diags.INFO,& p) ?: h. J3 w! V% g
    Diags.RUNTIME_ON& @5 o$ i  {9 S" e( h  C+ Y
);- _, f% [% q$ ~; `; j4 |

! g/ [; U  m& i% ~  \' N' V) [; t1 |var Registry = xdc.useModule('xdc.runtime.Registry');
5 L/ r) W! E3 H7 b3 q2 ARegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
. E: ~& O) D. x4 C% Q5 sRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;7 |5 [, b( y+ x6 o# p# K5 P8 r
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
5 l) F4 j$ \/ }/ [$ }Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;- C' q2 ^7 a% J% r, m' Y

) _6 X& ]( o) b& y& p/* create a logger instance */
# s/ Y. O3 _0 j& f& ^' u2 Pvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
- I0 l: s$ H- D3 nvar loggerBufP = new LoggerBuf.Params();& R0 p- ^% g# ~- o
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
) Y6 K; ^6 a7 m3 y: nloggerBufP.bufType = LoggerBuf.BufType_FIXED;
; C( ]- [) n5 m- R+ D1 r( c# V! V; K( [( B% u
var appLogger = LoggerBuf.create(loggerBufP);# \' G6 V3 Q) f4 a9 h; s* E
appLogger.instance.name = "AppLog_Core1";
4 U: z4 [& _' w) ~4 Y% M. ZDefaults.common$.logger = appLogger;
7 f6 k# I0 x0 l# L$ W7 [Memory.defaultHeapSize = 0x8192;    2 [0 K0 P. L. Z  d/ R' i" g2 I/ V$ e
Idle.idleFxns[0] = "&LEDStatus";4 J* G" A- ?4 Q
Cache.initSize.l2Size = Cache.L2Size_32K;# |8 M* q! Z, B2 b  K( [9 a

6 V& v0 w" w3 E4 f: s7 ^* V9 B! y; w
回复 支持 反对

使用道具 举报

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 */
% g: U" u: X$ Svar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
. h3 U7 J6 c* z! vvar heapMemParams = new HeapMem.Params();, U: N9 K" Y. C, a
heapMemParams.size = 0x4000;+ ?" U* b  ^+ a1 p7 ^
4 K$ g+ O1 ~0 x. L  p
var Memory = xdc.useModule('xdc.runtime.Memory');' u/ k) g# i0 K: O: [! F
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);* ~: u+ x: p+ N8 z' A  N  }

7 f* S3 f  \, R5 y0 _我大约calloc  每次共计大小为5K*16bits,
2 }+ r/ ]/ Q0 E4 J而默认配置才0x4000、需要改大。/ p$ s9 Q1 p! D, E0 t

. q( f; |3 q; H) J1 q4 E
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
3 n3 I, I+ u& d0 L: O9 n, fProgram.heap = 0;
: a$ u' G! w! e- B, o/ X; GProgram.argSize = 100;  /* minimum size */* o% K" ?4 C9 Z: S, H& x! \, O
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-5 11:06 , Processed in 0.042805 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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