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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
) V' p7 f2 g8 ~7 ]8 j8 s6 d5 i  V2 I) ?$ y; L* N8 r
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256% ^  W6 |% X- y' L* H
4 e, v+ s! A! t% c' J/ g4 T$ `
其他程序段。。。。。
$ u5 z6 i" R5 }0 x $ @8 g2 o: W% ?3 u+ U( I
   free(x_d);
- U! ?' s% Q! W* t; F. w4 w% f- N  f9 O+ C( `4 t
使用DSP侧单独调试功能,验证动态申请没有问题,
6 ]! D% Y: x/ A" P8 Y$ L; F% X; G/ `  E+ D
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。( ~. i% V& `, I+ C# l* I' k
2 A- {6 [$ ~1 B6 s9 ]

" F1 m( T6 }9 L1 U- _* T6 R4 d! O2 R/ N2 D7 u% s" z$ q

- H; V$ J# O5 F9 |8 M' h, R3 D# I9 H/ E) z: X" b, u

+ q) o: X1 @. Q( k* t, V/ Z8 d3 I5 J1 {0 M) s1 C1 _0 x

' d5 ^+ R& g% W: A7 H* U% y: V/ K# a: Y
4 B+ c$ I" a- Z. C& b$ h! s1 v  P) A% u
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
$ w  O$ n# _. x$ d) l$ \: v  i* `我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
  Y# l4 a) R) `(不过疑惑的是,为何单独DSP仿真就没有问题呢?)6 t4 S6 j3 G+ ?/ L

! H9 m2 S4 Z9 s是不是需要在DSP.CFG中进行配置; Y! O" B/ N8 E0 N( p
我现在的配置为
0 Q/ c; `$ ~- B1 X0 A% K9 y
7 [, V3 R" j# S3 T, ~/ H0 j/*
+ F2 J5 G# {( v3 P9 E' h. n1 x' I *  ======== Operating System Configuration ========
0 o" v" J; N4 l */
- K4 R2 J, V7 F# n
$ U% Q: N  a+ \/ }6 c- M* P/* no rts heap */
4 w8 c( \5 N0 |3 M/ x8 a/ k" H( vProgram.heap = 0;# R/ B6 n. M! s5 B: k5 q3 C
Program.argSize = 100;  /* minimum size */1 y8 Z0 g' u4 a$ n, y
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
1 q/ S0 p+ l+ S' j0 d. {3 z0 Y
) ~3 V2 b* O) Q) v& q/* create a default heap */
+ ~0 A/ S* t7 e: A) evar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
/ d- e0 [- ?* @, b5 P, Qvar heapMemParams = new HeapMem.Params();4 k8 C7 R- X; ^9 q
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大+ B/ f- D. L0 b/ @% {' u& I" d$ A
3 x4 j- L; T- ~8 Z' n* v
var Memory = xdc.useModule('xdc.runtime.Memory');* G( w; D2 T! D7 m  S% i; F
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);, ^/ W; h5 C0 T  p7 ~: H

$ |/ k* }( F, A3 ?/* configure System module */
* w4 u" s  r; _var SysMin = xdc.useModule('xdc.runtime.SysMin');
3 C1 E% U8 g$ o. G& P: o9 ZSysMin.bufSize = 0x1000;
# @# |) u* i, g1 _" l1 q" d" MSysMin.flushAtExit = false;
& h1 |/ @* K* n% i: X
+ H& l& R, }0 W  _3 Bvar System = xdc.useModule('xdc.runtime.System');7 p& n6 G5 ~" F3 u, @3 [2 G
System.SupportProxy = SysMin;
3 x; n; D# X) s4 D( i$ f$ e  B
. i/ f. \! X" [! A/* configure SysBios to use the lower half of Timer 1 */
! ~1 S" @! x& q1 fvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
: [2 _4 w$ K; Q# [3 pvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
4 _+ C$ i/ }! }- O& m+ D% PTimer.timerSettings[1].master = true;* c* {' h; @$ f  X% h0 J
Timer.defaultHalf = Timer.Half_LOWER;5 X3 K1 V# a; {. A7 W
Clock.timerId = 1;3 r" k6 \- j& Q. ?& x
5 g/ g$ ^* e& M

) ?) `8 c4 ~' X9 e/*
$ B/ p% \) j; B& W  [" |3 e) P' ^ *  ======== Miscellaneous Configuration ========5 I$ X8 f; i- [( a1 N( _
*/& i  m! i6 W$ g6 Q0 U, n  j
" c+ D2 n7 h, [; s* \
/* set default diags mask */6 y# r4 D6 @1 ]0 [5 D3 G( T; l
var Diags = xdc.useModule('xdc.runtime.Diags');& u7 n6 z! T' c' J* a# o1 o. X& h
var Defaults = xdc.useModule('xdc.runtime.Defaults');
, D2 k' o4 b% a8 Z  ^" \5 `0 v' v
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
, s* x3 Y* x# V! N% h( @Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
4 l! |1 k* V' ZDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;6 @/ c8 D+ l* \. m+ Q
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
# r6 w% l+ g5 v4 _Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */0 y( k; t: R3 ^2 K0 Z
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;2 n/ n: A+ r/ u! `- N
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
0 V9 s" H$ K: Q( X+ O2 Y% \Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
% b$ q7 t4 M4 j  _9 MDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;6 ?, U4 K# W9 Y
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;% b2 I, a- R# e$ W" F' z3 p1 J: M
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;& _4 T/ P9 K; d$ G, s
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
3 v/ J9 H+ D9 B+ d3 N0 C1 ~9 U/ jDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;  }; b7 ?. o  H5 t7 S! T/ K
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;! t: e  |! K- w1 u3 P

  a& m; T6 s/ `: f3 O' h/* override diags mask for selected modules */; |- H- r5 w7 W* t
xdc.useModule('xdc.runtime.Main');
* j$ N2 s, d1 n  ~3 aDiags.setMaskMeta(
8 V6 L4 {6 g7 L! O  D9 }* R: F    "xdc.runtime.Main",
" y- w! c. Y7 P+ i  O& t+ L; t0 b    Diags.ENTRY | Diags.EXIT | Diags.INFO,/ _1 w: k+ t" ~4 q" u
    Diags.RUNTIME_ON
  g8 Z: i: o; R0 q- y  o1 }7 H% x);8 y2 u5 }5 T, |/ K0 q' ]& ^

- w2 L0 h( ?9 Z& e- Fvar Registry = xdc.useModule('xdc.runtime.Registry');3 \, [& \! L9 u3 F, u/ \* I2 B
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
+ u6 y9 G$ h( U+ x- w. O2 iRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;% N8 i! ?7 W& A  a! [
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;; u7 P1 a$ d2 D& s$ L) B
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;: Z+ v- {0 w: Z  ]- T! y: C
6 x5 q$ T% |6 k2 w
/* create a logger instance */* E1 P. z+ ]! o( s+ e8 \' _- \
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');5 u* y1 j6 E* [3 }
var loggerBufP = new LoggerBuf.Params();" V0 i$ J; v% n% j
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */9 x7 @$ }2 B4 U2 |2 A
loggerBufP.bufType = LoggerBuf.BufType_FIXED;/ v& T2 l0 x$ x

5 R4 y3 O( S7 Y9 F+ M. {var appLogger = LoggerBuf.create(loggerBufP);
6 B+ B4 S& |% R: Q7 mappLogger.instance.name = "AppLog_Core1";: Y  n. q, ?7 v5 o
Defaults.common$.logger = appLogger;
( q! R! H1 R* K/ G* j4 rMemory.defaultHeapSize = 0x8192;    ) d" m) v8 K1 n9 x. c
Idle.idleFxns[0] = "&LEDStatus";  z! O8 Y9 l% A0 x
Cache.initSize.l2Size = Cache.L2Size_32K;
" u1 J  v5 C0 J0 t5 a1 {
- S7 O( ~# \' e9 b- u
回复 支持 反对

使用道具 举报

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 */
& G7 J8 Z! K4 L* ^5 S6 m6 k7 g& M3 avar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
% A  V* ]& K* f3 `7 a/ j/ {5 Ovar heapMemParams = new HeapMem.Params();
* K' Y+ H+ {3 u5 Q# b3 gheapMemParams.size = 0x4000;
7 P) g8 Y% {. S1 C0 d% w( Q0 V! n0 X. L  O: }- l2 V+ X
var Memory = xdc.useModule('xdc.runtime.Memory');
. o2 \4 j7 U& @+ _9 OMemory.defaultHeapInstance = HeapMem.create(heapMemParams);3 C8 ~1 E9 X; H# s; g. M: X

4 P# G, C' H) a, b7 m我大约calloc  每次共计大小为5K*16bits,% V4 {" Y. w7 \
而默认配置才0x4000、需要改大。
( J1 I: J1 K( A& T2 I6 F* F# L4 S0 P8 t
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */6 H+ e5 Z, x% p# U1 x$ A
Program.heap = 0;
& F$ L6 Z+ u! @0 O2 J9 ^& GProgram.argSize = 100;  /* minimum size */  p; R4 z* o) E0 h  y( ?
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-2 16:54 , Processed in 0.042743 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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