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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构$ t) d$ m; r8 w( X# _$ F+ j
( l2 `8 d% E& w( `
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2563 S) U. t4 ]+ y& i/ p

7 r: o8 q, n. r2 ^- I其他程序段。。。。。; Y8 w" E- B4 g* n+ o0 a

0 s: @9 G) V3 m/ N: @5 m5 M   free(x_d);
  }( h1 v2 l9 A7 I5 {  D0 m7 u
9 X2 l5 \1 d' W' q2 P/ v. ]使用DSP侧单独调试功能,验证动态申请没有问题,
# l- R9 X9 s9 r& X  `
) l7 e: f+ B# {$ U6 {但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
1 e. X* g1 k( l- M3 \

7 W- t/ s: T) n5 ^  J/ q
2 F, m0 a2 M- U# ?! n6 v1 R4 A, E' a; A
* P5 F, F1 B( S5 x9 ]9 t
; I8 |5 |) N  I5 X" e6 x% K. a+ _
. ]* X0 v. C' Q. P/ p5 c4 L
! E, D6 R& U% V! C  |6 @! w$ m

* p* T. H6 m8 e$ H+ V% a( y+ V7 D& m* R4 S2 D, h
2 R+ L9 J% M. }
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
: M$ C) y* @+ C7 F. F我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
0 s/ s% @0 w: e, z# _(不过疑惑的是,为何单独DSP仿真就没有问题呢?)7 t1 ?% N- P2 b4 p0 p6 V3 ]
- w3 ~! |2 E) `& ?
是不是需要在DSP.CFG中进行配置
+ l- P0 G; A) W* x0 X/ S我现在的配置为6 V3 }- {7 {2 {4 h$ v
0 H% s3 Z1 E4 }3 W  T3 T; ]/ q
/*
" b* b$ o# _, A0 w- o; b$ O *  ======== Operating System Configuration ========/ Q. F: P8 n1 ?, s# J0 n
*/
: Y' m: ]7 P$ T) _! U, {4 Y/ c0 i7 d- _
/* no rts heap */  [: O+ Z4 S0 @+ L+ h: B
Program.heap = 0;
, U0 a1 I/ U8 n8 K# F$ \8 OProgram.argSize = 100;  /* minimum size */
/ M7 T' y2 I6 z- J* c' `' vProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大- F5 E/ p& }7 _3 I2 K  H

* M- D; y2 A# x' f1 `9 X4 H/* create a default heap */& l/ ]8 S+ c5 Z! M; A, O
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');8 l( [" e# _; l
var heapMemParams = new HeapMem.Params();. k6 Y3 A4 J$ m6 w7 ^& l* c* v
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
; i& f2 G+ i* s" w! m% F8 Z. J7 u1 d2 T4 n1 u3 e- {# r& Y
var Memory = xdc.useModule('xdc.runtime.Memory');
& |; F- b' b- Z3 N7 YMemory.defaultHeapInstance = HeapMem.create(heapMemParams);& k. q& A  O7 ]# k2 e3 f7 l
$ e- z: l( U3 W! ^. y
/* configure System module */
9 e# _) S( \; w" w; z$ Avar SysMin = xdc.useModule('xdc.runtime.SysMin');
! W. x- m! K7 b9 v" U  L5 }: |$ F3 lSysMin.bufSize = 0x1000;0 a+ M2 d! B5 d
SysMin.flushAtExit = false;
8 u+ H# O9 z, Q$ B
4 |$ ]+ h. v1 z* y0 I. gvar System = xdc.useModule('xdc.runtime.System');; k* V" _) S5 X$ h
System.SupportProxy = SysMin;9 `& V& S6 w: c: ^
: b: L5 |3 L2 @1 n, {# o
/* configure SysBios to use the lower half of Timer 1 */
- J0 I( p& i, b( E' V# x/ vvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
- w4 k2 f& c4 A) \var Clock = xdc.useModule('ti.sysbios.knl.Clock');% a$ z3 v# V. _* L: g" q
Timer.timerSettings[1].master = true;
  N7 f$ s+ j/ I3 ?1 l3 @8 YTimer.defaultHalf = Timer.Half_LOWER;
5 v$ C3 d3 t, @3 c1 H. Z/ QClock.timerId = 1;4 c7 E2 w; ]0 s; \, h* x! }

# t9 l. U% d" ~/ U' p! J
% c0 H3 Q+ a  s( c9 S/*/ \3 |1 a! U) o( D8 g" p5 ?3 v
*  ======== Miscellaneous Configuration ========
. x" ?0 C: T) _! O6 S- u */
6 F, Q% @/ G6 P- [" \& Z) B) U7 R3 y  j1 `
/* set default diags mask */
! w% }9 c+ `& _6 H# `var Diags = xdc.useModule('xdc.runtime.Diags');1 d4 C1 j( Q: {; w& R! n7 j) k% C
var Defaults = xdc.useModule('xdc.runtime.Defaults');6 v7 o& O3 o+ ^

0 q5 }! P3 n% V1 L8 o! FDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
, J& i5 K1 W! b6 H% ?9 _( qDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
0 ?1 I9 b' X3 Q- ~: yDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
; W7 o2 c' L5 u: O$ aDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
7 u7 l' }" m/ C% \- c9 gDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */% a5 Q& p: [0 ^7 _2 R: I
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
- a* T0 E4 W/ T1 `( FDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;4 K% S' X+ R0 a: s& ^- R
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;% U2 Z+ g: @8 l5 p" V
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
. {3 T7 r( x+ s2 \1 n; gDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;+ K8 r7 {$ ~2 g: u" h0 \
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;" `. \) X* z9 Z  V3 m& D( V
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;. O/ \5 d0 v0 Y, l5 Y0 K
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
* w- b, @" K, rDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;! f; A) d4 q+ ?& f

0 H8 T5 {8 e( b/* override diags mask for selected modules */
0 i4 `) o  s4 P* o9 N( q; oxdc.useModule('xdc.runtime.Main');
5 }" G; S( `* w, p* s' q9 UDiags.setMaskMeta(
7 P4 M7 d* i0 p1 {; [) e( F    "xdc.runtime.Main",
1 G' E& r6 k( h. ^/ z# u& _4 Y* f    Diags.ENTRY | Diags.EXIT | Diags.INFO,, r( Z. z# R* x4 w2 [) ~$ s
    Diags.RUNTIME_ON% Y1 v6 W* L& @, k1 V# y
);1 _* [9 P* ?- ?; v/ C5 m$ E
) E0 o  E8 j3 j( m0 P6 C
var Registry = xdc.useModule('xdc.runtime.Registry');
1 W* k* ?6 J8 k  k) |$ MRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;0 Y; P) w9 p4 d3 N1 f/ K7 y
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;( S& x; R) b' _% U0 l  L
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;: |2 ~/ Y! z8 C: D2 e, i0 m
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
2 W& G# i# I' A3 ^# A6 C
! c6 M8 }( K3 Y* t: ~" V/* create a logger instance */! y, {+ a5 d+ B4 v1 ]! k7 u5 s$ u
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');7 u, ~' I+ D) r
var loggerBufP = new LoggerBuf.Params();
4 z' r6 }" ^5 g1 r1 d9 @. mloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
+ \4 ~8 h. Z! q* V3 s* v5 NloggerBufP.bufType = LoggerBuf.BufType_FIXED;- `* P% M! r5 d+ y2 ^
$ ~7 `- n) n2 k+ _& R5 G8 [* E" Y
var appLogger = LoggerBuf.create(loggerBufP);
0 x1 _  r" Y1 N6 M; s- {; bappLogger.instance.name = "AppLog_Core1";  f3 t0 ?3 F2 f5 d  J$ h
Defaults.common$.logger = appLogger;* E' b% w+ _5 O' G# S( l9 Z- n
Memory.defaultHeapSize = 0x8192;    - w0 c  y8 b0 v, }# C
Idle.idleFxns[0] = "&LEDStatus";
6 e8 z. [9 n/ A1 JCache.initSize.l2Size = Cache.L2Size_32K;
4 {, c* I; I. W( Z2 P; V6 r9 K! C3 a2 x
回复 支持 反对

使用道具 举报

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 */! k1 ?  f# w& c7 [  r' U- `/ u
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
2 T* [  |' N+ @, c$ Dvar heapMemParams = new HeapMem.Params();
$ F# v' U6 M6 ]" _0 o+ W. lheapMemParams.size = 0x4000;; R% r/ T4 {; J  A

, \0 U: c# `' b7 X. G- p4 k# ~8 svar Memory = xdc.useModule('xdc.runtime.Memory');+ J, h3 I. |' \; P
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);9 i& G% l! T7 o+ o6 j( {

; ^/ n" K) `) V% L我大约calloc  每次共计大小为5K*16bits,- v5 l8 L: s, D3 g; ?+ `
而默认配置才0x4000、需要改大。& u9 g6 c& G# T" ^

! _: C: m; e6 K$ b; {( a* C( X5 \1 u
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
, J" I  ?0 h& g7 G$ |, {/ RProgram.heap = 0;
. a! b6 K: r$ S9 S# l* t2 |/ qProgram.argSize = 100;  /* minimum size */' j+ Q. Z  n/ r$ k6 y3 r5 N, R
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-13 13:11 , Processed in 0.049170 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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