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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构) G3 [0 N/ _8 K# {$ d1 L0 K
3 k$ i, X2 w# @, @0 K! N# W# S
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
* ~; W6 C1 ]. |8 t7 d# O' O* J6 ?8 i& O7 N9 S
其他程序段。。。。。" u6 K. P8 X- C9 Z6 H

: R. N" ^. m' r) y, d1 _  z8 Q   free(x_d);
+ H6 X, ^1 `% F% ^% F' X. N
! L$ k1 T9 d% d9 U" c/ P使用DSP侧单独调试功能,验证动态申请没有问题,( x( y7 V, a: \2 p2 |

5 D+ h% p; j" y8 T# v4 e但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
5 W9 I- w. O; A* {2 Y$ i( ^& M' y( w" }2 Y" L
/ `, `1 @" n1 p* t; m+ B8 {
# s0 m3 m; C+ j, K
% M3 o8 b  J  B& ]: b0 r# N
  H4 I! ^( ~+ n, ^7 V/ _4 H1 t# ]" Z

' R. A2 d. E/ p: p9 n" s( N& `9 Z4 }
" B  y+ D! G) P$ C8 S7 g0 L' e
) v# ?. k4 v; G
/ T. f' m' q4 c- [( H; }0 y3 o! Q1 V$ o& q4 j

2 I* `* I2 F: C( U
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
- v6 B5 e0 R2 I) Z5 R$ A! c7 ]" h我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下, `  Y( \9 I" t9 K1 A2 {- \8 L6 k
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
( _" v+ K% }; [$ v

2 A& b% K, P; H, S* \$ S4 ~是不是需要在DSP.CFG中进行配置1 B* @8 `3 O  \7 z( M
我现在的配置为
1 s' J/ R$ V; g! W' h: ?# x( M% J1 q0 k# d3 j" n' ?* D  O
/*
; N- U/ x0 j7 M) n/ z! ]0 s *  ======== Operating System Configuration ========
; Z- r+ S) t% P2 _! c, X$ x */
$ K/ R6 {! O) P& z& Q+ T1 }8 F7 \9 ~1 J7 E" }& P) E7 V0 f( ?
/* no rts heap */
$ p) j1 I; A/ c: x7 K( H3 ~3 K  iProgram.heap = 0;( |! Z$ Z; c5 Q; Q4 q, i
Program.argSize = 100;  /* minimum size */3 j/ }& i% u# f+ E, v9 R8 M
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大2 G+ w5 `% S5 x) H2 L% c
0 N% f* P6 e: t/ F% }
/* create a default heap */
& ~4 s1 D8 |% [1 H2 F. K* zvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
6 L- x& b) o* }. |$ c$ Nvar heapMemParams = new HeapMem.Params();: V0 ]1 Q6 O: V" t0 K" Y
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
- R9 @" z' F" c2 V6 R. J9 y' U5 q
+ m' z. g( i9 R- T8 u  K
var Memory = xdc.useModule('xdc.runtime.Memory');6 ~% X1 i+ o: u$ ^5 E
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
* b& K+ m* z. T7 ?) \  B
8 P, P, m3 L! C+ v9 l/* configure System module */
8 I; w6 ~' ]/ ~& Q5 J$ yvar SysMin = xdc.useModule('xdc.runtime.SysMin');
( v- D* i% K% N! ]! ?SysMin.bufSize = 0x1000;
: J/ j/ `: ~5 B8 f7 v2 GSysMin.flushAtExit = false;0 R9 x7 f' K( M# J* o+ b

1 W9 N' P4 y& R$ l; [' [9 d2 c1 ivar System = xdc.useModule('xdc.runtime.System');" I1 c9 {2 t- |4 r. t) [
System.SupportProxy = SysMin;
6 y1 }: Z4 x, f# I8 q
5 v( d$ J5 u3 i  g1 r/* configure SysBios to use the lower half of Timer 1 */  p1 c5 c9 U0 P- S& v. m9 |: x
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
# r/ c$ _3 X! @0 ?var Clock = xdc.useModule('ti.sysbios.knl.Clock');
" C$ E9 @8 K9 x- m" Z6 I* DTimer.timerSettings[1].master = true;
( a- g' P1 H5 O4 P7 Q  ^Timer.defaultHalf = Timer.Half_LOWER;
9 S  }( Q0 |3 g$ {5 I. uClock.timerId = 1;: e8 O7 F7 P# L% v$ ~! z0 L

0 a% s" j2 I! X7 v! Q
, y9 {9 H/ S& t* e+ ^/*5 h% U8 X+ t% y" U* G5 O
*  ======== Miscellaneous Configuration ========
' O# P8 y4 v1 M" V */  h+ M7 T# j! q0 ]! ~  \
$ x& F  N+ ?" y& j* V# }8 N
/* set default diags mask */3 K- [9 n( f7 K* S9 C' \
var Diags = xdc.useModule('xdc.runtime.Diags');% Y5 `) d2 N3 g0 t. p5 h( T
var Defaults = xdc.useModule('xdc.runtime.Defaults');
2 x: w: m8 v+ z4 n* ^% u5 F3 h( t4 r% k; q% B6 Z
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
1 K( Q1 L1 s  QDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
; u+ F4 P2 s$ X5 lDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
* d# o' l, b+ |6 pDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */% k( P2 ?5 O& p2 A. [  J
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
) i2 |+ V9 Q/ U7 ~Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;+ I0 j- e* ^* o$ }. [* w
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;/ k2 x" V; ?% W/ p
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
$ U% I3 O% X6 g7 D  ?Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;. ], k( K9 ~7 n) u3 J( n
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
0 n- a( p% h6 A+ V" c9 M+ ~Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;. w0 B1 N) R1 M' Z3 k. r& G2 S
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;) t- z; @+ {/ t' Y/ k- l
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
: ~7 E* P( a+ y/ |3 KDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
0 j/ c! ]! `7 U) O) P( X/ f
4 `: V$ X2 W5 r3 s- o/* override diags mask for selected modules */- i; u( q* ^# T- r3 Z
xdc.useModule('xdc.runtime.Main');
3 o! J1 S: A, n) U9 vDiags.setMaskMeta($ f3 ^$ C! p+ V0 t; r
    "xdc.runtime.Main",8 I8 S3 P( S# m  @- Z% h
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
& q9 d% {7 e* H" r$ F" @    Diags.RUNTIME_ON" n' }. ~" O3 P
);
4 w6 I2 k" g+ E, E2 ^$ [% w- s" D) Q+ i, \. @
var Registry = xdc.useModule('xdc.runtime.Registry');
# ~7 ?8 Z! }! l! V% ERegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
/ o+ H5 D% F, m: e5 I! yRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
& B7 ^0 f2 u  H" v/ YRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;3 e4 C1 U& w7 ?% T% ~; B/ g
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
/ C6 G. C( {: {' N* s( E1 U  [) e; w& i
/* create a logger instance */
1 J) b2 A% V) O, j! }var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
; b: G' N5 T4 T3 a4 q1 z, avar loggerBufP = new LoggerBuf.Params();' V' P. {) m" X" O7 P9 c
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */( H" |& f" o$ a  w* g; T) `9 R
loggerBufP.bufType = LoggerBuf.BufType_FIXED;, t, Z& w: d8 W) @. C# Q4 ^8 I9 M
' b* U8 I$ U. ~) ?4 C. P
var appLogger = LoggerBuf.create(loggerBufP);; ^+ n) k0 a8 j5 f( J1 z+ v3 L
appLogger.instance.name = "AppLog_Core1";
  ~% B* t! b- X8 R& S7 A6 P, u& KDefaults.common$.logger = appLogger;
9 U$ u$ }+ H- W; yMemory.defaultHeapSize = 0x8192;   
8 F& j' s3 |! I3 W" KIdle.idleFxns[0] = "&LEDStatus";# {2 N7 E' s" t6 W7 \, |
Cache.initSize.l2Size = Cache.L2Size_32K;5 b, f: _% u' q" x

' x& l2 m2 ~" }+ a1 L0 j+ x9 U  w
回复 支持 反对

使用道具 举报

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 */
6 D1 o: X4 O7 C7 b' C8 a8 `2 xvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');1 \0 u% Q0 a6 |
var heapMemParams = new HeapMem.Params();
8 p6 q9 Z$ V6 Q! v( TheapMemParams.size = 0x4000;9 b! l% ^2 e" M# {

  \6 ^. B0 T/ [  A* o6 |! R3 bvar Memory = xdc.useModule('xdc.runtime.Memory');, O. h& R. r( [( f9 o2 d8 t  O
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);4 z9 }' P; ]7 Z% n: O
6 T; ]  C* e/ T, Q
我大约calloc  每次共计大小为5K*16bits,
) M. E) o5 o6 t( P/ [! \8 f而默认配置才0x4000、需要改大。
' E8 T- d2 n9 O+ @( A9 A, G5 t, Q* K2 S9 N4 |
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */, C4 w4 l) [6 o% \) B( h* \! C
Program.heap = 0;
( ~+ Q2 M$ g, d  b) mProgram.argSize = 100;  /* minimum size */
. T( c# g$ m/ MProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-5 21:38 , Processed in 0.045051 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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