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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
& X, `2 S) T+ P0 K9 I" o3 t0 M, j5 [  Q! r  h# [
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2562 M! e* a5 R5 N5 E, R" l0 T- q

  o2 X% z5 ^2 n' ]& c其他程序段。。。。。& f* E; Z2 @! y0 D3 k; t1 B
" b) O2 G, `  t) \7 i' O- J; {
   free(x_d);
0 @6 B! ^- {" g) h
6 r- v3 T# H9 _使用DSP侧单独调试功能,验证动态申请没有问题,- I+ d7 O; ]' P3 r3 w5 J8 h
( i6 h' R, L: n. w1 h
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。1 e' d8 G3 v2 W: u/ R" m

/ w: k+ x4 X! r% }: ]) D' D% q# \0 a$ l5 o/ K' ?. x% a

9 S) v1 W# l( l, R( R) P( t' w9 N+ J) i2 G3 o8 f0 t% _$ E
  X- ^9 d4 _- W* h
9 N' d$ d) A, y/ t8 b7 h' u8 M

# U1 M0 f; V: D( _4 x1 V0 [' A5 C8 u0 V* h8 P# x; |( u4 f

: I# }$ ~% |* {( L' z- r5 k+ T# r5 ?& r; L8 R4 |
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明/ f. o; R& I4 k* ?3 g' Z
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
9 |" Y; j5 \4 l) K& L1 i' h) m(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
5 p1 C$ H* N1 ^$ Y# z9 Y/ O) ]

7 f# J& u) l* f5 d: H' Q+ \是不是需要在DSP.CFG中进行配置" y$ V1 n+ ~) `, h
我现在的配置为% w2 ^; u8 r# s
  E8 a* [9 c* y) U1 S, H) R$ L3 m, P1 u
/*
5 e& e( c1 L: U" B/ E *  ======== Operating System Configuration ========1 N1 |% h- m- h
*/
/ o( w/ Y; U" p$ B' C7 p
+ A$ J3 i5 O$ }) {3 p5 r# |/* no rts heap */
+ w+ q+ o4 d+ x: i0 ~3 ~" P* MProgram.heap = 0;' M: W, n+ H4 o, O
Program.argSize = 100;  /* minimum size */
. A# F3 w& H& q7 {- I' N: xProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
% s5 z. ~) K/ Y
- p* _& m+ v" ~3 i( g/ E/* create a default heap */" C  ?. `& }$ s# e
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');# W( C  o; V, i1 J. d; x+ r8 ?
var heapMemParams = new HeapMem.Params();! B. u) W8 t& `! W; u3 S8 b/ j% F
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大8 i( j! u4 W3 ]2 Q+ l9 }* ]( H

' |# r. B4 V$ F! K( c/ {
var Memory = xdc.useModule('xdc.runtime.Memory');% y% `6 V4 M3 m8 g
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);# k7 D9 @" v: D" A8 }  k4 _: \4 g1 |
0 X$ T" ^5 r2 E* ]8 Z' q' Z- K
/* configure System module */7 \* ^( g% T4 E3 L. H; i
var SysMin = xdc.useModule('xdc.runtime.SysMin');' F$ d7 |2 E& u& i
SysMin.bufSize = 0x1000;+ f' k) T/ }0 Z8 a
SysMin.flushAtExit = false;/ v% J; c1 P$ b

5 f3 Y2 _' L7 J; Q( z, [( T2 wvar System = xdc.useModule('xdc.runtime.System');) s* J4 l0 s7 s& b" ]% m& U( q
System.SupportProxy = SysMin;4 ~+ V2 R) ]' A/ u& d0 W

5 k( A  w+ d- x* f3 I- B5 W2 m/* configure SysBios to use the lower half of Timer 1 */
. R& b8 {/ N0 f* wvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');$ l$ S5 \+ M3 w* m* K- U( u
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
" p( D+ ^, Q" t6 ~- a% ETimer.timerSettings[1].master = true;) E6 k% Z; [2 Q' a6 j, L3 _9 w
Timer.defaultHalf = Timer.Half_LOWER;& B+ B5 w6 f1 z: Y- q( N( g) X
Clock.timerId = 1;" L+ H, S$ L  n8 j7 X# _  v8 P0 G

; N  \1 s# ^% G0 B' b9 h( h, N  Q7 T4 M4 ~# }
/*! f3 h0 x) N' `1 j  |6 F
*  ======== Miscellaneous Configuration ========: Z5 k6 S8 m! R/ S6 t, ?$ x2 J+ Z
*/
. T  q  J7 a4 T. K& x8 k* Y' _! u# c8 u2 y
/* set default diags mask */8 C( ^! c' ^* p. }! F) ~
var Diags = xdc.useModule('xdc.runtime.Diags');6 R( r8 C' q+ q% c, x
var Defaults = xdc.useModule('xdc.runtime.Defaults');0 |- x4 C5 q& S! E
5 ?" g0 k) I4 k
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;5 v; |+ L) F+ u' u3 W
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;# G& i6 x! P  }; m) p& @
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;+ N# q* b9 M. j
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */8 X. b. k0 Y2 H! H( c
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */7 \, K/ y: ~2 e5 d8 k9 W( v& Y
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
( a  w. l  G4 qDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;; ~1 ?# ^# V, J8 f2 s. e1 r
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;7 i3 o+ w, O/ C7 U. X6 O
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;& S% D; P" \! F/ `; b& E: b9 i
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;$ ?& k/ o7 g' K9 B
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
$ |. G8 s1 E) K0 o  ZDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
5 y' o& q* m* b- r' CDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
8 Z0 B3 Z. z4 L( y  {( N- @Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
& q6 T7 E1 w4 L2 Z' ^% f
( D1 L* G3 `2 m( _1 I1 R6 n/ H/* override diags mask for selected modules */
+ O$ P" W- e3 Sxdc.useModule('xdc.runtime.Main');
% M( \1 d& s' B( B1 L9 gDiags.setMaskMeta(& I% c! m8 G/ F
    "xdc.runtime.Main",
: g5 ]  `; _1 f& |6 ?. b* {. C: D# S    Diags.ENTRY | Diags.EXIT | Diags.INFO,
. Q5 C: j' a9 ]; x! r5 F; T    Diags.RUNTIME_ON
9 P5 i5 l. q2 J: b, I, _);
1 X" o# E5 S2 M; e7 c3 \
! D, p3 S! a! `" {var Registry = xdc.useModule('xdc.runtime.Registry');# c. y! d, H: S" u7 U2 q' t
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;5 A% T3 ^% u9 U: A
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
( u6 E* t& u) H3 K$ nRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
, m; M" Y4 t/ u9 \: P$ ERegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
  z$ Z$ [. g- N# a6 X+ i! w7 T5 y$ E7 Q/ E* L+ {4 }; a- \
/* create a logger instance */, o1 E0 o2 w' `) i) o9 V+ i
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');- }6 O: w4 O  c: A3 E' X" T  M. f9 b( z
var loggerBufP = new LoggerBuf.Params();
- `+ b8 v+ L: M( h2 eloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
* h3 i0 V) s0 V3 l( {loggerBufP.bufType = LoggerBuf.BufType_FIXED;
; K# N: q& O$ V
' v' K! K3 M' X' A+ Z8 Yvar appLogger = LoggerBuf.create(loggerBufP);! G( m- k% e4 N, o* n' }
appLogger.instance.name = "AppLog_Core1";+ F. q1 k0 B! p0 k7 H- p* h" J
Defaults.common$.logger = appLogger;
' d5 d" f6 n4 M' a9 k. }Memory.defaultHeapSize = 0x8192;    0 Q6 U8 S5 Y" p& J# v
Idle.idleFxns[0] = "&LEDStatus";
' C8 J+ T7 v# C3 z0 u* ^( N0 r1 Q( h$ GCache.initSize.l2Size = Cache.L2Size_32K;
: \" w( r9 V, h2 _! j
4 s$ V4 K3 H3 {* v6 \% V
回复 支持 反对

使用道具 举报

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 */
3 e$ o, j, U7 {" u9 A, n' N) {& jvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
! y: N3 N3 ]+ L: q' a$ mvar heapMemParams = new HeapMem.Params();
$ R1 T1 i$ a2 [( i/ ~heapMemParams.size = 0x4000;$ Z, W9 ^6 o7 @. b
6 n9 a3 e0 L2 A7 x$ u5 f
var Memory = xdc.useModule('xdc.runtime.Memory');% c' e- m* i: w) M% \
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);" L; Z) M7 Q5 o4 X

: |$ Q" y- n' K# A) `我大约calloc  每次共计大小为5K*16bits,
8 R$ w4 E/ b: J' K而默认配置才0x4000、需要改大。
3 n6 c3 ?- [7 Z- N0 |  N3 }0 i
% p# n# T5 e7 j' ~  \6 R8 h( c
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */( f3 C3 V3 a- G% z( y7 I7 z
Program.heap = 0;
) O6 l* c' x- m- S7 W2 a- J3 H+ m. wProgram.argSize = 100;  /* minimum size */
3 w+ v' K6 H& ^2 T. h) f% H. jProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-18 03:00 , Processed in 0.046836 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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