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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
1 z+ ?! c# `9 K# x3 Q3 c, ~" z6 G* M( `* }$ H' W# x
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
! K% O3 R# a6 H
) R4 }6 Z; k. L4 {7 b其他程序段。。。。。
' I& Y% ]6 V3 U0 F3 A' C
3 T9 {2 j' H' K, x( h4 W- |   free(x_d);3 ]) q+ c" ?0 L
# w' Z- |- J8 L' |6 u* s- [, B
使用DSP侧单独调试功能,验证动态申请没有问题,
8 y+ }9 S% f3 S' ~) \
" o1 i& `( F/ [9 l& s但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。; O9 H" f2 C( k0 e3 ]* C" @  z' O

# c6 ^/ D( m. z2 k- A
* ]& f  ^$ Q) N0 Q
- V' w, @2 p9 G6 c: W+ C2 f2 S6 D
3 _7 O' q! p( B0 O- \: n( b
2 y" e0 o" C: g  d$ L; H* B; _3 |. e7 W; h  ]7 V! m

7 S8 }; I- n9 [% V! F# W' ~7 @9 x7 ]
3 O5 n2 U! b3 {1 W4 T7 r# ?7 u
% G; P# L& O! }
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */" Q3 p& A# @* ?  B
Program.heap = 0;+ A+ `* A, V5 g/ P3 O% v' M5 c: ^
Program.argSize = 100;  /* minimum size */9 U9 u" J, R# B$ s
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */7 L, W$ @) W) t2 [, ~; H% u6 Y4 C( g
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');$ @( R: g% D' q  q  K' Y, u2 q" D
var heapMemParams = new HeapMem.Params();. ~6 `  v9 R& L: `7 c0 i' [
heapMemParams.size = 0x4000;
8 L9 a# q7 J: ~. S! A3 D
  R( O! i. T- V! n2 p( \3 g. `  Yvar Memory = xdc.useModule('xdc.runtime.Memory');
$ n5 @4 a; }8 Z; dMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
9 ^9 x' q4 G7 ~4 ]7 v& F7 I7 w: a; V* T- |# t# Z; }
我大约calloc  每次共计大小为5K*16bits,* |* @7 q( q0 u
而默认配置才0x4000、需要改大。
+ _, \9 s3 D) r( F8 b
) K" }& l  Z0 Q; E) e+ h- m
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明1 Z* g" R% v" G# h/ Y7 q
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
5 }( U+ [' j8 \(不过疑惑的是,为何单独DSP仿真就没有问题呢?)+ U/ M+ P  b( b' ?7 j. h; q& E
; L4 m$ b5 o, y; w9 h
是不是需要在DSP.CFG中进行配置$ e8 g+ Z! c6 Y4 D2 Y  G7 @
我现在的配置为
$ R, @% c& @) m5 H% f0 x+ P% {/ p6 b9 t: \8 W) S; E: F) u
/*
- v9 t) i2 r; [( C  A *  ======== Operating System Configuration ========% S9 N. S# {' h) v1 m6 o
*/8 d* g0 g7 o% b. Y
0 `3 i. F7 }, y! \- [0 H1 r+ T
/* no rts heap */
6 r0 e" h# d8 X0 SProgram.heap = 0;! J* M; j/ I3 D3 @; [
Program.argSize = 100;  /* minimum size */2 T8 V; C/ P, ^8 u& `" z
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大0 [; Q1 l6 z& z% p

1 e: \$ z- G" V/* create a default heap */1 o9 T! ^2 @" r! w& l
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
' u) s$ F4 `) h6 ~9 w9 `) O% Svar heapMemParams = new HeapMem.Params();, l3 l/ {0 q; v6 C" q- P
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
+ D* U4 l0 p: h( u7 P, U  X' i/ [; ?1 P  F/ ~' {
var Memory = xdc.useModule('xdc.runtime.Memory');
" I' h+ e0 J/ c8 E0 W: uMemory.defaultHeapInstance = HeapMem.create(heapMemParams);! Z! M8 {& v) v2 W6 {

- j+ ]/ a! I7 Y8 \; ]9 C/* configure System module */
3 e7 z3 \' S. c" A2 Bvar SysMin = xdc.useModule('xdc.runtime.SysMin');
2 f' O$ H9 s% }: I3 U( z3 M3 NSysMin.bufSize = 0x1000;
# |- _$ d' q5 N+ ]SysMin.flushAtExit = false;- F" r+ Z. V4 U; i& q0 b8 r
- l( K7 U6 U, K- g2 r( q+ O! z! _( W
var System = xdc.useModule('xdc.runtime.System');
" W& y8 e* @% y2 C( m1 W& u! m- ~System.SupportProxy = SysMin;/ M; }9 F- h) k3 _
8 e- g, o! ^/ U, L# k2 u
/* configure SysBios to use the lower half of Timer 1 */
/ N6 Z* Y- I( L  |! V; k2 cvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');: `0 V. ?" u; }6 T, N; d! A
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
& I+ \! i6 x6 H2 QTimer.timerSettings[1].master = true;
. g; n, {3 @8 B. C! _Timer.defaultHalf = Timer.Half_LOWER;1 S) g( C( ~: |  J/ E
Clock.timerId = 1;/ p' m! ^9 Y3 a- i3 [5 L  u: m9 D

$ f( V% L& u0 m% G. i. t0 t! _, E8 f* N7 F8 v/ m
/*1 A, e: S4 y- z  W
*  ======== Miscellaneous Configuration ========
$ M# S: K9 P* Z5 I! V- M */
0 l2 m% ?0 z, _3 A
' g: g' n- f6 N& @$ L3 y/* set default diags mask */# m& O6 g) W" a5 C
var Diags = xdc.useModule('xdc.runtime.Diags');
' G+ \+ P3 a- r+ ]  Qvar Defaults = xdc.useModule('xdc.runtime.Defaults');" D4 R/ _) u8 F  c9 V7 s+ ~
- L. L/ T9 a! E8 p& o
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
  u5 ~1 d) M6 E" tDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
  W' ^5 ^7 s  E" Q" q. E. h$ cDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
# v& f4 n& u" Z( G; M% {$ R; bDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */) h4 m. ~7 J# I/ E% w; a
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */7 ~: G! ~6 K) u4 T# w/ T7 A0 B0 }7 K; J
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;  ^1 H' {6 I/ X* e$ {
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;) ~  F9 f& z0 V3 q1 _1 ]; ]
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
$ C! J% T# U7 B3 ADefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;* M" j' H1 k: e: p
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;8 \  P$ }! u; D) X6 X4 b% u  N6 m- u
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
$ g" u  D' e7 J0 @' _% u+ `Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
. b8 f; {3 v9 q& Y. ]- mDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;( Y# R! a6 y. M- [7 A! \1 [- h% Q
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
( [: f  J5 b. B5 K% l- Y
! _) a( g- Q4 b( G/* override diags mask for selected modules */
3 d. B4 T3 Q: g7 T) exdc.useModule('xdc.runtime.Main');+ R, w/ E, L$ |
Diags.setMaskMeta(
5 c. Z. n( g$ q    "xdc.runtime.Main",7 l$ G+ X7 c8 k5 q7 q( \
    Diags.ENTRY | Diags.EXIT | Diags.INFO,! k& [& D2 x9 b& G/ ]
    Diags.RUNTIME_ON; C/ x0 Y- n9 E
);8 k9 [' N. [0 d0 j

8 d) g4 ^" d& o6 ^7 avar Registry = xdc.useModule('xdc.runtime.Registry');
: a. v& j, x* V' s- x& }2 A& \: VRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;0 s: }. B  m6 C8 J. n6 x
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;) V9 A7 i1 X* t* W
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
* e" U4 r6 i8 X9 {" {7 u# R0 B5 JRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
- ^9 K1 b% }& B, z: E& Z7 F
/ ^/ x: _$ ^. D. [/* create a logger instance */
3 ]# S5 }. Q3 \( {1 N, I' cvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
; }; K/ N$ A( k. _5 {5 gvar loggerBufP = new LoggerBuf.Params();
" Y1 a; z; l7 y: y! O$ o! X! DloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */* \1 l2 ^2 @! w
loggerBufP.bufType = LoggerBuf.BufType_FIXED;* P+ S! `. q; O* n& X
; w( ]! Z# d6 n  w
var appLogger = LoggerBuf.create(loggerBufP);
5 B# }* t7 ~4 W: X/ y9 f. [appLogger.instance.name = "AppLog_Core1";5 i0 i6 e5 ^( w- C2 B$ ]
Defaults.common$.logger = appLogger;) i! I$ j  F3 m; u
Memory.defaultHeapSize = 0x8192;   
8 a) x  L2 }2 _. EIdle.idleFxns[0] = "&LEDStatus";
% `! B' i* z  I# Z! K' t9 e# zCache.initSize.l2Size = Cache.L2Size_32K;
7 v% H& H6 z$ o1 j
9 _5 `, ?7 g3 ~
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-20 23:19 , Processed in 0.042577 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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