关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构$ T/ a& y; B" S! F4 y

1 @" V" ~! m( v$ C    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
8 F+ {" q& t/ M7 p- Q: }# s
% Z9 [0 _, D/ r$ I7 U- [% A其他程序段。。。。。6 z4 `) ?( n. P- t
- [5 z# D6 r) D( R$ u- N
   free(x_d);% Y: V+ {. L- \) Q$ B4 Y

4 r4 C9 ]7 g! H' Y2 p+ J使用DSP侧单独调试功能,验证动态申请没有问题,( K- ]! P* @! t# k5 [8 S& v

( Q7 z& y) Y- L  w但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。) {) G) x( G6 E0 k" E! I1 Z# r& m

( [7 `# s$ {9 U
% ?2 m+ [6 B  t5 S; h
9 Q8 T" x& O% O, e) ]0 r6 C5 w
2 P' w4 P1 M$ X. p( |1 ~  w+ J# g0 ~9 R; X

6 F9 I: _2 `. r9 Z3 }/ j/ a
* e. j' H/ Z7 S" t2 U/ m+ v
* S, C! L2 W+ P) I: F( \% |2 Q! B- H3 Y" Z9 r* k
. ]; O* l( X2 L( U: g3 K$ h
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
( M. N& a. a4 |% i. V7 x3 D我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
* j: G$ |! R4 A/ z4 E( w9 Z(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
6 M) I! n3 z4 t* ^# b! s

6 H- T- V" e$ l/ N+ S是不是需要在DSP.CFG中进行配置
# K6 n3 @0 R  B# S4 A我现在的配置为
$ p! G( _$ w5 n, @( E3 [& O9 e* a9 K8 [" U/ r3 N% D6 E- C& O- w
/*
6 O7 ^; s* ], F4 w& D *  ======== Operating System Configuration ========% c/ \7 p4 u( a3 t5 u
*/, m( j* }3 `8 o
8 s) S. Q2 C  Y
/* no rts heap */
+ X6 m- \3 K& jProgram.heap = 0;" M/ Z0 y% f. w& D) e5 H
Program.argSize = 100;  /* minimum size */" k* @* Q# S- F# i& y' {, h2 s6 z) ]
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
0 ?, u; y) R- ]  O; n6 b4 t' Q; b" V8 E
/* create a default heap */
/ R$ o- z& b" u3 ~' t1 Yvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
3 E) s' Y: ~- o% A5 ^7 mvar heapMemParams = new HeapMem.Params();9 E* @+ h: z- F
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
1 e2 ^& }8 }+ K$ Z. }; w' p, s* n7 @; z* x4 @! m# \, O) b
var Memory = xdc.useModule('xdc.runtime.Memory');
& E) O- m1 {4 Q: v( E- \Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
, d% Q6 I( }7 K( o) s6 }1 |$ H0 W1 g9 S: d
/* configure System module */& l# @0 D) {4 j1 w" z: p- P# \" S
var SysMin = xdc.useModule('xdc.runtime.SysMin');% ~, `% K4 s7 r
SysMin.bufSize = 0x1000;9 v( a0 g) V" h% w; }9 c
SysMin.flushAtExit = false;
+ ]9 h% b4 s5 t, ^1 W% n& Z3 V; p2 Q/ K( B9 w5 k
var System = xdc.useModule('xdc.runtime.System');
' a' J, {! i5 a. [, pSystem.SupportProxy = SysMin;7 _9 g0 p* w0 R

9 K& b9 j( g% o8 O3 ?& F& R$ B/* configure SysBios to use the lower half of Timer 1 */7 d5 y: E6 I, o
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');) z' X4 u5 D2 v$ o1 M
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
' G8 |$ J0 Z) G8 Y) R: S) z6 L1 V/ n5 lTimer.timerSettings[1].master = true;: {$ M& ^5 _& Q2 U/ E  P3 e! ^; ~
Timer.defaultHalf = Timer.Half_LOWER;
7 p+ D3 Q7 I7 ]& i- Q, dClock.timerId = 1;
+ b' I4 p, I* [% e
8 p, y' e( V) I: _$ X' O! \/ a  N2 G7 q+ k7 d+ |! T
/*
0 }3 F# S8 _/ q0 x *  ======== Miscellaneous Configuration ========
3 d$ ^0 Z+ S% G# Z  I */$ g7 y$ y; e( w* c( K$ K" r* V: v
; T$ C5 G* e- K4 G1 `
/* set default diags mask */7 ~0 ?  s+ X; T4 _$ w/ S' |+ j5 K
var Diags = xdc.useModule('xdc.runtime.Diags');
0 j: ]9 v5 I* L& G' d" Y0 _, m3 rvar Defaults = xdc.useModule('xdc.runtime.Defaults');
' B: J5 Y: D+ l! L! Z
1 M5 D( U* Z: T+ i+ E( aDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
9 c1 [! e- l5 t) VDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
+ @2 X5 n& P; v) i2 D. gDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;8 t8 p6 z; q" T' G3 ~) Q
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
: U* x- l) h; h, ~5 }$ sDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */$ E1 k! T7 j, s
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
8 }0 Z- K; ^6 f* S7 n9 R$ \Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;% [2 p3 Q  ]: I. _% W
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
' u! m3 B5 I$ qDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
# Q) \% S' O' j" W4 jDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
0 K4 D5 b& w0 q- W  YDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
% Q; A9 I; S; e1 T# u3 M' b1 I- RDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
8 l8 b4 \; m  F  X. O* B( t* P4 uDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;: d& E$ f/ {( M; M1 w
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
0 n9 N* K8 e/ K( P: q$ I( p
7 Q) V  `& D' J. Z  i/* override diags mask for selected modules */
* O1 P5 @1 R3 X6 h. C2 kxdc.useModule('xdc.runtime.Main');4 v* z) ^2 x. O8 j& v
Diags.setMaskMeta(2 J% g/ \( V' B
    "xdc.runtime.Main",3 w* l2 E' f+ w6 @* G& F6 i
    Diags.ENTRY | Diags.EXIT | Diags.INFO,# r' n' p7 F1 j+ y: ]
    Diags.RUNTIME_ON) Y. j" l/ T4 `
);' J/ f# a; ]  n3 }8 l
) t' R. i" ^- e1 |! N6 w
var Registry = xdc.useModule('xdc.runtime.Registry');3 H2 H! @7 n! {- V4 q* T% {( V
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
% O; ]( L3 }$ M6 fRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
% l) O9 \7 m$ r! jRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;7 u' F: f2 W2 O2 Z1 Q
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
1 o/ u% X% ^3 f1 e6 ]6 v  _, Z3 Y" `! u3 L9 L
/* create a logger instance */7 t& }* A; w2 @$ W$ ?
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
: e% M# p. W& m9 }6 H3 m& Kvar loggerBufP = new LoggerBuf.Params();7 y! D/ I6 Q- U$ I. @7 x1 A
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
1 R$ W3 B$ |! y4 D& z& `7 wloggerBufP.bufType = LoggerBuf.BufType_FIXED;
7 Y/ @4 N0 g, Y$ q0 s2 E8 h# ]# \. Y
var appLogger = LoggerBuf.create(loggerBufP);
8 d8 f2 d! K6 G# @appLogger.instance.name = "AppLog_Core1";
8 {& F6 U1 i. [Defaults.common$.logger = appLogger;
$ h! j; V  a4 {/ wMemory.defaultHeapSize = 0x8192;    % T6 M( a9 h: `, k1 h' {
Idle.idleFxns[0] = "&LEDStatus";
% N" c' L8 l1 kCache.initSize.l2Size = Cache.L2Size_32K;% q; U( C  G. p$ p- C( ^; a
9 x' p5 q; }$ K; B) 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 */9 @! Y+ c& H4 X4 \/ D
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');$ I! ~+ p! [8 O) P1 o
var heapMemParams = new HeapMem.Params();
% l- ^: b1 I) i% x- ?2 e: RheapMemParams.size = 0x4000;
8 |- ]3 C+ G& c. `* x1 W# d: s2 @  V; r  j
var Memory = xdc.useModule('xdc.runtime.Memory');* u% j* M# w8 y
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
8 a) }' s3 a$ `2 K: O( m: ^! k$ d* o8 n! Z- C$ k! |6 y) e
我大约calloc  每次共计大小为5K*16bits,
& P+ s5 Q) `0 L% C3 R  x4 w5 x# p% R而默认配置才0x4000、需要改大。/ m/ _# u) @& I1 T

  E7 |+ I  V: B
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
2 V. D. `( h9 }7 ?Program.heap = 0;2 |6 W4 r/ O! E8 N
Program.argSize = 100;  /* minimum size */
( p* R+ p# ?, t2 T% a+ J! lProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-26 03:51 , Processed in 0.039976 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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