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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
+ a( J" K$ w. x  B* I& p) u% _# V7 ]+ z8 Z, i+ l
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
8 k* u  Z  C+ d8 I
- \. {0 X; B0 f: E; R其他程序段。。。。。# ?" ?$ I/ K: [- X. e

: X. G7 k% C0 K$ t   free(x_d);
3 Z1 [. `8 h% @! Z* S8 u; y2 g$ u
# x) O, `1 c7 p/ o* @6 r, ?使用DSP侧单独调试功能,验证动态申请没有问题,
/ W% N- e! a+ |! l3 x
2 q9 y6 W; V: d: `4 u# w* h! ^7 u但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
. L8 l; s  Q3 O0 T
  B: x4 @1 \" f

8 ^8 J( ]6 X: I: V, V
7 W* C% D" Y' }; x/ a! q2 _3 z3 R3 k7 r4 V1 n: X' O, A
* }: u/ H! Z4 v5 m- X* w9 p8 n
, X( @( S9 R: f3 K  a- T$ a5 X5 j
- s$ {8 s  I' j& c; U

' s$ [: ]2 N. F) h  k
+ x" i( w: y6 G: t
# M4 `4 Y  q5 C+ p4 I5 m
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明9 G9 `+ Y' Z* G+ K2 I1 W3 E: b
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
6 k6 @, Q, ?: Y+ S/ }(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
' F# N" G% i% `, n+ I5 {
2 h" @, T% c" N# m: o' S5 |+ d
是不是需要在DSP.CFG中进行配置9 I$ t4 E: k, L9 c3 w% ~- I9 A
我现在的配置为
+ I6 i! z  \  Z1 ^( M1 b# Q8 E7 k6 Z
/ Q9 }& m6 ~6 g) [/*
/ a1 M5 T- n3 V" C6 y! ?" S$ t+ G *  ======== Operating System Configuration ========
3 v$ j  V: \( Q6 K2 U, E+ Y/ b */" ]8 I: Y* o# x9 O5 j& m0 \8 G
2 @5 J8 j! Q7 b1 s( i& ?9 p/ j8 ^
/* no rts heap */4 G/ _, K1 V6 l) y
Program.heap = 0;
. Z( Z# ]5 s# D) N, vProgram.argSize = 100;  /* minimum size */
* [: `+ o- O% ]  lProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大0 \) U" E# t) e8 J3 }3 J8 J. d+ [

7 {. e3 ?2 X' R, p7 y7 {% [/* create a default heap */  j4 {+ f" i$ v( J% X9 H
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
$ s5 D  V# ?& B  m% r; Jvar heapMemParams = new HeapMem.Params();$ ^& u! F2 L) X! Q& N% P' M  l
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大! N9 X6 x* H) J" ]3 x, y" Z

( f9 O' `+ h: H* o9 M' u: N2 x) @3 f/ J
var Memory = xdc.useModule('xdc.runtime.Memory');7 B" d  v/ s1 Y, F$ }, }
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
! T8 B% H! Y& T* ~
" E- V; K4 \/ y8 W6 W. m/* configure System module */
/ L* `7 u2 j" f, ]% H% y; p0 g& I7 [var SysMin = xdc.useModule('xdc.runtime.SysMin');' f0 [6 J2 A% X+ A9 V6 U
SysMin.bufSize = 0x1000;- O( Q/ Z5 Y5 _; @( m  R
SysMin.flushAtExit = false;
3 M7 }' b- |3 U% j6 X  A& B9 f% g. M+ `
var System = xdc.useModule('xdc.runtime.System');
. b) G" Y+ t/ o* sSystem.SupportProxy = SysMin;
, l4 N2 D7 Y6 X( t, q3 w) }* r" w( V' W& N1 {1 H
/* configure SysBios to use the lower half of Timer 1 */$ ]! D. _2 B- \$ ^$ Q
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
3 H+ X% p/ J8 C% E! Bvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
3 D4 Z* F" G0 Q. |! \4 m2 G- Q! sTimer.timerSettings[1].master = true;
1 N  W9 J! p6 ^+ S& K9 T- gTimer.defaultHalf = Timer.Half_LOWER;) U% @3 Z$ A" N
Clock.timerId = 1;2 |7 [6 Z! w# m" O! U4 L/ {
  c9 R3 z. M  a* U/ [( v
, Y9 b# v/ P/ r
/*
7 S0 h; j% P# K) W *  ======== Miscellaneous Configuration ========
3 I- w: @3 F" d1 f! _( _ */5 Z) S. H0 f% H/ j, v) n
& d) y  V; U) W1 u6 p
/* set default diags mask */
3 D0 \6 S3 A. \8 o  s1 v- pvar Diags = xdc.useModule('xdc.runtime.Diags');
, O5 `& W3 @4 o( c9 W' m8 T3 B# X8 Fvar Defaults = xdc.useModule('xdc.runtime.Defaults');  H$ F. C+ ?5 t1 G- Y

" J+ ?$ {' }1 z- ~Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
: j3 _6 h$ e) c1 Q" x0 e  R4 qDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
2 V9 d4 Z' X1 M' _% fDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
9 H% G+ H. d6 \Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
5 F! m7 s2 m3 d& QDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
  {( I; s) b( M9 j0 Q1 u, q0 yDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
! l( E/ B. \  l$ [6 fDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
9 }1 H1 ?! v/ t7 U2 p# qDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
  d$ O  r9 T8 M+ i: ~# DDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
7 o$ `: V$ H0 S+ C3 ~0 [8 o9 lDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;# ]% x8 `+ t, v; n
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;; l2 w5 n7 `% Y2 P1 T  F
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;+ P$ X7 B, G& [" f5 X! U; @
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
$ Z% g) J" m/ F  eDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;1 `1 s% }# i" {3 Z0 _7 X+ _
( [$ @$ V7 e& V% v7 U5 @
/* override diags mask for selected modules */
+ V+ i1 R4 k2 F) V$ {2 e3 fxdc.useModule('xdc.runtime.Main');" v0 _/ g! z; v% q4 @, h
Diags.setMaskMeta(
5 `0 V3 B8 E6 p3 G7 E# m; j    "xdc.runtime.Main",# M. @7 w7 N( k7 ]) r
    Diags.ENTRY | Diags.EXIT | Diags.INFO,2 }. R$ R4 R/ I- A2 {% n! ]
    Diags.RUNTIME_ON4 [, t* m1 X8 e+ M& w$ w- x4 M
);- H  y0 t  j; a* ^5 S9 q2 x
6 h4 ?  A  ]" p% q; m- k
var Registry = xdc.useModule('xdc.runtime.Registry');( a; }* u! u  l6 [" O' _1 E
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;3 {( T' [# B- a/ }5 t) b# U
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;/ m  h) `; q1 q0 X
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
; H) o; Q1 T( `Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;1 f, G' Y( r* `% x
$ Q& O/ t0 m) b0 W+ e7 v+ t4 d- m
/* create a logger instance */
2 n# x: s3 K% q7 k- Jvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');5 K( d+ Q+ I- u1 Z* J5 O- v
var loggerBufP = new LoggerBuf.Params();
4 w: x% U; [0 j8 `  VloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
1 j( k6 t% N" R/ ?4 \- jloggerBufP.bufType = LoggerBuf.BufType_FIXED;0 g0 g, e7 g1 b( L- B! G; p

, u( ]3 h! F6 `) E1 M( {) B" [var appLogger = LoggerBuf.create(loggerBufP);$ ]: w: ]) K, {, l3 s! j
appLogger.instance.name = "AppLog_Core1";& ]* U0 S8 S2 L( {
Defaults.common$.logger = appLogger;' h9 S4 _' C& d  ]; u
Memory.defaultHeapSize = 0x8192;    ! {7 l  |! R7 _" ?9 [9 H
Idle.idleFxns[0] = "&LEDStatus";4 y% Q+ F, W- b" a2 }; J- A
Cache.initSize.l2Size = Cache.L2Size_32K;
- W9 h0 C! N7 w7 R5 I2 Q
2 E0 V$ q4 \. |. B# X  `: p9 }- E* B
回复 支持 反对

使用道具 举报

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 */- T+ y6 b) x  d& ]: b
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');+ G5 ]5 g1 j8 K- {
var heapMemParams = new HeapMem.Params();. u0 Z# X7 h* L7 B8 g
heapMemParams.size = 0x4000;
! y6 `( p! @' A% z* h. I3 U/ \/ h: V* R3 m
var Memory = xdc.useModule('xdc.runtime.Memory');) e+ M, O$ B, k& _' s0 F/ d
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
' a" ?2 c; e* \  u' k0 Y5 L" i
* H4 ?8 e) d6 H7 \我大约calloc  每次共计大小为5K*16bits,
9 D% w# z# Z7 t; m) P: p而默认配置才0x4000、需要改大。  R# k# R; o' l

! c( E- u2 {: Q* @- g, E. @' v$ C* f
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */0 O6 _% w! L! l
Program.heap = 0;1 x$ M: `& @2 c% O/ }) k" Y
Program.argSize = 100;  /* minimum size */
2 H/ E. E- n$ |* l- gProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-30 17:40 , Processed in 0.041869 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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