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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
3 P. V1 x7 `1 p1 t) F+ a+ w" z' J" J
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256! S3 f0 s8 z" Z" ]7 y) a+ [
! \# V! K+ U# P+ T
其他程序段。。。。。
7 ~- |# e% j1 o6 c
7 v" e$ d; Z3 J  q% `$ [   free(x_d);
8 P1 U9 W8 ~* P. d% y! g, g5 P0 X! O! K. a4 i: }
使用DSP侧单独调试功能,验证动态申请没有问题,
" u6 D5 R" T8 t. V, T
" H  r- E  E& d" P但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。( M+ Y' _7 O# G, s

; S4 O% q  h9 E/ ?: ^
, l: X: r* i% C# x' Z$ ?  V# _. \9 b7 n* y- Y4 L8 v: M" D( _% t

8 m' l9 }: t7 D: N. U- K, Y5 Q, a/ u% e1 j0 D( ?: t4 C  T
/ z) L8 y* s, ]/ Z$ u" k; m
# I/ M- A+ S6 w& H0 G
/ I1 p; }$ J7 X
% ~9 G8 d* H3 {' @* l1 S  b
/ x4 Z1 ^' U( b' s  C5 Y# ^
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明, w0 {5 T/ J, v* q/ [
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下" i) ~  z& I" w& c6 z. y; m6 M
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)* y3 o5 z6 p5 W3 Z. c

' R$ o8 J9 d9 z- S0 [是不是需要在DSP.CFG中进行配置
" u, `6 Q- ~& W我现在的配置为: D8 l5 [  f7 U( v

$ n- l% [$ R1 U) ^/*
) Y7 M. q, t3 j9 E- G2 f2 a *  ======== Operating System Configuration ========
7 h% L" C# F2 p' ?2 g, C */
* P) R: ^+ o+ I' Y8 s$ S, X& ~! E. @$ q
/* no rts heap */1 t! U+ i; L' A$ z; ?& w
Program.heap = 0;
8 o/ q4 ]" t9 \6 [1 aProgram.argSize = 100;  /* minimum size */% D8 ^* |' h: V( p4 j1 r
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大( }" |& u3 V* T

7 F4 b& n0 B( i/* create a default heap */
+ u7 w: [+ t/ _) d9 h# U2 C* evar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');: o: ^8 L7 u* r" r! t* ?
var heapMemParams = new HeapMem.Params();
7 j2 S, i' O( W& BheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
: k; Q' o& U1 W9 Z0 ^1 v: i& ~, h5 A1 K1 N: b
var Memory = xdc.useModule('xdc.runtime.Memory');
2 ^8 V& c! k5 T7 m, PMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
& X  Z" r8 [0 Z
; Q; F) ?6 @+ O( Q. y2 h, }3 n; j/* configure System module */
& f+ [) S! p5 E& I. y/ qvar SysMin = xdc.useModule('xdc.runtime.SysMin');
( @$ C2 G4 Y( F: eSysMin.bufSize = 0x1000;9 C  Q# i2 l( X2 Q: i
SysMin.flushAtExit = false;' E# M4 Y* g+ t8 h

7 v3 S& i: O' E* h( Qvar System = xdc.useModule('xdc.runtime.System');
6 V0 x' _* ^. T) ESystem.SupportProxy = SysMin;! z' u8 k- U# X6 W
2 \$ N; D- _# f
/* configure SysBios to use the lower half of Timer 1 */
; i6 M" U* B. Avar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');8 m6 L7 x; y1 ]
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
  E6 M2 z3 ]6 ?8 KTimer.timerSettings[1].master = true;
& i4 C; l3 D" \1 Z. lTimer.defaultHalf = Timer.Half_LOWER;  H0 a  R" H- m- F: W' n/ ?
Clock.timerId = 1;
1 O  Z# C# b/ j( M6 G. }& `5 S8 H6 P) w
  q, y9 Q  X+ ]& P( V
/*0 ~; m( ]/ Q. ^2 Z( Y4 Q
*  ======== Miscellaneous Configuration ========7 @+ E. ~0 w5 V+ W
*/* B; w! {) I( e9 R

3 {6 g/ ?0 ~( f3 M7 }& C/* set default diags mask */+ o( |. p# Z/ j, \$ K; N, r
var Diags = xdc.useModule('xdc.runtime.Diags');
$ n; X$ u2 e$ r3 Tvar Defaults = xdc.useModule('xdc.runtime.Defaults');2 Z5 i  C& |0 {' x
, v/ J+ `/ i- M! J$ _: i, B
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;  G& G" C( ]& u
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;0 a3 s4 P. T3 r& D* S$ m2 J" s& S
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
) ?/ m  C9 ?/ H' s* N2 A0 `0 V$ rDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */* B* u9 G" p5 t  g
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */  i) G( r- _9 H) Z: V+ D2 H
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
7 e& I, A# }" `% I: ], m" K6 JDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;) c. }" R9 [6 P4 J; Q: @
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;; j; f3 t& X4 r: n3 _3 |4 k
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;/ `3 K! I+ k: [; r! J& u
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
5 g) m- t: L' \5 [Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;3 E& U" P4 V* H' c/ S1 n) c
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
0 }' F# L# a% f, oDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
  Y" K  R9 S. W' i/ ^; h# qDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
7 Z1 w' n: V4 i6 B# y' ~+ P# }8 y. n! Y1 |* o* n1 q0 i
/* override diags mask for selected modules */9 c1 b6 q  \- |; \  Z2 o  F
xdc.useModule('xdc.runtime.Main');! j" W7 h1 k$ K; T
Diags.setMaskMeta(
# `" A9 g7 O! @6 M* L    "xdc.runtime.Main",6 s& }" _4 u0 o8 q$ C1 ]( N  x
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
8 D4 m& ~8 n$ V8 Y3 g    Diags.RUNTIME_ON3 \% w4 C. B/ d* L
);- C+ e( B0 g4 o; ~
! z: ^+ _$ R" c1 U
var Registry = xdc.useModule('xdc.runtime.Registry');3 S) N3 ^( w0 X! `* w
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;5 b4 D7 s- ~2 N: I8 X( J' g
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;* C  i6 ^# f3 q9 m' t
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
* n  C( L& g! c9 [Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
$ O0 T: J  q. U* }+ D; |  P6 A# v  z2 J& s( S: B9 k( u, t9 \
/* create a logger instance */  G' D  i5 M% q
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
/ Z- `0 N0 D; o9 ?6 yvar loggerBufP = new LoggerBuf.Params();9 K( u; p# _$ z8 [6 R
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
$ F" z" q+ a2 c5 ?0 S0 x: j' w9 TloggerBufP.bufType = LoggerBuf.BufType_FIXED;' ~3 E- H! \8 _1 p$ C5 m5 |

; e5 [5 X/ `' e& j6 {; rvar appLogger = LoggerBuf.create(loggerBufP);% A) }2 x3 g, o
appLogger.instance.name = "AppLog_Core1";* z* E) @9 h, L: b9 B, b" i
Defaults.common$.logger = appLogger;5 Q4 f6 p. a* C
Memory.defaultHeapSize = 0x8192;    ! a6 B4 w! s% s/ Q
Idle.idleFxns[0] = "&LEDStatus";
( E; W8 G8 B2 yCache.initSize.l2Size = Cache.L2Size_32K;5 V/ N, X- U& X; F6 b- |: X
( c: o" r3 b+ |; i
回复 支持 反对

使用道具 举报

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 */" G  A! C' ]. t2 p' [
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');2 X* K' d+ D  z  @. h
var heapMemParams = new HeapMem.Params();
( }  u! ~2 ?% yheapMemParams.size = 0x4000;& N' G" d1 [& u. T! v6 w" q; [
* E- {* s) e" G2 j" }
var Memory = xdc.useModule('xdc.runtime.Memory');
7 Z! E- [5 O$ V( Z' vMemory.defaultHeapInstance = HeapMem.create(heapMemParams);+ G3 H/ I1 X1 W) P6 c  s( H) E

' n3 B4 q8 E0 u2 q) r, P9 [7 r我大约calloc  每次共计大小为5K*16bits,) w: V: q* f- T/ ], A$ `
而默认配置才0x4000、需要改大。
) g5 J, D! M4 R' _: N) S9 I% h. y! I, U$ N% W/ I: S2 g
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */% q' F+ \# @; m. I; ^4 R( p
Program.heap = 0;
" w, J. ]7 U5 a  @( VProgram.argSize = 100;  /* minimum size */; n% B& {2 i0 E3 I% @: A  a  _
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-20 17:20 , Processed in 0.041082 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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