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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
0 h: x: i/ f" n: D! F6 R0 K  s7 ^! ?
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256: Z  `) @; N% e+ |& J

0 Q* ?& f9 d/ ?* G& k( ^其他程序段。。。。。) n  h' t# p/ w- N1 i* G4 q0 G, [
/ g. q7 U5 C) C
   free(x_d);' L( n1 K3 n- Y8 s

% w! I. |9 C/ s6 s使用DSP侧单独调试功能,验证动态申请没有问题,
& c* e' w- i% q9 i* J# k8 `7 l7 d
3 Q9 m" ?2 ]0 P) O% U但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。' w. b$ [- B. o
# ?# x+ q2 c  d4 w* j7 w2 P
/ v! B4 L' G" K8 w9 U# B" D

& y5 s1 X4 Y$ X. C
* z6 X7 K( E8 a  [' T9 G% b* r, w1 J& h# W1 m1 c: U1 C
: H+ `0 Z" D4 H+ h/ Y( Y
: V% m& L  e% \8 C: x& g6 W5 P, i/ T: l
8 g5 Z  s  f3 \9 H9 ^& ^
" S5 Q* a' W# w, o0 a, K: i

8 K8 H* Y1 \! ~% V+ `" ~
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
; J! G& R7 s; {+ B- e我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下+ a3 b/ h, C  i8 x( A# u) g0 T! v
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
5 G* V) p* N" u
  B$ `) J. j' m* \# u2 r
是不是需要在DSP.CFG中进行配置
. Y# ?8 }& u4 y3 ~# n我现在的配置为
8 O% r: z; C) q# H1 `, U; K* G# ^& I8 q2 A$ M
/*, T. L# k0 Z" E
*  ======== Operating System Configuration ========
7 M8 @$ [2 ^1 K */
' S' l1 w+ h# l* V% N/ j2 g
8 e4 o. K" q$ ~/* no rts heap */
* z, t& z4 `. l" vProgram.heap = 0;
# d9 [, o/ E6 M$ I4 x5 {Program.argSize = 100;  /* minimum size */
' p; w% E! I) a6 IProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大; y5 A* O3 z1 ?9 j1 {2 @

* x' W3 O2 s% Z/* create a default heap */" g- f- s# U- a' {3 T
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');7 q1 R& j+ @/ V3 B' ^: K1 w4 s
var heapMemParams = new HeapMem.Params();/ n7 U- F% u& O& q- `- W
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大: f5 |1 i' `( o+ s" }0 H
& g! `, @7 M3 c  U, ]
var Memory = xdc.useModule('xdc.runtime.Memory');
8 }0 {! B: F' p0 k2 U0 ]- a1 xMemory.defaultHeapInstance = HeapMem.create(heapMemParams);1 T, }) n/ k+ {$ ^, c+ t

' t5 W1 x0 J- i, G2 G, F/* configure System module */
+ q; u: C& Q) Y/ \0 uvar SysMin = xdc.useModule('xdc.runtime.SysMin');: z+ l1 {) X% w) F3 N
SysMin.bufSize = 0x1000;5 H5 ~! `1 ~1 z3 y* T% }
SysMin.flushAtExit = false;
( E6 l7 w4 }* S: V: d6 u' i1 B/ _; G/ m0 |- C- F* H8 L/ M% ^/ A4 {
var System = xdc.useModule('xdc.runtime.System');
! k5 `, _. w; gSystem.SupportProxy = SysMin;
2 f1 J& N2 |% d8 z/ e3 o. b' N+ t  @
9 \" L8 \0 T# g  @1 ?  {/* configure SysBios to use the lower half of Timer 1 */
8 ~7 p' x/ H5 u9 ?3 Q  \) t  t1 uvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
1 e% N- F6 t! L5 }var Clock = xdc.useModule('ti.sysbios.knl.Clock');/ U% \# `  {1 {. y9 K; ~$ l# L
Timer.timerSettings[1].master = true;
2 j4 }' ^& l, zTimer.defaultHalf = Timer.Half_LOWER;% K. ?# E" ]; e4 w9 x
Clock.timerId = 1;2 i( z: A+ @. k0 P- x  e
: `$ x2 S% m2 [$ V. ?) h0 {3 C
, h8 k* [5 D+ U9 C/ X2 Y
/*# [$ n" l, f$ ~) ?4 f
*  ======== Miscellaneous Configuration ========) W0 u1 R, [) t1 X( }" g0 T5 _
*/8 g# s+ \5 f% l9 I" g

) W: P3 F# E" [: O& @1 N/* set default diags mask */' y2 t6 }5 B! U' p6 c0 B/ k
var Diags = xdc.useModule('xdc.runtime.Diags');: ]# r& {5 c6 Y
var Defaults = xdc.useModule('xdc.runtime.Defaults');
- [( g& z9 g. Y: b/ P  C  q  j2 G+ j# k* k1 b) |8 M
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;7 s) l0 v: p. h( R
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
! U) ^, {# F4 f# R) A  g8 i7 yDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;1 O' V/ e* c+ [/ B0 u6 w) B; r
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
2 m- y% a9 A5 S( j! t8 V7 [1 ~Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */2 ~7 ?! [! |8 S+ w' r4 q, p
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
- ~1 I, n$ d: k: [& s- vDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
! N; R/ H' v5 L2 lDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;! y' Q1 m7 y7 r4 i
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;# S  A0 V! {" _
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;+ `& |0 r; p$ ~6 O
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;: p' H/ s# C' T. p( l7 Y# {. k4 y7 X+ P( @
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
" Y* ?5 {$ }7 ^- t7 M# U7 M& N  zDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
1 B5 l4 Y$ o/ z0 k) t8 L- n/ LDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;) g4 \9 `- P; O) n' d# S; X. l

! f, c6 P) L5 |- l' S1 `% a: G/* override diags mask for selected modules */
. z/ ~1 Y- G3 u+ }+ @4 L. E5 a2 @xdc.useModule('xdc.runtime.Main');* I" T! T: x- v6 {
Diags.setMaskMeta(; g1 L2 V. B9 U, s
    "xdc.runtime.Main",% |4 v& I; R3 S* c5 a  q
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
& ~. I6 e: G) {/ C6 x. i    Diags.RUNTIME_ON
8 a: D' e0 B6 v);6 X$ g6 K6 E2 g6 ]2 _" P
3 t0 B' r* r( D/ i9 O
var Registry = xdc.useModule('xdc.runtime.Registry');
1 G7 n; r4 V. S! nRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
0 _# P& G5 c5 v; ORegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
0 N& S0 L$ T3 w  j  WRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;6 Z  ^$ b5 u0 o8 f: M
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;- |& A9 l, ^- M  J( b  B! O6 k6 _

" [) ^6 G" p6 [/ E) B" J/* create a logger instance */; i# X$ l3 Q) {+ a8 i# @8 I
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');2 v2 k1 F% c$ H, l
var loggerBufP = new LoggerBuf.Params();0 t$ Y) a! Q: a
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
1 n1 K$ s' Z4 U) b9 I3 iloggerBufP.bufType = LoggerBuf.BufType_FIXED;
4 [4 f7 A3 j  y5 x5 o0 Y. _5 ~
; H  T$ ^5 T/ c2 V0 V( @5 s7 ovar appLogger = LoggerBuf.create(loggerBufP);
* o) d7 ~/ H% b% h' yappLogger.instance.name = "AppLog_Core1";  R6 t3 |5 w: V, @1 M
Defaults.common$.logger = appLogger;
. w$ e) [  i3 S. r  ?" o( _% P. Y6 c" H/ JMemory.defaultHeapSize = 0x8192;   
) E/ j( ~1 z: n. f* H8 Q, dIdle.idleFxns[0] = "&LEDStatus";
, `" t$ `3 I- |. ZCache.initSize.l2Size = Cache.L2Size_32K;2 {5 E- ~# k& L$ N/ r/ ^' T

7 Q' i2 Z" n6 _8 F, i( ]
回复 支持 反对

使用道具 举报

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 */
9 ~8 }  e3 i4 k9 K4 `var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
( ^/ [+ E9 `- S" W, B/ Evar heapMemParams = new HeapMem.Params();
- y$ q" v( y- _; F& J; }; TheapMemParams.size = 0x4000;
1 z9 e/ e4 b1 O# B2 @; ~5 Q" t, \6 W: E
. O/ K  t& g% m. i2 r# evar Memory = xdc.useModule('xdc.runtime.Memory');" A6 J% D$ Q. \# @6 R6 H' d
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);, L8 o2 U1 I2 m/ S  n5 j
) Y: X& S6 I! x5 f% b' h2 L
我大约calloc  每次共计大小为5K*16bits,
4 q5 e& d) ~$ O. E) |) R而默认配置才0x4000、需要改大。: A8 F' s+ V9 O% B1 K% O# W
7 y/ r! Y; r; h5 O* H( U6 C, ~
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */4 j8 s( ~2 h, M1 R: |; _
Program.heap = 0;
0 S' q9 V, N0 Q. t  W. Q' L* DProgram.argSize = 100;  /* minimum size */
% }. |( i" M  x% I3 F/ LProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-3 22:37 , Processed in 0.044235 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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