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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构$ N( H: o9 ?* t4 S7 h* V8 C5 s
2 A5 E4 y/ q1 E; w- q+ }% q& z
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
! l! w( J  j3 o
9 K+ O4 y! G% E+ T- h' j7 O! H其他程序段。。。。。
) I7 L: t* x3 z/ [4 ?: c
! k) O5 L, q9 K( h8 s" r   free(x_d);
9 v: D6 }/ b5 k( Q$ s; |% N' S1 v4 I) i3 r6 M2 M% U6 I7 `' s" D
使用DSP侧单独调试功能,验证动态申请没有问题,
4 g! w( s) H2 V! R% ~- U$ V  G+ M( a! H3 y9 z( [% z2 M; H
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
% J# B& \2 @0 m- a8 Z/ J8 R

% ^% ~# Z, S" ~$ b1 L% m0 v% W* N+ Y! _! r5 S0 v
. Z/ u5 a( ~: Y% j# E" v; ~

) N5 R0 t0 f' w. f: \8 U1 Z2 l4 a0 N) f$ D7 c5 Q2 l  v

! T# ?( ^( v) ~2 ?
$ j9 R, G7 i" G8 g5 \
7 j! M6 a" t! }& J# [6 S3 G5 ?- A9 ?3 b% {+ A# b
' O5 N/ h9 q, I) M4 C+ D' Y) u
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
) }' ~( W# K% l! D& B8 k* |Program.heap = 0;
8 q3 i! u8 F; ^Program.argSize = 100;  /* minimum size */5 s/ z: F" Y) C& s: s
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
( |8 r  w2 D4 ^2 d: Y; R1 kvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
' g, Z) z( f" Xvar heapMemParams = new HeapMem.Params();! o: N1 G" z0 j* T- Z
heapMemParams.size = 0x4000;  E* `# B2 l) c5 D* j

( I! x: ]1 ]5 w  P# Dvar Memory = xdc.useModule('xdc.runtime.Memory');  h3 T8 v2 |* M, S* s  {
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);1 P- n& K3 B5 m9 D  V3 @

7 d. x  r% U+ P" m我大约calloc  每次共计大小为5K*16bits," F" ?# O: |, U, t3 |
而默认配置才0x4000、需要改大。
1 i9 g  y& h, t+ |
' p( m# V& o( H) r
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
* j0 i) A# f2 _' ]0 z' y: ?+ B我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下" L1 X, W% D8 o, A+ s6 K
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
+ O3 I  R, Y9 t. d7 u' Q1 o8 c

6 a8 T9 l. _* ^5 q/ U是不是需要在DSP.CFG中进行配置9 d$ g2 W+ B% Y# y( q0 C' {+ n' P
我现在的配置为/ H0 s/ v9 R, E3 _

# ?5 t8 ^& C3 W, ]: A% L. d; t! O. D/*0 U& J) Z' N  |+ `
*  ======== Operating System Configuration ========
! n# Q$ a3 Y& l3 T6 ?4 ` */# K- g3 o" s* `. f% w! q/ f$ W
4 c/ O0 ~& x" W" s
/* no rts heap */0 o2 a, X; K: H4 r2 K
Program.heap = 0;0 A; G  ~) C8 y, T# A3 n. Z
Program.argSize = 100;  /* minimum size */& Z( W4 U7 Z* x, q' X
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
! r  r6 K# M7 b; s2 Q9 R$ O. d, v, [9 u  l: e0 s! G. Q: k0 J
/* create a default heap */+ i$ f) R/ T  {4 W7 h
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
$ M* Y7 g, ~3 t' @/ Yvar heapMemParams = new HeapMem.Params();$ U# e* Y: w" _1 ?
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大9 Z: H8 J( P9 C0 L! |) F: h

/ `8 e2 A6 Q' _2 P. ~' o, S1 @. M
var Memory = xdc.useModule('xdc.runtime.Memory');( [9 G3 ^' G' S
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
0 ]# Q+ W) V. G2 l- H1 q0 W' d8 Z" M$ D4 J
/* configure System module */* a9 u1 \8 c# _) L1 `
var SysMin = xdc.useModule('xdc.runtime.SysMin');
8 T+ V& a4 \6 VSysMin.bufSize = 0x1000;
/ Y4 D4 H& {4 e# }8 e- FSysMin.flushAtExit = false;. i1 ]1 b# D( v% f( c9 E" z6 w
. |* m/ V: n) I9 e8 Z
var System = xdc.useModule('xdc.runtime.System');
1 K  r8 f# ]5 K3 n. c5 x+ jSystem.SupportProxy = SysMin;
8 S4 A$ n" G) N( u+ W4 D4 I; Z$ i8 X, G" p) O# U" q: `+ e
/* configure SysBios to use the lower half of Timer 1 */
) C$ f0 Q* I2 @, _) ^& Svar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
0 ~1 P# l& E: ?# Y% ?0 dvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
' s' M+ e( R7 E+ Y. P2 _' n: oTimer.timerSettings[1].master = true;$ ~: F( z" K$ J( w
Timer.defaultHalf = Timer.Half_LOWER;
) j  K: Y( U" Z! U7 q/ cClock.timerId = 1;) b. V, J. B8 R$ u( j# D
6 o% B$ S1 `3 D& A+ a
; E0 o4 o1 m% f8 B
/*
- {+ L7 T8 S9 l! L7 U0 U *  ======== Miscellaneous Configuration ========
) ?. X1 W/ I4 H' C. b- ]0 j) ] */
7 V" F" ~5 \/ ?* j6 S0 V7 x+ Y
% T# A0 c4 D. R4 j. F/* set default diags mask */
1 Z  e- _) S' i& @var Diags = xdc.useModule('xdc.runtime.Diags');
. X- V8 J% d1 e2 c# Dvar Defaults = xdc.useModule('xdc.runtime.Defaults');1 ^1 f7 U, o. z. I! }6 V" @% c
' s5 |. m; _( z; T& O9 U2 G6 P# m
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;# `2 g# n* x" f
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;, n0 V4 ?2 I3 B0 V( A
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
) T/ S, ^; o+ T+ l, p- M8 k+ MDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
8 S/ _+ v/ w* T6 jDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
9 c" F. D3 i) K8 B0 B) CDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;- A) g: I4 m6 T! B$ P
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
  e7 Y: ^2 Q$ h. b' _# J4 dDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
5 F4 @5 n' h7 g7 mDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
1 W. y% f$ |  I1 K) N: c9 v# sDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;* D0 W8 ^# F# Z  b6 Z( h* j' u
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
3 [# g! @6 x- [% BDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
  H* ~: v7 m8 v* {7 kDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;$ n" r& Q: q$ E$ `+ k2 \* f, i: g
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;4 q. p+ c2 f& V/ O
7 \6 n, b# b3 ?( s' ?0 w
/* override diags mask for selected modules */2 r3 `# P/ D" \
xdc.useModule('xdc.runtime.Main');
; U3 s* M# l, r5 v9 \  U: O& }& eDiags.setMaskMeta(, Q6 c2 b  J; H# e+ j4 Z
    "xdc.runtime.Main",
( h5 _# b6 j, P% U4 L/ P7 ^    Diags.ENTRY | Diags.EXIT | Diags.INFO,
( @5 W" Y& T: k    Diags.RUNTIME_ON
+ n; Y# g& `! b. g8 j);# P0 A: i# {" v; G4 v+ L; p

  @- j3 c7 \9 D2 y/ dvar Registry = xdc.useModule('xdc.runtime.Registry');
, x$ {9 A. [# `- x% r/ BRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;1 [: R; y! f) ~- O+ Z5 Q
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;9 d7 y0 |  N& V
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;$ Y1 r; f, n) a5 K9 T
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;8 h, \6 c! L' @. a4 v4 ^5 z8 u3 C
7 D! t& Z% B" U% J! }6 q
/* create a logger instance */, Z2 A/ r4 R6 u0 A! Z
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');& R. D& S, t1 ~
var loggerBufP = new LoggerBuf.Params();. I, _8 A" d0 g5 y
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
5 L# X- W( P& c. S4 ^: F3 VloggerBufP.bufType = LoggerBuf.BufType_FIXED;
& F) z3 K8 E: @' l: [
* W$ h, k0 u0 ?" Y" mvar appLogger = LoggerBuf.create(loggerBufP);) ^- f! ~* W! N; F8 d
appLogger.instance.name = "AppLog_Core1";
3 \) Z! v3 N/ j+ _- X  X. dDefaults.common$.logger = appLogger;
. h( z8 Q4 ~/ H. zMemory.defaultHeapSize = 0x8192;   
8 l; w: P& [7 Y) X7 }Idle.idleFxns[0] = "&LEDStatus";
3 q0 p$ N$ A7 d( QCache.initSize.l2Size = Cache.L2Size_32K;. v4 [$ ~7 Q2 B$ a3 }; v

, q8 M9 |/ L  b! }& b
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-22 18:45 , Processed in 0.058816 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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