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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构4 S4 ?: L, [- b" t. ^
) Z4 K. z9 w) B! L( M( l% V5 Z
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256  n, h: d% Q2 U8 w- [

$ `! w% D3 o" r$ _* m) ^" I7 Y. o其他程序段。。。。。
" B! q2 V, }) C % F2 Z, ?& e2 m2 a2 }
   free(x_d);( T2 U# {; y" J8 V

; H4 S" K8 V! m, k, d/ y6 ~5 p使用DSP侧单独调试功能,验证动态申请没有问题,
8 {& S+ K. C. T9 p  V' I9 l: G/ l* L5 N- j2 x. ~
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
  P# x6 Y4 A' p
/ |- B0 O# \) A/ t9 o' |
& X4 E# n* M/ D
! c/ n) _, @/ L$ u
5 K; V4 \- X% L: _
, c$ B/ y& _3 `9 ]
! M/ D8 p! P) y; K! ?+ c
  w$ l$ U5 |/ }! n

& O9 v/ H* L4 V2 q& W
1 j. s; I& P0 N9 }9 s
, Q; z: \6 e* B; x6 |3 j% T8 I
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
8 C& F+ {5 L) `/ S我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下8 L) k1 P% \! h0 Y( A3 u, [# k
(不过疑惑的是,为何单独DSP仿真就没有问题呢?); B  h( Z2 e) t
0 ~% p; c9 y: s4 v0 g* k- Z
是不是需要在DSP.CFG中进行配置$ g3 g+ w& x, Y, K/ `' l. Z
我现在的配置为: f& G2 J! D) a" |* G

0 y# L/ w/ q% M8 j; h, ?/*3 p0 ~9 R: k6 K+ W% F
*  ======== Operating System Configuration ========
9 Y3 U7 _% G# W" b# a+ q* U */
8 y" {6 ?( |' c- I8 l4 V, \: o4 \. ^# D; l  [7 _
/* no rts heap */
1 ^3 j- F' `7 ~7 k& V' kProgram.heap = 0;
1 Q! D$ z. L# R' V* ^2 T6 K" ^Program.argSize = 100;  /* minimum size */
+ H. x6 s0 c1 R3 RProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大* f6 I. l, U( ~( f4 w

3 r" m% {, T+ J/* create a default heap */
" q0 A! G5 v) J$ _+ X4 fvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
! K) x: F; y/ @/ ]5 \( d( wvar heapMemParams = new HeapMem.Params();% f" a4 P1 x  X, I8 \2 P
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大* P# i% J; x# e
0 C. \) h4 n( l7 u; m; o
var Memory = xdc.useModule('xdc.runtime.Memory');
# }+ N) i5 e1 n# L9 ZMemory.defaultHeapInstance = HeapMem.create(heapMemParams);" z) K& u, h2 |
% e4 K, @* }* v8 |; T* J4 W
/* configure System module */  E0 z6 \5 q3 j
var SysMin = xdc.useModule('xdc.runtime.SysMin');/ q' @1 k: _  I  g+ Y
SysMin.bufSize = 0x1000;
% x$ S5 f8 L7 R' H) vSysMin.flushAtExit = false;9 g$ |% U" t# A$ z" K

$ A1 g& G- C2 N2 _1 vvar System = xdc.useModule('xdc.runtime.System');0 c/ o6 k, T; `5 T. u
System.SupportProxy = SysMin;- x+ W6 s  W" V( ]

; S  ]  a* T3 m/ [2 e/* configure SysBios to use the lower half of Timer 1 */8 j  O; R0 d8 }! l- D
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');, F/ g/ t8 s+ n% r4 A& f8 W: r: r
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
  E6 s0 {1 V3 r. r- S/ yTimer.timerSettings[1].master = true;# J) b6 B! P# h1 B; R& _
Timer.defaultHalf = Timer.Half_LOWER;
7 E3 ]  ^4 L. Y7 F5 PClock.timerId = 1;( e" M6 L$ x" b4 E' g2 A9 d/ X+ }; \
& G) s( J8 Q7 z: e  G7 e' w/ p, H

: E4 ~3 m4 S" [" A9 F/*" L' {/ A+ H# @; T! Y5 t; O
*  ======== Miscellaneous Configuration ========
& m7 J5 p0 D- P# G* I */
+ G$ d/ _+ t; e: a! W; a3 y* B/ V9 T  T' S8 S3 o3 L
/* set default diags mask */5 r5 E; t5 N& \, d: A: e
var Diags = xdc.useModule('xdc.runtime.Diags');
7 b; A7 V$ u( `% @" r1 K% `var Defaults = xdc.useModule('xdc.runtime.Defaults');& I9 _! l2 t  S+ \" _
% K" d9 ?6 I. q3 `3 u% c: `
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
6 V! O' s! _* h# ]  }Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;9 K7 q) {8 I9 Z( e
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;+ |) v8 ]( ?4 T8 U. R
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */& P+ S2 @5 j$ {" D+ M* o
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */; D$ }" n: r. m% z) O& a
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
' X' ~# V8 d7 VDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;; ^; y" U- M  W9 |* r. m4 \' ]
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
4 J+ K! u5 _# D% _Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;; V5 n* Q2 {  l, J. ~* w3 z
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;5 w" ~, |* U* f0 F) [
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;6 H8 ]7 F) w) v3 P% k6 U( \
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;- v* n0 l/ D2 L
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
# I: A/ F* p$ Q8 V$ ODefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;2 V" X( A- S7 @: j+ Y

1 `9 E4 C7 ^5 Q  `  B  H/* override diags mask for selected modules */
" F  u+ d$ s8 Nxdc.useModule('xdc.runtime.Main');* W' r  a- c/ m3 h0 P- ?
Diags.setMaskMeta(
; x7 _0 W- g, W2 E- r' P+ `7 e* v  }    "xdc.runtime.Main",
  ]6 c+ W7 E% ^% V4 }. o8 k# \& y) c    Diags.ENTRY | Diags.EXIT | Diags.INFO,
' n5 r! o' \& s+ X    Diags.RUNTIME_ON
+ k; ]! q! `" j; k/ C5 `3 f; `);
- z( a+ V3 Z( {2 n& P1 ^5 [- Q  f; k0 w; }/ @$ \4 c2 T5 `
var Registry = xdc.useModule('xdc.runtime.Registry');' H9 w! U, @+ j; ^/ Y6 p% {
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;" ~) b! ?' F  H8 v6 c/ w' U' x
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;% F7 S/ s5 c+ F5 y1 R4 P7 u
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;5 Z# j1 M- W) v5 e
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;: a6 J3 |, Q4 |$ k0 B7 ^4 H: ^

. y" x: g4 H, P/ j. \/ F  T- m/* create a logger instance */+ O/ C# |% S! b) D
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');1 e) M/ [: f/ [# _4 d
var loggerBufP = new LoggerBuf.Params();+ \9 F7 \- c. [9 d
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
- g6 G/ r8 |/ Y7 o6 r$ S: @loggerBufP.bufType = LoggerBuf.BufType_FIXED;
" t) k$ b4 T- ^# O/ b
2 F: H/ J: ]! M* kvar appLogger = LoggerBuf.create(loggerBufP);, I; e; m- b7 x; A& K3 I
appLogger.instance.name = "AppLog_Core1";
- |( x$ V5 `  U& J2 u, @6 KDefaults.common$.logger = appLogger;) g8 W" f7 \- {( n2 }, g
Memory.defaultHeapSize = 0x8192;    0 X2 V5 ]; D: M, k3 I) }
Idle.idleFxns[0] = "&LEDStatus";' Y( q6 Q* v) T  i1 i3 t" `
Cache.initSize.l2Size = Cache.L2Size_32K;
3 l  Y3 i+ q# M& Q4 V
; `& q$ _, \3 M5 E& D) t
回复 支持 反对

使用道具 举报

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 */
8 O* n5 n8 r3 Y9 l) y, nvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
' X* j2 {' {6 V# v5 `2 Avar heapMemParams = new HeapMem.Params();; T/ p7 ?) u8 e- m% _8 P
heapMemParams.size = 0x4000;
; J0 f, o  s: T) [  k/ q3 O0 m& n) Z
var Memory = xdc.useModule('xdc.runtime.Memory');
* T' {% C+ W( |9 hMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
" n  `. p3 J3 b1 V
" O! j1 ~7 [" q# O我大约calloc  每次共计大小为5K*16bits,; U6 f* @* l' p2 t  d6 h% @
而默认配置才0x4000、需要改大。+ |9 {" {2 I1 Z! Y" d  K

' J# C% A* r- m8 E
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
4 c% |3 a' v9 ^& {Program.heap = 0;
; n; D* X; j3 U) k0 lProgram.argSize = 100;  /* minimum size */4 _. f$ Z! s* E3 M" W: K
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-22 00:18 , Processed in 0.043167 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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