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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
5 I- j& y3 f$ X' }5 i2 N6 @: g; ~* @/ d& s; W1 J0 }8 O; k2 Z0 q+ T
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256( X+ U, x$ u! |5 I& n7 k

4 b0 x% Y/ X5 n( x; k其他程序段。。。。。6 G2 K2 j8 d, }1 ]& B! i9 c+ P
9 q- J3 G: P5 _% p8 G( F
   free(x_d);
+ r" ]& P5 g9 o9 U: C8 L8 T, N$ x  w2 f
使用DSP侧单独调试功能,验证动态申请没有问题,% x) S4 \! e9 _# n) ?
' N  k5 \* m# G5 n9 M
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
( y/ a: r. r( u# d4 c$ J. |2 S
4 B0 K8 C7 k4 D6 B. \8 b

2 D* s. R( D+ e) n7 K! k$ N. t, O  t9 ?( J$ Y* ~- x7 y5 s

0 Z: ^% w7 ]0 y9 ~) J  a+ x5 I! ~4 V$ d: L4 ]9 [5 ?; ^  x+ U# s

& S' T% W$ \- j' E" [: o4 l$ }
7 ]  i: ]1 @: s" H5 K4 E2 ?2 S8 m! h/ w; t# i

& y$ V5 _: T) {9 U+ p. h; X, O3 i+ l
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
/ h) j2 }1 J7 K4 a我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下! u) m9 u. e& i( ]3 m6 s) S0 e
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)$ q5 a9 ?3 l" y
" M  v0 S2 Q+ H( a  ]
是不是需要在DSP.CFG中进行配置  w+ t* h* ^; _4 c& R+ R; s/ ]: U
我现在的配置为
2 T* Y1 J2 \- S8 D9 K( T& R' s  B: k3 `" U$ Y9 S, k
/*3 i# o9 w2 `% \  D
*  ======== Operating System Configuration ========4 }& K1 Y# ^3 g- _2 L' r0 v
*/; |- O6 J4 c: z0 h
; d$ a. Z3 [7 s% u" A
/* no rts heap */* ]" f9 U1 Y8 H, V2 a* i
Program.heap = 0;4 T0 c# ~" \; K: L( G* _+ p  F$ L
Program.argSize = 100;  /* minimum size */  P5 a7 l% m% F: j1 w
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
; k% h0 r7 r/ Z4 Y+ [2 W8 S: x- b6 V5 ?5 X! f
/* create a default heap */
4 z( a# Y. m/ k- H" m$ n" |/ bvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
: I& M/ @. T/ i6 {% {3 ovar heapMemParams = new HeapMem.Params();
1 E: D* A0 I2 n: \. t( h, y' ?heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
: I, T& n  U6 }) G- I* Q3 x4 [! |9 s
var Memory = xdc.useModule('xdc.runtime.Memory');) l6 y& B2 }% t/ ~
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
5 G* J2 N/ Q: n% Q; J( L9 y( v, l0 n* r. C+ J
/* configure System module */# Q. C; A6 V& D" d5 A6 f7 O
var SysMin = xdc.useModule('xdc.runtime.SysMin');' Q9 g, E, h% {0 E- y- O
SysMin.bufSize = 0x1000;
1 E7 ^- v* E8 w4 o0 ~3 jSysMin.flushAtExit = false;! }8 K' A* `/ s* b. D( ^9 a# J) q% r
# o6 @( ?! M9 V0 h
var System = xdc.useModule('xdc.runtime.System');& c( q9 F' F; u8 l
System.SupportProxy = SysMin;, O2 v% X! Y+ U  x
5 h; u' l7 o8 w; i. ?1 Q
/* configure SysBios to use the lower half of Timer 1 */
7 z3 F+ x/ t! T1 Vvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
. d0 q. a' |9 l! _var Clock = xdc.useModule('ti.sysbios.knl.Clock');
! [4 _7 P) `/ _! u2 KTimer.timerSettings[1].master = true;
9 P% |) J; v5 U6 H" u; UTimer.defaultHalf = Timer.Half_LOWER;6 t" s* D3 X: w  m5 `% z+ j
Clock.timerId = 1;
8 x/ N# G: z- ?' ]- n7 r4 U+ f5 E; ]& h* `8 U9 B! e" x! o6 N8 J2 P" E, m

$ n% k- m  _, X4 r- z8 D/*/ y! l4 F, y7 m. C/ W6 n# F( x' M
*  ======== Miscellaneous Configuration ========/ _# m' S' L; E# T% I7 Z* I- x5 I1 z
*/
- w( ?  [. q! k! T: V& I/ W8 V( J- w5 h; T# i$ g5 J, A
/* set default diags mask */; R* h8 h  l1 w1 H9 ~" ]
var Diags = xdc.useModule('xdc.runtime.Diags');
$ h+ d! q; C. A3 V# G, y! xvar Defaults = xdc.useModule('xdc.runtime.Defaults');
1 s. P/ T/ ^3 s: N: p' N, [0 ^' [: K: O1 T& p" {" h4 L# y  d9 ]2 e
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
$ j3 ~* Y" B& e8 x$ _4 RDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;; `$ m- d3 T: W. R
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
: m7 K! L7 G7 Q- ~% b: \Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */2 M" m! ~* L2 w; p$ Q, N
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */0 ?, `: {2 a, H9 ?3 L
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
! I. X: t! h) k! C$ j* O/ }8 JDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;% O$ h. O9 b% o5 z
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
0 |2 \# @! g/ h# p+ G# p; A% FDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
6 W9 a9 w$ Q$ ^! J. K$ A- EDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
* v! H5 }, |% c* eDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
# A% p) X2 J, G  k: c: U9 NDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;, b2 F& m$ X6 e
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
( Y" f. ~' C1 g" t2 H+ bDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;8 `! H) \( m; @: y
+ V' l; r" T, A" ?
/* override diags mask for selected modules */
- A" y1 {+ P' b  I. x2 ?. [xdc.useModule('xdc.runtime.Main');$ c( U9 w/ e. C6 r4 W
Diags.setMaskMeta(
. P9 o9 z' p* N6 O- q1 C6 O    "xdc.runtime.Main",
4 V/ C8 V; \( |    Diags.ENTRY | Diags.EXIT | Diags.INFO,5 z7 \' _5 ~4 R" r, I7 c* X! C$ X
    Diags.RUNTIME_ON
  c& b; x- h- y5 A);
" F( H) E0 e5 c6 I& `: y& F
' v" J3 \3 m! d# q9 p- zvar Registry = xdc.useModule('xdc.runtime.Registry');0 T/ C4 B8 t0 k' [$ B* W8 t2 C5 ?
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;# Y2 w& o/ H; A: g# D3 @
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
0 r4 q( S9 q* ]/ hRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;, S" a, D" D+ @5 f+ X/ w
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;( V( G* U1 J+ N' T( k/ J

. S5 Q- x( E5 f8 `/* create a logger instance */( R) @+ c6 d. u+ A) }2 K$ b: J- n
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');3 G* a" v+ s! `* `
var loggerBufP = new LoggerBuf.Params();0 U" B" V# K- d. w0 a7 q6 S9 L
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
, X2 ]4 ?1 M" N2 z% u# ZloggerBufP.bufType = LoggerBuf.BufType_FIXED;4 B: O' L- u8 U. g: }" S4 }2 L

) S7 @1 N: C% i/ S1 J7 q: d! q+ qvar appLogger = LoggerBuf.create(loggerBufP);
. L1 K/ V* n4 a( r- S5 EappLogger.instance.name = "AppLog_Core1";" W% j5 n8 T: z$ P7 X' z
Defaults.common$.logger = appLogger;/ {7 r" z6 R4 S" d/ w" I
Memory.defaultHeapSize = 0x8192;    ( a6 r8 t8 ]8 k4 x
Idle.idleFxns[0] = "&LEDStatus";
2 W, x0 k/ @; r% }- |4 QCache.initSize.l2Size = Cache.L2Size_32K;
  I- o$ Q# e, T. |" W- T) ?3 @$ W4 V, [! b! w; q2 K, |( b. 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 */* j5 R& z- E2 V6 A4 ~/ |4 }$ x$ W
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
/ c+ B. \! R$ G) J" A5 Jvar heapMemParams = new HeapMem.Params();
) j; I- X2 K% OheapMemParams.size = 0x4000;
  V2 C+ y) f* y% {. [* F
) `5 Q3 a4 ^& ]var Memory = xdc.useModule('xdc.runtime.Memory');* z3 Y2 K! Y! T
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
" n% W: D. E! c8 `" X& N7 S
" g& |# Z1 r# _: V7 M$ M$ i我大约calloc  每次共计大小为5K*16bits,
( i* }0 {, h1 n! l: f而默认配置才0x4000、需要改大。
0 r0 X3 |& F# \; z/ P, [. D- M3 i/ @8 i
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */+ w: y2 c  B  z  f% G" s
Program.heap = 0;% z8 k7 Q3 X9 c4 F& }* _6 Q
Program.argSize = 100;  /* minimum size */& v* A- r9 F2 [
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-20 03:21 , Processed in 0.047353 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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