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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构3 L6 H, D7 A- [, A6 r7 y5 p
5 @9 Z8 f# z  ]3 v/ a
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256. u6 I* l0 |9 m, o- h/ A* L+ F

  |  b1 {* M) G6 J4 t其他程序段。。。。。
, \3 \0 H1 ?9 @+ b/ o3 r 1 g% _9 }1 i) F! k. {
   free(x_d);6 q& v, [+ D8 w5 ~* s7 A% J8 o0 A
( q! j- d) G, w6 \+ i, m3 h' k
使用DSP侧单独调试功能,验证动态申请没有问题,0 B" t! o( Q" t% e

' y+ r1 j3 u0 {: z- o  s/ H% d但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。+ h0 c5 M% r* M; v+ k0 M
9 c) e; J$ A, i" }: C- a4 M

- z2 y! E' I" |* D7 p$ o/ ?0 s9 a8 {* }$ T; i# ?
$ C* ^. S9 s9 n8 ?1 R% i& E; f6 q
8 r% b9 _* Y; {& O+ Q

7 p$ u4 s9 ~4 ]5 O& f5 ^+ N2 h! K( O' }% W1 S+ c

- j1 Y8 d& M$ I4 C% j- s( t: R* k2 v
4 {( J& ?& b% ~3 R7 s! S
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
, J, Z. Q+ e4 O我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下. p) O$ S! }, }! \2 O1 x0 W% f
(不过疑惑的是,为何单独DSP仿真就没有问题呢?): ?/ A; F+ Q' U2 @8 i: c8 ?) U

5 m3 A9 F- [! M: ~3 A是不是需要在DSP.CFG中进行配置* ]' y/ K# f4 N: `) M
我现在的配置为
8 U3 v) X6 a* p  W) O4 x3 E
5 a* U& {7 y3 s0 ?9 K' K! J/*
. {0 s# `* K. M0 Y: K% K7 m8 l  S *  ======== Operating System Configuration ========8 F6 E7 k4 {- h* ^- \& S' V
*/
9 P4 c1 h) U( c, H+ V
+ j% H! S  `" N' O  i: d/* no rts heap */
0 k+ Y' J1 x) Y) X- lProgram.heap = 0;" h) y1 _: Z7 G1 ~  y; e3 O! ]/ ?* U
Program.argSize = 100;  /* minimum size */
: M  h* I+ X; [( `7 R$ \Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大5 I$ u' X# a& P, O1 Z  @
6 E" a5 j) \0 g' |9 n
/* create a default heap */
' d3 l# X' b& v/ `# rvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');1 f* E: R8 V/ B) Z0 J* ]
var heapMemParams = new HeapMem.Params();6 d* |( z9 M! H( l7 f6 Y
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
/ }4 t, x( o, p6 L) i: U
% F: f: m4 r! n4 f6 M  I
var Memory = xdc.useModule('xdc.runtime.Memory');2 O( Z: S; B' N+ B: m4 [5 O7 q
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
  X9 P5 P) U4 f- b+ U5 \( W
5 p0 r  e1 P' E$ ~1 b: w% [/* configure System module */
$ F; N+ q& k& j% k' x5 F, hvar SysMin = xdc.useModule('xdc.runtime.SysMin');
* x. c# V7 w' x; s9 P2 WSysMin.bufSize = 0x1000;( w1 p0 F$ }0 Q) G3 Y* j( K; N/ b
SysMin.flushAtExit = false;" r1 v) t" C) F& ~# B; i: C

) m8 P+ T) A! h' o; jvar System = xdc.useModule('xdc.runtime.System');0 i! U2 H/ g$ W4 a, C) }
System.SupportProxy = SysMin;
4 s$ e' R$ ?' p7 m2 E4 ~9 I6 p; `. S- G' I& N
/* configure SysBios to use the lower half of Timer 1 */
$ A  d* ~" g  ]" W' C) z! s) ~$ Dvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');' @* m- J- X" J, X; `, e0 o* Q3 E
var Clock = xdc.useModule('ti.sysbios.knl.Clock');- O) F) ?, h# w0 O4 ~
Timer.timerSettings[1].master = true;; M' y$ z" ?( q( _# p* Q4 k% U- Z, l  ^
Timer.defaultHalf = Timer.Half_LOWER;
" ?' ^  B* W8 p$ E$ L! z( JClock.timerId = 1;3 }2 P/ k9 f) ]2 P6 M$ E: ?: h
; f* Z6 a8 [0 w7 E7 x" M3 \0 Y
8 k, {! a6 p; [1 ~2 A/ s' e" a
/*! Q3 P+ b" ?9 I4 W' q6 X
*  ======== Miscellaneous Configuration ========
1 G" ]4 l/ }& y: c */9 g, C- C: f$ o+ ]" A, }
/ g) w' N+ J8 a) H, o; j7 ~9 n0 F
/* set default diags mask */
! |" `5 R: ?5 ~7 p& N/ H5 s" |var Diags = xdc.useModule('xdc.runtime.Diags');
. ]4 J, r3 U- N, m6 X/ ~var Defaults = xdc.useModule('xdc.runtime.Defaults');6 }+ l, n3 @  R1 v4 D( z3 u
( C. E! p$ x( h3 X4 Z
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;7 u+ k' y* L# N! d0 p3 _
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
3 k% ]# {$ W5 W* p& Q7 t7 gDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
6 P1 t! B6 q7 U7 B* _" V( g" fDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */$ ~/ w& H$ r8 _- J0 `! J
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */0 n" q6 m) V' T3 ?
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
! E% z9 X" ~, N- I: g& w+ MDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;3 _9 n+ _& y, P- R, x" C$ j
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
" l+ w4 Q8 h" `# d# L$ ]) S$ Z6 |Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;* E' k( z7 G% k0 l; @6 `8 ?9 B5 U
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;$ ?- V+ ]( m8 S: p* t! X
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;1 K& [/ {0 @4 J& D0 g& M6 J  w
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
" T, H# ?: s' Z. n8 C3 R6 k9 rDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
% |: q  }% v: d& X' {4 t3 fDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;3 n9 g# i( }9 n8 j1 D1 f" P4 }
5 ]; n3 j3 k! }  _3 R; S( G' K, R
/* override diags mask for selected modules */
" h" [; k0 _& ^' S, X! F  axdc.useModule('xdc.runtime.Main');, g! t) ^$ ?) C, Q6 o7 a2 z
Diags.setMaskMeta(
$ r' T7 b0 \: l7 |$ d! B6 r# n  l    "xdc.runtime.Main",
. k0 p. _7 E. b- T+ M6 p# _% `% P    Diags.ENTRY | Diags.EXIT | Diags.INFO,) X2 @- E& G3 s( Q5 y+ q
    Diags.RUNTIME_ON
# j6 D8 q! C# M+ d) n+ C; p! a);" I5 i$ y+ r. x: G; |( W

6 h# x) l$ R* S3 ^) Wvar Registry = xdc.useModule('xdc.runtime.Registry');" w; w& [5 Z6 n# [' e+ A
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;4 ]- R+ n& G) S: w" b
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
* M5 H) z8 \4 G( [4 dRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;; B) z1 W. X$ e, `0 d) \
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
+ Q/ e& R" p' q8 [7 a" D+ X8 N) M" O1 p
/* create a logger instance */* c% c0 T1 W/ V! X" n
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');. F0 R. |# v/ c  A, p
var loggerBufP = new LoggerBuf.Params();
% n1 g/ \  x# E9 Q, OloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */" @& t: q9 ?; |) S
loggerBufP.bufType = LoggerBuf.BufType_FIXED;0 z) o8 }# k& x& {. R
$ v3 q7 V' F- P% w: _
var appLogger = LoggerBuf.create(loggerBufP);7 H3 J9 Y2 K4 x3 e$ D9 F
appLogger.instance.name = "AppLog_Core1";
+ [2 B* t  ]8 Y9 lDefaults.common$.logger = appLogger;; @; ~& R+ n0 g' `, w
Memory.defaultHeapSize = 0x8192;   
; G4 O$ l7 a  x+ H3 P  EIdle.idleFxns[0] = "&LEDStatus";7 ^, L, B2 W% \" U* n
Cache.initSize.l2Size = Cache.L2Size_32K;
5 o# n5 ]) v# n# Q; D; c+ r8 m
5 N6 h3 H4 r5 N& d3 }. K
回复 支持 反对

使用道具 举报

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 */& y* E/ s. \7 F& O& x& X
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
& ~8 @. R' S' A/ I5 Y0 [* fvar heapMemParams = new HeapMem.Params();/ J$ A; v( u7 m
heapMemParams.size = 0x4000;
3 h$ S3 D3 u3 m. c) K/ G! N  J
- o7 }6 p* p4 m! W: a; [# ?var Memory = xdc.useModule('xdc.runtime.Memory');+ Z7 n; r; b3 T, ]
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);2 x! C; [0 R5 T: u9 M2 P
$ H1 q$ T' x" m3 p: i: a
我大约calloc  每次共计大小为5K*16bits,7 d2 f7 |! t1 K
而默认配置才0x4000、需要改大。' e! _" D+ \% e1 J& C3 c+ P
4 Q* W  N1 ^5 t5 b" P
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */6 U2 @8 [# n3 B$ }% {# O* P7 {4 \
Program.heap = 0;
( Z4 x3 W: X& A" [9 pProgram.argSize = 100;  /* minimum size */
2 t; a% Y$ a$ ~6 o# \( LProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-21 12:22 , Processed in 0.040541 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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