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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
2 `( _* h" H8 S( _5 ~6 [5 t$ i  X
# r  O/ Y2 `* _, K8 u& ^% \    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256' y, @) }3 y1 j- ^! Q# u& x

* _& J0 N2 O& ?6 S9 D. W& `其他程序段。。。。。
/ q; \% s, o, {9 r+ K9 K& _
$ Y( {, M7 R; B& x1 P   free(x_d);+ o: n, r' x: k5 b3 t

  z1 [- s( \. t9 l, t7 Q& h8 [使用DSP侧单独调试功能,验证动态申请没有问题,3 b2 W  S! ^8 n
; f# U3 p( g, e9 |
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。; C: X* J" s' d) w3 G
& i+ r7 X2 a' m- W5 j* r
% r7 ~2 c2 H" U+ f7 p
8 C0 g$ J3 g: D/ k! t3 z# @
1 ?( k9 ~0 _9 P5 P. y$ b- W

9 z- K0 n$ `4 ?1 S: T' W$ J3 v' ?4 e$ M6 c+ C5 z
2 E& ~& d8 M5 Z! T0 _. K
1 g* _: C, I' W. d- y; |

! Y7 X0 @1 I, g) h5 i2 `
: C2 A1 p  `: l2 F
分享到:  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 */7 w' A# c! M0 O  l4 d: ]; b
Program.heap = 0;6 h' B& J2 k2 i0 _+ V9 h
Program.argSize = 100;  /* minimum size */
8 A. d% j; o. B# ~6 g: EProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */" [" p' p- x8 K; c! Q! l* G. _
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');3 O  H5 W* A: f% ^8 q8 e, S! S( ?8 Z
var heapMemParams = new HeapMem.Params();' w0 U9 t& G8 u1 o, X4 U
heapMemParams.size = 0x4000;
; v. H# t! d; R8 M" M; @% K
% G' t3 d  R0 [5 ivar Memory = xdc.useModule('xdc.runtime.Memory');- Y1 r; T/ j# s1 x* `6 F
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);' ]# R- @- x5 H9 o1 q# W" i! R
. B2 Z) p1 _7 W! Y0 c* c4 i
我大约calloc  每次共计大小为5K*16bits,
4 V) ~3 g( K$ V0 m; t而默认配置才0x4000、需要改大。' I, i% q  _- {/ T( e; Z9 T
8 h0 ]" s, Q! u+ F; E8 i
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明1 p$ f/ V2 n7 F: p+ `. E4 E5 E  v
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
" C: v- P, U5 ?+ X6 h8 N, k1 u5 x: n(不过疑惑的是,为何单独DSP仿真就没有问题呢?)  R( b& C2 e/ B; K

  n. c3 z! m/ H( I8 [- H7 p是不是需要在DSP.CFG中进行配置! B7 s, _% N+ Z
我现在的配置为
0 h0 h9 g. h% M# Q/ T9 S. h: P: t- C# F3 ~
/*
! h6 d( g* I4 B5 z *  ======== Operating System Configuration ========
: P# i9 u6 L% C1 l# H- v1 d0 Z */
! R. p0 [# S* k6 F
1 T& b6 W* A' K7 I2 E7 Z/* no rts heap */8 P6 W0 d! Z: n+ y: q/ U7 E. R
Program.heap = 0;9 Z& N- {* t. z* K' w) x+ t( q
Program.argSize = 100;  /* minimum size */, p9 `3 k+ X/ X' T: C* M9 \; w
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大. ^% P1 p6 G4 {+ s4 s) r, o* u1 p

$ v( O* k9 |5 E5 J' B& ?/* create a default heap */
1 F8 K2 m* Y0 f+ V0 f. f# {var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
' V% S& Z0 M% w3 e3 R% Kvar heapMemParams = new HeapMem.Params();. @* {! a6 }3 m- J7 Y$ B" v
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大4 R* g" ?+ v1 W/ |$ f0 A( Y  s
! }( _; I- i  X# e/ J# B
var Memory = xdc.useModule('xdc.runtime.Memory');
# @. {) `9 A- b9 q9 X2 R$ u9 t9 eMemory.defaultHeapInstance = HeapMem.create(heapMemParams);/ q9 |( [/ c- ?* B' E; \8 `
  }: Y- U: M3 m$ X: P3 o9 v
/* configure System module */
' _6 `. e0 H5 Avar SysMin = xdc.useModule('xdc.runtime.SysMin');
0 [  f. E4 {$ x6 h% [8 tSysMin.bufSize = 0x1000;
" q0 b4 P) D  O( I- i8 b, _: {SysMin.flushAtExit = false;
/ ?. X( d. o+ U) k0 H/ k, @/ p2 _& r  S9 C
var System = xdc.useModule('xdc.runtime.System');6 V7 q- B, J' t4 Y' e( \
System.SupportProxy = SysMin;
! E9 `* ^* W+ ~# R: C$ n6 d; }
- V5 [& v' N' a# q/* configure SysBios to use the lower half of Timer 1 */
* C" X) J# Q' u0 x3 u) gvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');3 E/ ^' n, d/ k( V$ i0 Q% }( r9 S
var Clock = xdc.useModule('ti.sysbios.knl.Clock');2 D0 `# [; M" R* S
Timer.timerSettings[1].master = true;
4 [  A+ @3 h9 P( h1 }5 v- KTimer.defaultHalf = Timer.Half_LOWER;
+ C( k) f1 d8 S4 ZClock.timerId = 1;
$ i  r7 j; x9 R/ i* B7 c% A2 \, [2 Z, X6 B
- B1 x. r. F5 K' a3 b
/*
  P4 n; c7 Z% n3 f6 P* X *  ======== Miscellaneous Configuration ========
9 T! @) ~; u( Q# g: Q, x */
' ~/ H: _1 I2 l0 I9 S5 H
0 M- {* t7 V1 [/* set default diags mask */2 g* N4 T8 }5 c+ s
var Diags = xdc.useModule('xdc.runtime.Diags');
8 d; k0 {' f# W0 X: h- yvar Defaults = xdc.useModule('xdc.runtime.Defaults');6 ^0 A4 y1 f$ v6 B5 z; L

0 w6 w, z' Y* C" {Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
6 Y% Q$ W' g$ L9 f( yDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
' D% J% O5 p8 T2 |Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
0 M6 m2 O' v" k( t: X3 sDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
/ C# d$ o: v* k8 F  R8 l# nDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */" d! p& ]1 f# [4 }! U  k3 P
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
% U- C9 ]7 C4 R" HDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;5 s3 ?2 z. C( Y% L: V3 a
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
$ Z; E5 A! l2 VDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;0 V0 }* ~& @# u& d7 F* H. \, b
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;* _0 A& q. g. K4 W- |
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
; m5 ~2 t7 b! nDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;, |: T1 Y2 C. i3 M% |; @
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;4 r6 [9 c  x3 t+ h: I1 G
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
& H0 B7 T6 D$ a% V2 R
5 [' j3 q7 a! v- h' ~! g8 G" p. v/* override diags mask for selected modules */
+ |( N0 ?- D) i+ p5 a1 [xdc.useModule('xdc.runtime.Main');' H7 t1 Z" {" z$ {
Diags.setMaskMeta(5 a9 M3 |! P, \, _( Q! _7 {
    "xdc.runtime.Main",- S* O9 r1 [( d  i7 W/ f+ h& R9 e& V
    Diags.ENTRY | Diags.EXIT | Diags.INFO,! C# a: W1 B6 n  f8 X6 a* \8 I8 X
    Diags.RUNTIME_ON
5 s  \$ Z& h- B1 K/ z);( f$ V! T% w' S6 z/ d
# P( m& V: I2 m4 h0 r8 S
var Registry = xdc.useModule('xdc.runtime.Registry');6 Z+ ?  D1 G% M- P; [; d, Q
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
, B/ {/ J. a8 }$ B7 @' J, A" l0 URegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;& `  o# U- P$ [/ ^
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
' M( p6 \8 T! {8 ~Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;# W$ ^, e! x& q( Y6 |
# n$ q) N- R, S" N4 y0 R
/* create a logger instance */& n# o4 s7 I9 a& z. n" a3 V6 u8 i5 X
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
9 E& L) Y& n8 p7 D9 ]var loggerBufP = new LoggerBuf.Params();
2 U" A4 w+ Q$ q& hloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */2 B! T1 a: K6 N$ r+ ]- Y
loggerBufP.bufType = LoggerBuf.BufType_FIXED;- |9 S) R# ^, K; o* g- [0 N0 M/ s
8 C& i3 `" P1 q/ M" p/ D: I, v$ k2 Z
var appLogger = LoggerBuf.create(loggerBufP);! ]! i" S( t3 R3 J4 l# y0 h+ H- [5 Q
appLogger.instance.name = "AppLog_Core1";) z' T: }7 ~* T+ l- S$ Y  r4 R9 x
Defaults.common$.logger = appLogger;0 f" i; q) q' A
Memory.defaultHeapSize = 0x8192;   
& O) j+ L( v3 ~Idle.idleFxns[0] = "&LEDStatus";
% ?: {+ w# f3 h) L, w9 RCache.initSize.l2Size = Cache.L2Size_32K;
6 x4 @- G. p1 X5 Q& T( P% n' j+ C3 G: U
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-13 22:01 , Processed in 0.041163 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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