关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构2 `+ o/ w5 y/ ^
: M/ P1 a, W! g, s
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2562 w* S0 H% @# y, T& ]/ ^# R
# r3 H8 G9 A) T' L) v
其他程序段。。。。。
( {4 p' S2 g2 ]7 y + I9 v3 l5 U- ^: j5 I# N/ f
   free(x_d);
. M# \3 ^8 Y# Y
/ i: j( r: V, o* h; _1 _( S! m使用DSP侧单独调试功能,验证动态申请没有问题,
9 ?" F. r9 ?1 E  p! U) ]% s' e" M2 V  }- A/ n3 ]
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。7 j, p# [0 |7 v

* `3 t0 y7 y) \. T1 D- V$ l$ K/ R0 i8 h; z
5 |: a- C% ]1 q( E, J" U9 I6 d! J
  f* o: o0 U( e6 {& F

0 k4 `. g9 K. E' I/ _  O5 i' r6 B# Z% L( b, e# N2 q

/ n8 D& U( P. i0 \0 l' q, }% p& H
$ w; w! P) f0 a' \5 G5 n7 N' O+ M2 G/ \! ?" v0 r

* F3 v8 ^7 P0 `- \( p5 k7 I/ }: b1 P
分享到:  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 */
" V7 d) `* i- x% RProgram.heap = 0;
! Y% [* O) e1 B2 S- K3 ^* qProgram.argSize = 100;  /* minimum size */. F$ ^; T6 A. t/ t9 U; F
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
8 A- I" a' y: ~. avar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');0 H, C" J4 x3 v$ K+ p
var heapMemParams = new HeapMem.Params();7 b% _( y0 t0 A2 g$ U
heapMemParams.size = 0x4000;1 r4 E4 f0 h4 w+ |! n9 u1 d2 B

, `7 f8 }0 S0 q9 H0 I6 q2 Avar Memory = xdc.useModule('xdc.runtime.Memory');
1 g" D9 X. d7 W5 {0 @" xMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
, U* s$ M9 g5 d" N' J+ W; W
) F/ }& c) S. L- {我大约calloc  每次共计大小为5K*16bits,- w6 [4 ~0 W% P9 A2 W7 X0 \" V
而默认配置才0x4000、需要改大。
- O) F! p7 w5 A7 }  y: [* e1 m  p- Q4 F
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明0 m2 v( F) Y) B' W- W2 c
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
; }1 j+ ~& B1 |! G$ ?(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
4 @- ]* N* ?. A2 R( u4 L6 u0 L  p) ]# X9 M

+ \/ M  j/ w7 e" M- u1 Y( e, `是不是需要在DSP.CFG中进行配置
( Q- U: _2 R! u4 D0 y  U我现在的配置为
. E, g* R  G% B3 {. k/ z
4 N4 E4 c8 M  R, ]/*
9 a9 V) @" j$ O. h; @  F4 K* g *  ======== Operating System Configuration ========) z6 q' G0 [8 b# K& G9 [: ]
*/- u" P/ C8 e- j8 A' ?, x

  ]" v( L& R' e) h/* no rts heap */
2 ], S5 H% N# ~  n& z% [" gProgram.heap = 0;
$ ^7 t8 s  f6 V, }. t1 \7 UProgram.argSize = 100;  /* minimum size */# B9 m# R4 U5 A6 Z7 {# d
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大* q" _7 _- m6 Y1 Q3 w" T* l
4 s7 R: K! I" P& F/ J( G( `' a
/* create a default heap */
& g& D2 I" e  }, |( k2 {var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
$ G: `; W8 l' }( Evar heapMemParams = new HeapMem.Params();
. l7 i8 E% |$ J: `. D, V9 eheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
9 Q6 h" {# C8 X8 m
/ S. D# w  ?- q6 Y
var Memory = xdc.useModule('xdc.runtime.Memory');
4 n) ?1 a) h) qMemory.defaultHeapInstance = HeapMem.create(heapMemParams);9 L6 ]0 C) p& K5 C
, r) s$ H: u# n% }5 d
/* configure System module */
' y5 ^$ x  \) p3 z# svar SysMin = xdc.useModule('xdc.runtime.SysMin');
# A: M- C: C. eSysMin.bufSize = 0x1000;; z! G5 z+ r/ G" i7 m/ X
SysMin.flushAtExit = false;* |+ ?5 U! K. G

/ P- n/ {8 J% g; }; F5 }. avar System = xdc.useModule('xdc.runtime.System');+ f* b/ T4 j$ G1 K% s( N4 }
System.SupportProxy = SysMin;
# ~: _* D* `+ O- r" @0 C( [1 W9 l7 w' L' e# E' {; S
/* configure SysBios to use the lower half of Timer 1 */
; e$ a! H6 D/ g/ n* p. s3 P1 evar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
( D3 R  h) R3 w5 ~8 T2 Dvar Clock = xdc.useModule('ti.sysbios.knl.Clock');/ t! c  o8 h! F8 f. i. s8 [
Timer.timerSettings[1].master = true;
  v6 _3 d0 l' y' m9 u( H8 p7 n! \Timer.defaultHalf = Timer.Half_LOWER;* h2 u, ?( i4 a9 @
Clock.timerId = 1;6 D4 G% R: X1 G+ ]  j5 D  e$ D; ^

# ^5 [4 j8 F9 J2 p1 h0 h
3 V5 M! [* k2 b2 ?/*
$ L  C6 v1 {" J" m *  ======== Miscellaneous Configuration ========
" q& N8 e9 g1 y: Y: ~ */# ]) |4 d. _4 _
# }. [- T% J# h# o  s% d
/* set default diags mask */
9 [2 J. c4 l/ k9 X" Mvar Diags = xdc.useModule('xdc.runtime.Diags');7 y7 [. Y- z, U6 @& w
var Defaults = xdc.useModule('xdc.runtime.Defaults');
( T# {& b5 z. a4 R& r: n+ B  ~+ d" h# O3 ?
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
: ?. B1 [1 V, a  [0 f( C& f4 S: pDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;4 X4 \$ ~3 k+ s: z5 D0 j  Y9 n" Z0 ]
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
+ B: e& {$ G6 GDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */' U: G! b- Q3 O* @/ m
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
- l" |# R5 O5 L2 o( R0 Y3 x8 `5 NDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;9 l  s* c9 H- v2 A
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;8 V; t: }8 t9 j; v% c$ p
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
7 W/ P9 W: ]  r) p) I# M3 ~- K2 zDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;# D' c+ ]* I! c+ y  Y9 }& \
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;6 F3 O2 ]9 h6 w& N9 W  `% R
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;2 f0 ]' ]: `6 W3 Y1 v  d
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
6 x9 M+ Q/ G( ?  ~7 JDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
0 M, M4 P3 n% N$ P0 i9 {Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
  V8 M. `+ a, a! V. Z$ b' ~. V  o3 ~/ _. b
/* override diags mask for selected modules */+ S5 Y5 w# d; t
xdc.useModule('xdc.runtime.Main');
3 L4 M4 H7 {- U9 a$ PDiags.setMaskMeta(
3 R! U! t: j* `! |4 q* L# \5 q( a8 Y    "xdc.runtime.Main",/ B/ e1 c8 o$ t
    Diags.ENTRY | Diags.EXIT | Diags.INFO,1 c& \3 g0 G/ d( j1 O: L* Z' {
    Diags.RUNTIME_ON& M0 X: J# \- x) m5 S  T/ g
);
3 r/ H0 B# D1 y( `, g
4 b; g$ l0 N' m1 pvar Registry = xdc.useModule('xdc.runtime.Registry');
/ b( G; V4 j( j/ z& t$ dRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
! m! y" z6 T' JRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;( P7 M4 O6 j+ Q; z6 e# R
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
& f% O" N2 M5 XRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
* e7 M, B' r( q9 S: X4 x" E0 k) {  {' q3 _5 k( w$ N4 G
/* create a logger instance */
- ~! O- q% F+ o* k: ^var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
( G4 `& h0 _' G0 N( S0 z9 `var loggerBufP = new LoggerBuf.Params();
/ T' T, W; A: M) _% y6 T+ VloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */! e6 b' c. U! n4 c8 L. i
loggerBufP.bufType = LoggerBuf.BufType_FIXED;- r* {$ w6 ~, d! b. L" W% K

7 B' `( [4 P: C5 F& R0 vvar appLogger = LoggerBuf.create(loggerBufP);
0 [/ f0 v5 l2 [3 n. K. P; sappLogger.instance.name = "AppLog_Core1";7 d2 N6 t4 |$ d4 x2 ?9 m! P1 X# r) g
Defaults.common$.logger = appLogger;
! F( \& X* z, Z) J% h" @/ E  rMemory.defaultHeapSize = 0x8192;    ; v. _2 l2 u$ I
Idle.idleFxns[0] = "&LEDStatus";: F  c: C& |7 m0 c$ v, I
Cache.initSize.l2Size = Cache.L2Size_32K;+ W5 }+ L  H6 T" L- c! @9 n) w! H
: X3 S, r% |+ F& N
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-25 23:35 , Processed in 0.043799 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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