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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构; X0 I; _/ }9 O; Z( ~7 o- V% H; }
6 E( C2 q& P# ?  }
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256& F8 U, F1 t( q4 }) }, j

' z1 l  r6 l/ Q/ ~" a' w其他程序段。。。。。! m+ V7 U" T, H. @" j6 q
5 d/ r2 h9 V' Q4 C
   free(x_d);
3 S: [9 S7 H5 x* d! D
$ _' }: m+ t6 b# u8 z3 C  D) H使用DSP侧单独调试功能,验证动态申请没有问题,# z9 Z6 L8 K, M0 w' O& t4 m4 r9 g
' M8 v8 I: n; U/ j
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
, X; C( B. g6 B- _5 A
9 D. E" q8 a" i. D: P+ |" g! V
) Q# |& B: P, a* Z" M. v& h
1 |' d( k2 x- U, y9 q

& w$ O3 ?% N/ v; ^# E  j6 f
* {/ U) [$ f, `* v+ i4 G, H) v5 a0 O/ v7 f7 f- O

' ~: [4 Q5 C- o1 Z2 Y
9 W; Z$ }2 l4 |+ s9 c( N& H' R+ U* X) w7 ]/ W1 x

; l5 Y  A. Z6 i' _
分享到:  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 */" w6 u( M5 g+ q# Q: a
Program.heap = 0;. d4 n5 }% V1 h7 I4 l
Program.argSize = 100;  /* minimum size */
4 ]9 x: F! P8 h" \% w' a9 H; V2 xProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */' `3 r, _! `: a4 H( r/ u
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');$ V. `4 z2 m' f9 Z
var heapMemParams = new HeapMem.Params();
( [5 W2 Z" G" C; ^0 ~5 s& eheapMemParams.size = 0x4000;
% F* g4 _% W) f2 V1 t% ^3 \: D0 p+ q8 P
var Memory = xdc.useModule('xdc.runtime.Memory');
5 l7 k/ T: q, s1 p3 RMemory.defaultHeapInstance = HeapMem.create(heapMemParams);5 ~2 z$ a) m1 s

9 K! t" m1 L0 y4 x6 K' A' X" f/ G我大约calloc  每次共计大小为5K*16bits,( M0 D% x  C) ~6 D. p
而默认配置才0x4000、需要改大。$ }$ z2 S) [  J" Y

8 @% v4 E# O! L% 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 | 只看该作者
补充说明
6 f% U2 ~4 ^+ Q: I9 J1 m我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下) n1 \  @: B/ g% n2 I# T
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)8 i1 a# C; K- c/ _2 g4 l5 L& A

" u& V% R) [# X: v是不是需要在DSP.CFG中进行配置: }& d) c! \( W+ H2 C% T
我现在的配置为2 J7 y/ k  v5 [' y) M+ y5 n

' Q0 i* X0 q; \/*
9 z" N4 o) x% q4 H *  ======== Operating System Configuration ========! F- i/ `4 Y; B! }  w" q2 G
*/
/ T5 K9 B2 ]9 @$ X/ _4 V
' |: N4 Y. \: V+ P( l/* no rts heap */. D: C, g1 L) x' f: U
Program.heap = 0;
) k2 g5 o5 ~! s1 _- x: UProgram.argSize = 100;  /* minimum size */) c; v( _7 \, V3 L$ T. a
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大! ?% L9 ?2 p8 A9 l9 v3 C5 B

7 O; c+ {% o9 Q/* create a default heap */8 A' Y, F1 j* E$ m  o" N' T# V
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');2 I. C3 }  V6 p7 g9 Y, S5 S$ C1 x/ Q
var heapMemParams = new HeapMem.Params();% r' ^9 m7 T* m# U7 O, G
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
/ K. A1 Q* T4 s/ V8 [: L* {
' d5 n6 \8 d7 A: |* N
var Memory = xdc.useModule('xdc.runtime.Memory');' C- x- W# y5 _; Q! f6 x, \
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
- M4 `* }  D9 a0 x; q; U' U; \0 }* C* o$ N- J$ S* U6 o8 }; j
/* configure System module */
, b# `3 C* n; j2 A+ kvar SysMin = xdc.useModule('xdc.runtime.SysMin');8 u9 P* `1 L7 V% v
SysMin.bufSize = 0x1000;; E1 |" \1 m" ~! P2 U- H( [, g
SysMin.flushAtExit = false;2 n( W, \4 w4 R

5 [  z4 e7 y. Z' R/ e2 _var System = xdc.useModule('xdc.runtime.System');
+ R, u: q' N; J( k& ySystem.SupportProxy = SysMin;
8 g, |- C- v8 p# A# n% _/ w7 F
  v7 R0 G- m/ O1 I+ B/ s2 o  x/* configure SysBios to use the lower half of Timer 1 */* n+ D& U- j7 l0 s+ H9 \" w
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');' y, Y( }* B0 S4 L% M. ?
var Clock = xdc.useModule('ti.sysbios.knl.Clock');: J& i: z; l% o! {. N: k
Timer.timerSettings[1].master = true;* N, I2 k: ?; `' @* }  A
Timer.defaultHalf = Timer.Half_LOWER;
( e$ Y9 R" ]7 }, ]% aClock.timerId = 1;% q+ R0 O5 X) U' Z6 y0 p
( b  }% j% |; S
8 Q) ]8 X. H$ ?: c0 m! j" e, c% _
/*& o: a$ v: T5 _( e0 f8 k3 V  b: f0 i
*  ======== Miscellaneous Configuration ========
, _( T7 G* m% p% W */
" z, O$ F# d0 R$ `
, `  B% O6 g( v$ e: {/* set default diags mask */
$ ~& \9 Q/ S4 h' k- |, Evar Diags = xdc.useModule('xdc.runtime.Diags');
% V2 L) G4 _' X5 I0 Nvar Defaults = xdc.useModule('xdc.runtime.Defaults');
8 w. j  y8 W% `' N2 n& ?. a1 M% K1 B/ i2 \. M8 c$ O& v3 A
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
1 t; o  a% Y5 _1 m) W1 y/ K+ gDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;# M* u: G; a' b  @7 t
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;2 ]) `* u* d8 u& P
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */. m: O; w" f7 {
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
6 S5 I! e% [# ~# A. y! [9 I1 pDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
: y, T, o  I1 @2 {7 `; F- xDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
+ ]/ X2 I/ O1 Q4 P/ q8 c$ a  ]Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;+ C" {! \6 |1 s/ J
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
* M4 A, p2 K& u" j! GDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;2 f# {" F: ~8 K
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;' f7 }; j" z( J- l
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
( C$ D/ v9 r4 O, q& l: CDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;4 `0 d9 B/ m5 z5 {  z. ^/ Q
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;( C  u5 Q, M- L" V1 d3 ~# {3 f

) J# {% C4 A& ?! k/* override diags mask for selected modules */
) P$ f# X6 a4 \" qxdc.useModule('xdc.runtime.Main');  |- q+ q% q9 Z& m+ A& A
Diags.setMaskMeta(
: L; w: H7 i% y) ^  x    "xdc.runtime.Main",) _) |: [$ |2 b. M
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
9 i+ y+ Z. Y6 ~, e' C' ~2 ?    Diags.RUNTIME_ON- B$ R/ \9 D9 _7 u% v7 l
);7 C, q. b: G! a3 |- |8 N* H8 B7 c

4 v3 B) ?! T) `9 dvar Registry = xdc.useModule('xdc.runtime.Registry');
3 y+ W3 ]! a* D  A: B! x9 E1 \. y6 mRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;! J! X3 _' H- p5 k" z
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
& t! Z2 p& E* a2 {2 i' h, oRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
9 v& X( P% J) xRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;1 |1 M  M4 B1 ?9 b$ O) L
5 c% [: G. E/ `& e
/* create a logger instance */
# a) I# W. A+ g. Cvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
/ t. U0 z/ g; L: U) @var loggerBufP = new LoggerBuf.Params();% ~8 F0 k( {5 \& J; K3 b) e$ A
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
8 M# S9 R& A7 _% M  X; d% X. sloggerBufP.bufType = LoggerBuf.BufType_FIXED;  m5 W6 i6 G6 ]4 c4 U
  k# o7 s6 F: ]0 E' r
var appLogger = LoggerBuf.create(loggerBufP);
+ C" c- p# N2 M. R$ TappLogger.instance.name = "AppLog_Core1";
, w7 _3 \+ a: i5 v$ @Defaults.common$.logger = appLogger;
; V" B; c4 t- S  Z9 r5 fMemory.defaultHeapSize = 0x8192;    ; h' J0 N" q7 S8 v$ _2 U4 N
Idle.idleFxns[0] = "&LEDStatus";& i& R3 F& P! o" i6 Q; b/ o# r
Cache.initSize.l2Size = Cache.L2Size_32K;. E$ c! Z/ ~9 @8 C6 g& _

$ s1 c0 y: W( U, ^" r
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-1 13:21 , Processed in 0.041424 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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