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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
' |. X9 r2 X; ~- J. [) X8 F2 j4 {
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256* A' K. Z0 p7 Y' ]6 N6 @6 F

+ r  v/ w0 b; k其他程序段。。。。。  L% u0 ~/ g6 b
: A$ f' p. A: M
   free(x_d);
0 {1 A. \- a3 z6 w7 f
4 C8 D4 M. k6 Y5 S使用DSP侧单独调试功能,验证动态申请没有问题,
" S  z2 M. t' V+ |7 H, C/ t% O
: E7 v0 _/ y. c/ ]/ r- Y但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
  [8 o* R4 b9 j  b' ]9 W3 l5 e4 e
" b. `4 ]9 d4 m" {# s  `: ~

" P2 p0 o: y# q) U. @: k1 h, d( ~! A# \" ?# V) \: X8 [. f4 a; [$ U

9 `3 L4 b8 V0 M6 v! B. }5 H1 Q, c- \. F1 @0 A" p

" [% d( s+ h( g2 W7 v* r8 H8 z7 ~' Q. C( o& W+ s
* W; f: `9 M  B2 g: u# X* |
* _) F" Y1 Y& M. a

6 }& p0 a# a. w& ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明  ~9 W2 j2 K2 n) i  m. Y$ E
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下  G: s" V: V7 n6 L1 k" {
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)1 L# i. i1 S) d6 q  F

8 O/ i6 V8 h- c是不是需要在DSP.CFG中进行配置
7 h2 V& p6 @# z" z( J我现在的配置为$ _+ q& C- d5 S8 q3 g
$ r7 U1 W) |4 p: l) O) e% D* `
/*
& }& w& j: W. ?& R *  ======== Operating System Configuration ========3 o- O/ U% U$ s
*/( H' Y; g1 j( d9 G! w; \
5 [: E; A' [! B  O6 \
/* no rts heap */
; W  |& W5 u; t- k9 `' WProgram.heap = 0;2 ~' d" c0 L0 U$ T0 ?1 A
Program.argSize = 100;  /* minimum size */. a4 q8 @1 _& ~' y: u
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大0 N' C1 C) b7 ?5 |) F. p. B
" E$ \  `( D" e% c6 l  ?1 L/ E5 A" z
/* create a default heap */
, w* n3 a4 j& f" I6 a1 [# T0 A4 Xvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
% `3 g0 ]9 R/ R1 lvar heapMemParams = new HeapMem.Params();' X$ ]( ~# R+ z# {. ]7 b2 o
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
" ]% m  U4 v5 B1 o
4 q. I% |+ j! p
var Memory = xdc.useModule('xdc.runtime.Memory');
! g) O. d$ x9 P8 C& fMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
4 h: M$ h1 I& f" L! j, s. s8 @' S5 Y  M1 Q6 t+ ?( A
/* configure System module */7 [9 @( v% R" f( `, N  V/ c
var SysMin = xdc.useModule('xdc.runtime.SysMin');
% Q- D' j' @2 {* X$ F) P- _SysMin.bufSize = 0x1000;/ C  y' O+ p" x3 _4 q1 k
SysMin.flushAtExit = false;' d  W1 A) Z; L- {7 I
/ x, s9 n" p$ n6 q1 C  j0 M+ B
var System = xdc.useModule('xdc.runtime.System');
# B/ `- n; |9 F2 X5 r; FSystem.SupportProxy = SysMin;1 o8 ~$ d, y2 [* p4 i
& n, W# |5 z& Y2 h
/* configure SysBios to use the lower half of Timer 1 */
8 {4 v7 _  @: o! J9 u) x8 l% K- ]var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
; y' u2 N- d9 Z6 b- ?* Ivar Clock = xdc.useModule('ti.sysbios.knl.Clock');
) {, i5 r# B  i6 W8 dTimer.timerSettings[1].master = true;! w$ x1 a; p6 S- u4 Q) R3 y& a
Timer.defaultHalf = Timer.Half_LOWER;2 F3 r7 O& J- ]5 l
Clock.timerId = 1;! N# m* g4 Y# b9 I* w
$ U/ S0 K6 |  z  o4 M) a
) q" {. H( F2 T" A! U6 U6 b
/*1 ?7 a6 \+ \0 }
*  ======== Miscellaneous Configuration ========
4 z* m3 j6 Q1 E$ z */
. l8 J) l* p( M/ ]
7 o* Z5 i2 ?4 k8 q; W& B/* set default diags mask */) Q' x1 l  F% @2 w$ T6 a
var Diags = xdc.useModule('xdc.runtime.Diags');
/ e1 K! i( K. G9 R/ o0 E: P4 j3 o' t5 yvar Defaults = xdc.useModule('xdc.runtime.Defaults');; W& ^& Z$ t* _1 i2 [
6 z8 L4 @. f5 Z
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;5 j" G+ {$ @  A/ c+ j
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
( a, n5 d- [) ~Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;2 w; K4 l) V; O; p# b: G" t
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */( ~% O" z/ P  v) F1 |9 v: {. U
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */9 Z/ Z+ |& ~* Z, }! ~# l* v/ f
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
4 X- j- c8 i; bDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
- w. w" K$ \* M, V  o( XDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
+ Z5 P2 A0 \5 R8 q! dDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;3 o6 y+ s$ z& w: ?4 ?
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;3 ^" Y2 m( G  I* d0 `: K, U
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
" R* S' u! O+ P% x0 zDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;  P3 D0 F  K& |- U  j3 F& u$ \
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;- f3 L( m( k! y1 t! z1 }
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;' _; J/ m* E& ~

9 U0 ^5 K3 C* g3 w% k/* override diags mask for selected modules */
. |$ E& p) o6 [% u, L& G) `: `xdc.useModule('xdc.runtime.Main');
2 ?' X% X, v1 V  |Diags.setMaskMeta(8 k  @0 s$ P5 b& r$ |
    "xdc.runtime.Main",, K5 x% C9 U8 ]+ e9 Y
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
, S4 r/ U. E' |- @6 N3 P    Diags.RUNTIME_ON
& W1 ~6 N) g! ^/ J' |& ^);" ?. Y: w6 G: r" k! K# Y& d! J1 J
. H% ?* x# b$ Z5 U; S1 ]5 O
var Registry = xdc.useModule('xdc.runtime.Registry');2 s* [, U0 q" `- h
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;3 \8 \  @% A% ^
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;3 z" I, l- J. b# j7 V
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
' P! y/ U  [8 bRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
8 c! ~! K9 _# |$ P+ t  l
  V8 x+ Y8 Q( ~/ S; {& w2 B6 V6 R; q/* create a logger instance */
8 y; I0 S7 |0 N/ xvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
) Z1 @( ^8 @# yvar loggerBufP = new LoggerBuf.Params();
# _8 Z0 [5 f+ o% m, QloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
$ m4 j  p0 Z! p9 A3 C( iloggerBufP.bufType = LoggerBuf.BufType_FIXED;
3 D/ f  `, l2 K2 v; p7 t. B/ f' m, d6 ~6 W3 a" ?0 z
var appLogger = LoggerBuf.create(loggerBufP);( p, A# z4 P: ]5 Y2 ]
appLogger.instance.name = "AppLog_Core1";, h; j- a$ ]2 v/ l+ B
Defaults.common$.logger = appLogger;( x4 ~& E- [7 V1 j4 y! A6 h
Memory.defaultHeapSize = 0x8192;   
$ r' A; M& w1 `9 I; P) UIdle.idleFxns[0] = "&LEDStatus";0 S. W4 n) j$ d3 T
Cache.initSize.l2Size = Cache.L2Size_32K;
2 r: f2 |3 x3 s) f+ i  A0 f, |4 l2 m% Q% i  a8 q
回复 支持 反对

使用道具 举报

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 */
2 q3 h# \+ D3 X" y, w5 pvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
; U, x+ r4 I1 @  evar heapMemParams = new HeapMem.Params();
) n; M8 M9 o# Q3 C" jheapMemParams.size = 0x4000;
" Q, H5 U* M6 q& q+ k$ h+ G
+ x( r# }3 Y7 F  W# i, Zvar Memory = xdc.useModule('xdc.runtime.Memory');# U2 U5 Z: S5 [; Q; d0 n: Q, `# B
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
5 L4 A' {0 m* ^4 Z' Y
* X8 D& e% x7 B. g6 F( S6 C我大约calloc  每次共计大小为5K*16bits,
+ G+ [2 m$ U- i8 s- m而默认配置才0x4000、需要改大。
" b. J- f$ p( U2 j1 N8 l4 _. M* G7 H) H+ f  \" V
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */' c5 O9 d" C& Y
Program.heap = 0;
. Z/ Y5 n0 u+ EProgram.argSize = 100;  /* minimum size */* B( w* j5 ~  a: o& B4 C
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-4 05:52 , Processed in 0.043575 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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