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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
# u7 i5 i. ^; z
9 G$ t8 J/ i: _  X, K1 ^& f    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256) v( H4 [$ q1 O( O! X
  D, B9 e" X+ R7 j
其他程序段。。。。。
2 [6 C3 |8 u8 P% { 7 y% s2 x( g( D* G, C1 }3 X' l
   free(x_d);# K2 C0 ?' Z" O$ y3 E8 o' H+ j5 f6 S
" s' ^  s' ]' }, K
使用DSP侧单独调试功能,验证动态申请没有问题,8 m' Z8 I4 B3 N
( p* r2 r, T# [' P! M
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
5 K' \' r) i$ v6 C- }

  O( z- L. S8 q5 V6 T% k' }2 {/ j% ~1 I% y8 X* }; c9 ?
4 J6 ?' I3 H6 x# b6 R

) ]3 M! P* q/ F" ?
* w  \9 c5 b6 c7 ~1 H7 h! S7 q: K1 h7 p; W. ^4 R

$ _# H# Y. G# z. t# H8 \; x
' D. w. r) |5 C) m5 v3 {3 j2 u3 X- m- N( {

1 _1 r, e+ h! u! E5 G% R
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明9 W3 n* y( V8 B0 }+ @! B2 O% h
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
) G2 F+ }( J2 `: C# K(不过疑惑的是,为何单独DSP仿真就没有问题呢?)6 Q/ K: r, C7 p4 l2 y/ g

) v. y; i+ V# k是不是需要在DSP.CFG中进行配置& d9 o. ~/ U* J0 A5 x/ P! G$ Z
我现在的配置为# m/ p! n3 T1 u/ @9 X

! a. V/ t6 [! E% O$ B/*
. d( _' z- F6 R8 m, c& ~ *  ======== Operating System Configuration ========$ R. s3 H& Z9 ?9 N* {6 e% [+ \
*/
  W: F0 r2 |; n# A
" }0 I, g/ F8 x) S% a0 m8 j/* no rts heap */
& v! H- F+ [# t# _$ g9 s/ h  o8 }Program.heap = 0;
6 N0 i8 e( ?% ]' l! IProgram.argSize = 100;  /* minimum size */
, D( U; C0 w! {1 ?, FProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大; o0 ~, h; I. C6 k. a4 L5 [
! C% f% H4 n( S( C
/* create a default heap */
  z/ Z2 W& X! ^; R4 W. h  D9 v/ zvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');0 k/ P& g3 A, r# a. x
var heapMemParams = new HeapMem.Params();6 |/ D/ y( E+ K% H1 x
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大) l" a7 d" a5 v- ~. l
3 p  S# C. B9 G, U
var Memory = xdc.useModule('xdc.runtime.Memory');3 q7 v. G3 q" P5 z
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);  V+ x1 e/ r( k+ i% o4 J( @- G
: B( o$ x7 d8 l0 U
/* configure System module */
" o$ R8 h, n, J' d8 Ovar SysMin = xdc.useModule('xdc.runtime.SysMin');) }/ U6 ], n6 F  i  W, W  a% C
SysMin.bufSize = 0x1000;
) {9 A6 Q! b0 y1 U8 F: C; J. JSysMin.flushAtExit = false;
& @$ _3 C" y0 _$ W! H( K3 j8 I: e! L: ^. z$ _+ s+ |- o0 C
var System = xdc.useModule('xdc.runtime.System');
0 z8 i6 ~* I: ]/ n# \3 @9 BSystem.SupportProxy = SysMin;' z, a" C  o* _" c
. c# j5 H/ R* X' M' v; ?- `! f
/* configure SysBios to use the lower half of Timer 1 */
/ ~+ q7 o2 J) }* e8 }  Bvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
- K; I0 g# q1 n# B) K0 kvar Clock = xdc.useModule('ti.sysbios.knl.Clock');9 b7 c* M2 T  Z, W1 r
Timer.timerSettings[1].master = true;$ u# X( ?( ^& k+ t2 \
Timer.defaultHalf = Timer.Half_LOWER;
: ]7 k" @/ ~* P4 |  WClock.timerId = 1;
; L# a' I  X* k+ R& Y4 ?# Z/ h
1 B0 m5 ^9 r+ p
" V5 y% G4 S( V/*
& h6 N+ k. R9 @3 p1 ?7 M6 L  X *  ======== Miscellaneous Configuration ========
$ l1 k6 a" Y, g. Q, u+ j) I) O */
2 V4 m' E0 t" Y% m4 [  s: p, }" p) X0 A1 l0 W4 ~+ G
/* set default diags mask */
2 T+ Q+ o( s/ j. z: A  h- P- Ovar Diags = xdc.useModule('xdc.runtime.Diags');
; o. Q9 x6 ~2 |0 ]# cvar Defaults = xdc.useModule('xdc.runtime.Defaults');
" N' B, H8 n6 z6 R
; ^- d3 k8 z2 sDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
. ]/ x+ U4 e4 T0 M6 [Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
: d) b2 v# }) k# F7 hDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;+ P# B- Y( g( c
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */3 A' A5 s" l, M) `! f% H% ?
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */' [" ?4 ?: f+ E# f
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;4 F; z, u% f  P1 s/ }3 _+ _% r
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;. L) Z% P, J1 X0 w! R7 A0 K5 o
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
! ?2 W% ~" A# C; u2 g2 d$ m' |Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;8 e9 X4 I6 K- M* U6 |
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
8 B; R7 b1 j9 S: ]Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
/ f5 t) a+ s# b, e1 X, C; Y/ GDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;2 @5 [$ u; W. H/ B
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;; [# A5 U; r( Y4 j9 }
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;6 v5 @& t; f  A' T( w
5 x" K0 {5 ]7 c+ r& e- o# s5 M
/* override diags mask for selected modules */$ A9 k0 U8 Q2 K$ s- f( M0 V$ E7 B
xdc.useModule('xdc.runtime.Main');
& V& o1 M; e4 l; U( d, g( DDiags.setMaskMeta(; n0 W7 [7 v9 K1 s6 t
    "xdc.runtime.Main",
: I) Q! F: P8 \1 D; J2 n# c    Diags.ENTRY | Diags.EXIT | Diags.INFO,5 z" h" h' @5 u6 s7 q
    Diags.RUNTIME_ON* h3 ^! s2 Q' A& b  Y0 i; W
);
! Q( K  t  U3 D! a8 N5 z, Q6 x' L! C( q. h5 P3 ]- O
var Registry = xdc.useModule('xdc.runtime.Registry');
5 ^& f0 P: f' P% nRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;: C) M) J0 A( r
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;. q' ]- a, b6 M5 |, g
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
2 {& ]! X/ F; P6 J; H. pRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
5 o- Q' E1 _+ M9 f. x7 Z+ z% k3 p% U# h, D: O9 o1 F
/* create a logger instance */( y. h) n0 a" L% x$ W2 e  h+ y  o, ?
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');- z6 `" x; a& e3 A3 |
var loggerBufP = new LoggerBuf.Params();
- b7 a5 l: k% t& `loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */  Z% \. @0 j+ A! I; w- \
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
! {, @6 j, I+ a8 u6 B9 }, C* q
9 S+ Q# M% S& z$ J5 Cvar appLogger = LoggerBuf.create(loggerBufP);
1 \9 y7 n1 d/ k: gappLogger.instance.name = "AppLog_Core1";# e6 ?( A  k: ?
Defaults.common$.logger = appLogger;+ p7 z# z' p; h1 @4 L
Memory.defaultHeapSize = 0x8192;    ( [% q) `( x) @
Idle.idleFxns[0] = "&LEDStatus";
% E9 b6 v3 }; y' r; M1 YCache.initSize.l2Size = Cache.L2Size_32K;& V% {* _3 o* [& o, U" T7 M8 D

+ _$ r0 h  z5 T
回复 支持 反对

使用道具 举报

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 G' `5 B( i: U3 _7 K4 Zvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');- O/ y2 T. {8 p- f/ Q) u
var heapMemParams = new HeapMem.Params();. C" y. t" I$ C: O: a
heapMemParams.size = 0x4000;3 t+ C7 P/ I& T- \
- M+ o5 e0 \/ @
var Memory = xdc.useModule('xdc.runtime.Memory');
' k4 y  N) s% fMemory.defaultHeapInstance = HeapMem.create(heapMemParams);! P5 Z2 Q8 }3 y# F, X4 V5 {
/ H, Q. B, h: a! O( M5 c
我大约calloc  每次共计大小为5K*16bits,2 Z& I9 Z; w$ E( D
而默认配置才0x4000、需要改大。, W0 L3 H( M' x  d( j: n3 r9 @+ s
, ]9 i2 a0 B1 g
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */2 V  D- u$ I+ b; q* U
Program.heap = 0;
. T( F  \1 v" v1 w+ f5 J* tProgram.argSize = 100;  /* minimum size */, r/ g* _8 _$ {1 T! [# 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-2-21 03:54 , Processed in 0.041860 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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