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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
% D8 V+ u& y1 J: X; d7 ]: U, Z. B" R0 z8 U  K3 [2 E2 o
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
/ R2 q. G& Q) E# i" b
. J$ O: X0 a5 z- S其他程序段。。。。。
; d7 k  f# d3 ?8 r) F# \9 w% R9 g $ f" K; {6 Z4 f% N" e5 P
   free(x_d);
, Q+ K% C7 U9 y: R: b2 d/ J
0 S! ?# G2 J' z0 T( S  h使用DSP侧单独调试功能,验证动态申请没有问题,+ A% Y" k* v5 F! Z

7 W# T5 E, J% B& b# E3 C但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
7 Y+ ^; [. O* P5 {; B9 f: V( c

; Q. E3 w# }$ P, t: Q% [4 p# H' A7 ?

5 S  f& Z& m6 Q6 v. ^+ D9 p+ i0 V: I# y+ v& S- M7 W. Q$ X
5 ]3 S. t# O6 `  b

$ }( j1 v8 e$ M& P+ l6 K3 C- b8 C1 g9 U, Q; r

3 \" L  x+ B7 [- V7 y7 s' H; m" Q6 @9 H9 h8 n: X; A5 M7 m

: p- H9 F1 ]0 G. g! U
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
* h: n  w2 Z% p2 p我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
/ z2 n: Y: Z7 n# F, F(不过疑惑的是,为何单独DSP仿真就没有问题呢?)! T  I$ G% b2 E. f

- f* N$ F$ {6 p是不是需要在DSP.CFG中进行配置
6 o9 U5 B8 G' i& L- j我现在的配置为8 S3 g' C; h/ G" A# W" `

* O% w6 }9 ?( X/ H6 a! M/*
; N' ~# |3 D# R% t3 h0 r2 C- t *  ======== Operating System Configuration ========0 ?1 ^' C) Y9 v4 P3 e
*/+ p. {" @: _8 u0 ?

$ ]2 B/ X  N& l! r2 Y' O/* no rts heap */
, z' J4 T% Q0 F9 S& K: ~Program.heap = 0;
/ X- K. Q. W0 P( a5 X5 gProgram.argSize = 100;  /* minimum size */
+ B' C$ F6 e  R1 W! G; PProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
3 m4 v8 j# {$ t3 C+ D* N3 K
" f- r' Z1 B  I/* create a default heap */6 l' P) W: e4 C/ Y2 T
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');* P% t! V! _+ y0 u) e+ Z3 {% ^
var heapMemParams = new HeapMem.Params();4 R: G/ S2 S3 U; Z: W: I$ ]- x
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大  X6 C2 ~3 {" B. N* k

; ^* x  l) Z3 E
var Memory = xdc.useModule('xdc.runtime.Memory');; I/ {; D/ g$ g. U2 ]+ c. h/ c
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
+ l/ t: Z1 r7 N: h) i5 |
0 K. V2 A) A0 w* C, u2 ?2 _/* configure System module */% E. Z/ A0 k3 v+ h
var SysMin = xdc.useModule('xdc.runtime.SysMin');
7 N- p, H& G" ~+ F- VSysMin.bufSize = 0x1000;
8 O& E" a/ W0 o6 \0 z( }! SSysMin.flushAtExit = false;  P6 S7 @5 d3 e- J' c# r% X
& l; n# s0 V8 k& p2 `( j
var System = xdc.useModule('xdc.runtime.System');! i7 W" G% A0 {$ v( Z; h" ~
System.SupportProxy = SysMin;6 X: e" n! d& r6 L8 ?1 o) E
; ^2 T8 `/ Z* M7 X# C; X/ M
/* configure SysBios to use the lower half of Timer 1 */
9 I% p6 K' `+ w$ ~, ~  y3 C9 ?" L2 yvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');5 a* X1 N/ c; J
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
* y2 h& m7 j& }1 Z/ w& QTimer.timerSettings[1].master = true;; o1 a3 ], v. s% q+ h+ Q/ ^" T
Timer.defaultHalf = Timer.Half_LOWER;
  W9 \# E0 R0 X- r" p  u* T* qClock.timerId = 1;" e) T% o; e' j& x6 D' _/ F" X

' ~. \, V& k, B5 z9 m4 f0 r. I& `1 u4 D7 w+ t( H
/*9 c' r0 M0 u: t9 b. P3 Y
*  ======== Miscellaneous Configuration ========
7 _' S# d0 p1 U  p5 c+ d *// V3 _% F  T! R/ F7 C

* W, \: M4 d3 t. B+ U; y/* set default diags mask */3 v( x4 G% x% b
var Diags = xdc.useModule('xdc.runtime.Diags');
' n3 |' J3 K3 b+ M1 ]var Defaults = xdc.useModule('xdc.runtime.Defaults');
5 G0 q+ }% s" Y" G0 [9 L1 ^
" {3 W6 v  v9 O( u( i0 VDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;: P+ h% }- a% X' B
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
8 L7 P. R0 x6 N& a9 J; o/ n! GDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;4 r2 M: v* }) F" L
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */* U, l3 l! r6 S! ?. x
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */  z1 H2 d0 d1 _! j- o  ]8 |
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
/ ^2 Y/ N3 Y9 I: f$ tDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;' [' s( x* z" B- ?+ f
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
7 q7 {( k& ]1 o+ F+ K5 {Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;$ D6 @# B* Q2 r! V8 }4 z- Z% O6 u
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
2 V9 {! F7 Q6 xDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;- ^. }* K4 s' \! Q* \2 {) l
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;) a; k6 c: V4 o% x
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;1 M* z: v9 F( L& w# Q) h& `- C
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;7 ~8 W4 m, m6 V8 Q4 m
0 j$ P1 G9 i# I
/* override diags mask for selected modules */9 k8 R! e; h( b# K6 k
xdc.useModule('xdc.runtime.Main');
- W. x- P. Y0 ^+ ?Diags.setMaskMeta(/ x* ~5 h- B$ h: s) U6 M
    "xdc.runtime.Main",
( D' }/ k: z% x, a' \5 y' J    Diags.ENTRY | Diags.EXIT | Diags.INFO,/ P6 n( g* h2 m
    Diags.RUNTIME_ON
: t8 l1 s1 j! O);% l$ y3 e' J# a% t  P8 e$ M0 E, w3 C
) V8 h. H# q' u0 e2 L
var Registry = xdc.useModule('xdc.runtime.Registry');& g/ t( }9 d; R; o) j, l
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;* r6 p" O" P4 {7 E
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
% O) i0 [- f. ^% n# VRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;1 I; I' n% C( C- R( d
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
, ^6 Z$ {( Q2 [: d3 f
9 n9 G3 k! M+ [' A& r/* create a logger instance */& K- a3 t4 P) S" j( P- e
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');* r8 O7 v6 f2 `- M; u
var loggerBufP = new LoggerBuf.Params();
3 H. k% u" Y5 a. f# J; xloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
& ~1 Z1 U3 u7 J. X+ K2 @7 wloggerBufP.bufType = LoggerBuf.BufType_FIXED;) }0 L+ \* I% q. n" J3 c! z* {
" v: a: i( x4 v0 J/ j' K# Q) X4 P
var appLogger = LoggerBuf.create(loggerBufP);
* w* |+ Z6 f4 @* c: \( ?$ iappLogger.instance.name = "AppLog_Core1";
! I2 `) g$ U2 s) c  i4 TDefaults.common$.logger = appLogger;% C# }/ J$ w( D1 T, t
Memory.defaultHeapSize = 0x8192;   
2 K# B% Z. A; m9 C- V6 j; N  \) hIdle.idleFxns[0] = "&LEDStatus";
% N; _2 S" D) y7 ?8 m: W; dCache.initSize.l2Size = Cache.L2Size_32K;. E. U# g' U. }2 z9 h/ K

6 c. T# E" O7 d% c
回复 支持 反对

使用道具 举报

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 */
4 [. T! E* m- Q/ J2 j6 W" vvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');0 y  I/ ~2 {* s$ @
var heapMemParams = new HeapMem.Params();; t. D6 I* K3 _
heapMemParams.size = 0x4000;0 h$ n; l; c( u, H
& F9 ^0 A. h6 G/ |- T# s
var Memory = xdc.useModule('xdc.runtime.Memory');
: \* I$ V) ]9 x" p0 [: EMemory.defaultHeapInstance = HeapMem.create(heapMemParams);) W0 C: t* f9 f  H, E! A( v5 A2 @
- z  |3 n4 p8 U6 |7 ?
我大约calloc  每次共计大小为5K*16bits,7 _# s% Z" m/ T$ Y
而默认配置才0x4000、需要改大。5 i4 O* B* W$ V9 N% \, y# R
* y+ Z' Q- X- L: x# Q4 R
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */  m; b3 Q# ?/ D7 z
Program.heap = 0;3 \+ `: }" F5 g; n
Program.argSize = 100;  /* minimum size */
0 C' |0 J, x4 L6 W4 z3 F8 KProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-13 17:08 , Processed in 0.043804 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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