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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构9 p% [- v7 I" @, K; l1 M
# Z" z2 L! K4 |
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2561 x! s8 e7 s# g( z7 l9 l) R

4 d0 O5 k/ O! w6 Q其他程序段。。。。。% C. o- Q5 k% Y6 o2 k, ]- t4 U! t

, ~5 c, j8 t, p, s3 g   free(x_d);
$ u" ?# {6 I! h$ M$ o) E- a1 T: ~$ k1 ^9 P
使用DSP侧单独调试功能,验证动态申请没有问题,& p6 F1 z# _8 G5 G: ?

) @: ^2 C* Z4 ~' |- Z4 r但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。' y! ]$ i/ e1 x2 L

6 N1 d7 ~( J6 h9 {5 n+ \7 h
+ {8 @+ d) `1 W( m# E6 }, W/ U6 F' m; m; }. h) N0 H

9 r2 ?9 A' ^. [+ e% @; r
9 D, z1 L2 }. |% x; H8 B
8 j- a9 i. B7 }8 C6 h6 K" D
2 `2 q/ o9 h2 _$ {) L  _3 H5 n9 B% w
* B( h$ @% d( [3 h, ]

1 |3 F, S* W: R! o6 P: z* H. u
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
2 f  o, ~) t0 x% A* F7 [1 ~$ }我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
# \6 }& d4 @  T, K(不过疑惑的是,为何单独DSP仿真就没有问题呢?)6 H2 [5 z9 B1 m4 c4 w& G5 k. r

$ y# [6 G, V3 v* q是不是需要在DSP.CFG中进行配置- l) g! _' ]9 I& e6 E& a
我现在的配置为* W9 C8 j# Z9 ]0 H( {" K$ D
0 y/ z* E( c! |6 B; |2 W( T1 x
/*$ B) t8 b3 v# S: a7 U
*  ======== Operating System Configuration ========
$ L9 Y* X- a4 p" x9 S */
* ?+ d6 q( j3 [/ [) {! b$ @
+ N; t& _' V) h/* no rts heap */' ^3 U( u- @. G: P
Program.heap = 0;
* m7 r+ s! R0 J4 dProgram.argSize = 100;  /* minimum size */- k+ z9 C* l4 J5 {2 Y
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
' @( K1 F2 b. P7 J, h9 r! c+ }* G4 _  F1 k, H4 R  P) b* n1 X
/* create a default heap */
7 ^7 f# ^: v, a5 {% Q9 |var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
# E+ _( v2 K. {" s+ N6 t' {var heapMemParams = new HeapMem.Params();( \. A/ F) `  h4 U# u
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大7 G  E- J4 f- ^" z5 I2 V2 }+ i/ S

4 |; w" B( b( K9 B
var Memory = xdc.useModule('xdc.runtime.Memory');& ?  b+ h1 r" C. {& o( [
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
1 X8 [8 r; m, |* U, x8 D  C5 [/ z
/* configure System module */* _. V. z5 {$ y! f1 j
var SysMin = xdc.useModule('xdc.runtime.SysMin');: \' u, r; w- ?( F
SysMin.bufSize = 0x1000;* Y- T) R/ f) U- H
SysMin.flushAtExit = false;. y& N  |0 p7 o

0 X4 Y! P7 x- u# _$ c" O3 Avar System = xdc.useModule('xdc.runtime.System');9 r& n1 }7 F, T4 e4 @" n. c) ?& ~7 U
System.SupportProxy = SysMin;! V  G) ^& a3 r% V$ _" u  a

# V: `) F( A( Y8 `; l* z& n; ~# o/* configure SysBios to use the lower half of Timer 1 */
9 u9 t4 W9 W# |' vvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');3 `; o8 g3 F9 ~/ Q. s& R
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
+ P! R  q4 v+ d, ?3 b* U' NTimer.timerSettings[1].master = true;
0 @. t3 o2 n2 b1 Z' Z8 r1 Y+ YTimer.defaultHalf = Timer.Half_LOWER;
/ H! n9 T* _. X1 v% P7 |Clock.timerId = 1;
; k9 _5 A# Q. {& ]7 O/ Q" L; i+ M1 o$ ^- @' V- l8 Q

8 I1 T( F7 }2 d0 Q2 W0 D- B/*# |  |3 `" x% ~9 z& C6 }# _! T
*  ======== Miscellaneous Configuration ========8 t+ K$ G' q2 u% `5 R( z2 I
*/
7 o: G% i3 ]0 z0 a2 O. U2 \& [
/* set default diags mask */
7 q, h+ i: |' a/ g& [6 O( Fvar Diags = xdc.useModule('xdc.runtime.Diags');
. Y+ A$ d- x; U' y! {+ f" T3 S4 uvar Defaults = xdc.useModule('xdc.runtime.Defaults');5 _" D: s9 W, D2 k  r4 F
) ~, L1 G' }! Z+ K% f* K
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;& B0 D7 S# |1 M6 d
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;5 B, w( s. @+ Q6 }" X9 E; e7 Q( n
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;/ N/ N( Y9 n' O1 a1 V" z
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */5 W& C$ t2 K7 g  r3 D' L+ M: k1 }5 J
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
6 W: R" o: x1 b% v3 Y! x8 ~& EDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;, k% d$ D6 }( g. `. D: D
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
5 G8 G/ K# K  P% W# L; a4 |3 s- u2 ADefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
6 z3 q9 w( X1 G, e$ z$ }5 i5 ]Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;* ]& G, W- j/ \0 {7 c' M9 T
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
. Z' Z2 P3 K' r- \Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;/ A( x8 T9 L2 }2 f. w2 U
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;# t, c. r# @9 v$ \% s; ]. ]
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
5 d, F& W4 J4 f5 H) fDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
5 w. |9 Z0 `# m( H0 X1 g  G6 v9 t
/ t+ |6 O6 [- |2 U/* override diags mask for selected modules */
& \. X. a- F# `$ {xdc.useModule('xdc.runtime.Main');
9 }( C8 R7 `) u# o* `Diags.setMaskMeta(- N6 b8 e# T$ V- a+ ?# F8 R' f
    "xdc.runtime.Main",
/ b9 }0 h" X; F# w: ^$ Q+ a    Diags.ENTRY | Diags.EXIT | Diags.INFO,4 N: z) c( D3 v" P! Y
    Diags.RUNTIME_ON
6 x9 z. ?3 b2 \+ z  });! z  h$ q2 N4 H, D+ e

7 W6 N3 ]3 f1 V" L, I$ H* o" J; evar Registry = xdc.useModule('xdc.runtime.Registry');9 b9 y1 k' U: N9 B  B4 k
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;" r) t: w2 {7 N0 C
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;' M& T# {. d" d7 Z0 Q1 P
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
# f% f+ q1 n0 {& P6 Y6 R0 hRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;: W2 O6 N+ N# X. C7 |  @' d

4 c4 s5 I5 v6 _" p2 q* m/* create a logger instance */
( c  \/ Y  S9 @- p7 }var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
/ K; d/ x/ g, n, C" Ivar loggerBufP = new LoggerBuf.Params();
/ S+ j% g4 W3 ^6 j! @, M/ \loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
2 k8 r( ]4 i/ h: ]/ T1 Y- g4 h. s% \loggerBufP.bufType = LoggerBuf.BufType_FIXED;
  l- D6 {' P% ?. A/ V$ V& C8 r8 H; S9 Y5 }( ?2 d3 ^+ o
var appLogger = LoggerBuf.create(loggerBufP);$ Y. `8 Z3 T% p0 `- {
appLogger.instance.name = "AppLog_Core1";& H2 n1 H, M' F6 @5 a8 K
Defaults.common$.logger = appLogger;
9 [' g: z3 ]5 m9 V5 V  aMemory.defaultHeapSize = 0x8192;   
; {4 I8 v3 t7 uIdle.idleFxns[0] = "&LEDStatus";& V2 h) }0 ?$ F$ t: }6 t
Cache.initSize.l2Size = Cache.L2Size_32K;8 Z- t- u. A* B. G  |

+ v* y" |* w6 {/ o
回复 支持 反对

使用道具 举报

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 */
  t0 Q' j9 {. Q, Y6 \. F! w. a5 ovar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
9 a7 m. c- \3 n. W* Lvar heapMemParams = new HeapMem.Params();# i" t3 X3 q& J9 G3 m7 g3 H. M
heapMemParams.size = 0x4000;
$ a* Y2 X  s  R2 X- k
) e( @6 `; T: E" d$ m2 ?var Memory = xdc.useModule('xdc.runtime.Memory');$ z( L9 h' n. ?! P' W% q+ ~
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
: V7 v. q; \. |. _7 q3 Y- f. T: w9 J( l' z
我大约calloc  每次共计大小为5K*16bits,
* a$ D: R7 y) Y4 `4 t) o. q而默认配置才0x4000、需要改大。
' V) O# u* s) B4 y) k( p$ ?
. S  R$ m( Y3 c8 v* D7 W
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
+ Q  [; q, J! j9 i; m8 RProgram.heap = 0;- G' u& L+ {* |7 w3 t1 y+ f; e2 F
Program.argSize = 100;  /* minimum size */) v3 i. K1 Y3 K) n7 G) S
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-15 01:29 , Processed in 0.043539 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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