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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

3 y6 k5 x7 p3 H    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
3 x& Q$ K' u5 r! C4 v0 L3 k- x7 h% w% ]3 ]+ I! S: s8 r
其他程序段。。。。。
( B/ U/ W3 g; m1 }: U! f% V , V  k$ U5 C& q( N1 g7 g
   free(x_d);
- R6 r  c, y% o" d
) ^3 E% j3 T* K; w, U2 S* T- N使用DSP侧单独调试功能,验证动态申请没有问题,
  g" ]1 v5 E5 h
% l  g+ S* v+ ]但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。$ b' C* j9 o1 k& W

2 B! H# j% u0 d5 z& K! Q9 @# [# \. r3 d! ]; c' ?3 N3 h/ Y( V

/ B- U6 i( e, r6 n
' {7 X* Y8 |- F/ h0 M
$ y. o( ]8 f# Y- G0 C- f, H# D- W  i/ u6 @' c& b5 `
; L7 g; ]) Z- h/ d+ U
  L. S! _! M+ W5 ^0 _1 o# d- O  d2 S
; O( r+ A9 _3 d8 {' O; Q! E
* {* A  z6 l5 ~1 M: k& m
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明1 v- i8 z1 C- W; \7 n( e" J
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下$ v! c2 l% N  y! P7 ]
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)' B9 w2 {  f7 u! _) [
. i  X$ U' \+ R  M
是不是需要在DSP.CFG中进行配置8 [( a2 p  A( A, F
我现在的配置为
- \3 n( c+ g) I0 g$ p& {) S) ~* \! k; r3 A4 v' c
/*  u& p  n8 m" D# _. E+ T/ O' m5 z
*  ======== Operating System Configuration ========
+ p/ e+ L6 }: n7 T/ s */! J% A( R3 g. c4 u0 v
' Q% C$ A, @2 N3 ?
/* no rts heap */( H: `. o7 O4 I0 {1 S/ n# N
Program.heap = 0;
: H: Z' N: Y* A6 A( Y  s! fProgram.argSize = 100;  /* minimum size */
# |- l5 a$ L3 rProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
7 z+ P* ]# Z7 \# P! R7 O- w- i+ {6 G/ w2 y1 N2 ^7 `$ p
/* create a default heap */
" @9 B6 k9 g, D8 U# Lvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');+ t: q+ M/ A! L
var heapMemParams = new HeapMem.Params();
5 D1 W( i3 o1 K% ^& z1 mheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大! {. d, ^. t/ ?4 _* V
$ t6 ]! R8 L' d* R4 L8 t
var Memory = xdc.useModule('xdc.runtime.Memory');; A: `7 i. b% H. M, ^
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
& o5 {8 b- U- q2 |3 c- h* y* W* t
) @9 S6 i$ q4 z  r! y/* configure System module */
3 C& C: I0 Z2 m) z" g, b; evar SysMin = xdc.useModule('xdc.runtime.SysMin');1 v- g2 V7 O3 T4 N- M
SysMin.bufSize = 0x1000;* Z0 a$ f$ g) `! b- G& s) X, s0 q5 ~. Q
SysMin.flushAtExit = false;
, s7 ~. n. v% S9 r' o: F7 r' C9 ~& N1 K( x! |  U
var System = xdc.useModule('xdc.runtime.System');
  E$ F# r' F9 j- }: KSystem.SupportProxy = SysMin;
; V7 S+ i  g, o. \; k; K' G/ U; u+ v
/* configure SysBios to use the lower half of Timer 1 */' m4 U4 C$ M8 p: h3 R
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
. Z1 `( C& h4 b# Uvar Clock = xdc.useModule('ti.sysbios.knl.Clock');: f, U$ g* }  n3 U5 w9 a
Timer.timerSettings[1].master = true;
* @/ @1 R2 c: ]+ `2 V' F* x2 ATimer.defaultHalf = Timer.Half_LOWER;
  _8 t+ @) ?" U/ @# c% FClock.timerId = 1;
6 p! y7 q( m3 c) R$ m: f9 G- u, t
* e3 I7 s1 M, T2 E% e
( f, _- s9 {7 w- _8 [* v0 r! c/*
3 S  Q) r6 ?7 H *  ======== Miscellaneous Configuration ========
, f$ v) x7 Y. Z# d) S5 f$ ^ */1 ~) X" L" S+ ^; t' `3 k. N0 \+ O* ?
$ Z: v: N1 P7 l) q$ a
/* set default diags mask */
: O. b) O% w" u$ lvar Diags = xdc.useModule('xdc.runtime.Diags');8 k9 E( K# k8 d% u& K2 ?
var Defaults = xdc.useModule('xdc.runtime.Defaults');
+ t( C; R. Z, X' t$ B6 ]  {6 \' i1 S: ?
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
$ _5 Z5 Q! B0 K6 |/ `) m4 DDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;+ `/ M% n6 c% H. K' a* r- q
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
  U2 A' @& \6 R4 ^  |; QDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */4 ~7 _  u( u: C: E7 `# O
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */8 ]% [5 G) `! o8 L3 r
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;5 w6 |$ m) P& B$ i
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;. R( x/ P6 c' b
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;+ d0 g& K3 A5 o. }9 R
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;' w2 ~  a* {  W6 \- \
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
- l. y& m! g* Z2 p- gDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
9 G# t! |' ^; f3 `3 U& L7 C6 K9 [; [Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;# b  |) F/ ]* n9 r! T0 Q" l
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
6 V) f+ p% v# gDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;# p: m3 P; V: q

1 B1 o  W5 N0 D. R( T2 y/* override diags mask for selected modules */7 C* U' s. @" ]" a" c1 d
xdc.useModule('xdc.runtime.Main');
* i" B9 d3 d  N# IDiags.setMaskMeta(( {- U" t1 D4 ~. W. B
    "xdc.runtime.Main",7 v: j" f) C" j/ n" ?
    Diags.ENTRY | Diags.EXIT | Diags.INFO,6 Y$ p7 |" p/ W
    Diags.RUNTIME_ON# L! v& B/ \/ G8 X) t! s
);) Q! ^/ s, u5 A$ a/ }( ]3 k) S8 W; r

; Y4 P; @: ?% d$ gvar Registry = xdc.useModule('xdc.runtime.Registry');
! H' O5 d# b) q& sRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;1 m9 k0 R8 \3 G3 W& a/ @" n( M. K
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;/ x9 W, u' l' _/ s
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;; j) k3 k) g' M: x  A2 D$ {* F* g
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
, R# H' M4 t& i- p" F6 i8 `' v/ w. b* g+ P1 G1 {) ]
/* create a logger instance */1 K2 V, g9 e; ]  k4 S- U4 t, J. w* m
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');. V1 S* F; s$ W# E8 T; |
var loggerBufP = new LoggerBuf.Params();5 a$ V& \) t3 o: x
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */" I- d0 p' m; g* L+ U/ o
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
! O; Q4 [! h; d; i" [4 _' K0 r+ ^( ?
var appLogger = LoggerBuf.create(loggerBufP);
9 Z! R; e" D% c" d- A& iappLogger.instance.name = "AppLog_Core1";6 T" a0 [4 V  G; m2 Z
Defaults.common$.logger = appLogger;
! v) b5 n6 h4 k- x$ J/ r+ Y3 m; ]9 ^Memory.defaultHeapSize = 0x8192;    * W' L1 Q+ c& }& u
Idle.idleFxns[0] = "&LEDStatus";
' u' ]$ q3 {' P' ~& mCache.initSize.l2Size = Cache.L2Size_32K;9 M' R1 v' k7 _4 D; c

. [* o! Z% O6 I* j- I3 A
回复 支持 反对

使用道具 举报

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 */" o5 {+ |- ~, s; ?, P
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');* A9 ?! [4 c, y4 f+ E
var heapMemParams = new HeapMem.Params();
( Y7 `2 d/ y. U& C6 ]heapMemParams.size = 0x4000;
3 V- A! y2 E6 f( Z0 x) h4 O9 i8 R: m$ W* r* \: S: E" `6 F' j3 K
var Memory = xdc.useModule('xdc.runtime.Memory');
2 V) _# Q$ ^0 u# |  C. G7 t" ~Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
$ c, c9 \4 B! U" \  J, ?0 g) R; B5 R  f4 H
我大约calloc  每次共计大小为5K*16bits,
) Q; b  s; h$ ~而默认配置才0x4000、需要改大。  T: Q% Y6 E* P

, f0 W" Y1 o; q4 g# B
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */7 ^( O$ P- u5 N% p5 d
Program.heap = 0;
! \! i6 W1 [; f2 tProgram.argSize = 100;  /* minimum size */' P9 d/ p3 v, p* D
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-2 16:33 , Processed in 0.044980 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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