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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

5 t- z2 _& e4 e. d* w2 O$ l    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
9 w  G4 `: u/ {1 ]7 y" i
" i" A& z4 w$ ^1 Z- x+ h其他程序段。。。。。
  E1 A4 y" J+ B$ j% {6 M1 K- c / W# S, q" o, A" W8 M
   free(x_d);8 f: _9 V. @9 j" T9 n* t

  C8 }* F* |- y* u5 c0 w使用DSP侧单独调试功能,验证动态申请没有问题,' {9 c, ]* m2 U

( O- @* N' x2 q$ l0 Y( y* x2 _但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
/ g1 [+ v0 C7 K+ a; S) `

8 e% z  P( N3 ?% C* T' M0 h( ?' E

" Q* }- s  v5 d' N; a: |9 {9 E& r  E# P  C6 d

# P( @. C+ t& m3 ]: @9 x4 m. l' U8 I. V8 h9 z+ t1 S

4 p& m% w, |- ]2 x* f* A: P; n, o
2 U$ H  {( P# [2 O; e. Y
( @+ Q( L% ?& [" h: D* s" p
/ Z8 D8 j" A! H4 j7 K: a% Z' x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
9 L* R& _0 F! ~9 I我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
: ]: l0 q6 z! v. A5 y' O; m: @(不过疑惑的是,为何单独DSP仿真就没有问题呢?)' o) i* L1 F9 i. x3 R

/ b4 n* r1 o2 a7 e; x是不是需要在DSP.CFG中进行配置
' |- B5 C& v3 u  }# S$ y我现在的配置为& p; p: t6 y& V2 x
/ J( g! P8 x& R% k9 x1 N4 ^" I
/*; W$ E0 k- |# A6 C( A
*  ======== Operating System Configuration ========
+ N0 s* q2 X: a( O- H, T */' t9 W, `" m: J- k5 ]
/ n. z: w& X+ V" ?7 F% I6 t. z
/* no rts heap */
5 o% H# d' ~0 [/ t3 W. f6 b# X0 S" yProgram.heap = 0;
! s/ h9 `$ b3 U  I& d0 zProgram.argSize = 100;  /* minimum size */
4 G& u- [; _+ ]2 m( E/ AProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大) D9 s  J) x, m4 [" J' K
  z. m! [5 ~8 O+ D
/* create a default heap */
/ }" H& v! _( j0 Q4 {) `3 zvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
" j4 ]7 X+ C, v& Y4 J- xvar heapMemParams = new HeapMem.Params();
8 w6 c- V' X! _+ ^0 NheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大" O: ^1 m1 v" P
2 e+ C' S& }" r3 y
var Memory = xdc.useModule('xdc.runtime.Memory');
0 U) w3 p2 y& [' K! l7 T  }6 LMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
* j1 p- X- C7 L3 \
' j: t3 e4 T8 {- S/* configure System module */
9 O  P6 S" k3 X8 G9 L0 t5 n  s6 Xvar SysMin = xdc.useModule('xdc.runtime.SysMin');& Q4 t& K' V5 u) y8 j' ~. m' L9 J# m
SysMin.bufSize = 0x1000;, K/ m% V/ ]3 Y; z
SysMin.flushAtExit = false;( @& }8 l0 \. ~' E" a; E0 g

7 [2 ?: k8 U% \* N4 a9 Rvar System = xdc.useModule('xdc.runtime.System');/ k) K* ]5 Z) R3 t8 @
System.SupportProxy = SysMin;4 M& C; I: d/ X% O4 H( R% ^
' D% p4 l$ G- t/ C9 D1 m
/* configure SysBios to use the lower half of Timer 1 */% q; Z8 J' g- D. F) F! \
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
9 B* D8 a0 h% Q% ]var Clock = xdc.useModule('ti.sysbios.knl.Clock');# k* O2 }. v% r' O7 j
Timer.timerSettings[1].master = true;1 A* P. {# u# C
Timer.defaultHalf = Timer.Half_LOWER;! Y- w1 _* L# M; A* I# `' q! h
Clock.timerId = 1;, C( E8 o1 ]- i

8 ~" m2 j6 d9 g* M0 ^0 x0 _. {* P5 Y& J+ |: ]% O) h8 D8 C2 A
/*
: u, O7 a. B, t: K. F7 k *  ======== Miscellaneous Configuration ========7 F: ]) i0 w' A* \/ v$ x% \
*/
* W/ r. s3 }+ f5 k3 U5 ]1 v  y
/* set default diags mask */
1 k6 g/ k1 f7 s6 P2 s9 g, rvar Diags = xdc.useModule('xdc.runtime.Diags');; v* F  {% L0 X$ w: G$ `% d4 ~, k8 Q. u
var Defaults = xdc.useModule('xdc.runtime.Defaults');+ Q0 K8 e! K) }
6 `1 W5 S% T3 P+ F
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
8 D# ]; |( O0 _9 ~( {0 N: yDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
' F5 s& j! R0 y: N! T9 wDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;$ c  {: o2 X, i: L, _- f; Q( D* Y# X
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */' i$ s$ }( e. f. r
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */' k1 d& C* S, q( o( p% Z
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
, H3 M& a; T$ f  _" }Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
7 G3 l# Z6 f4 s  v% K; P0 FDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;7 V2 }2 v# _1 X0 P& N
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
+ Y, R+ \; s3 S8 \Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;3 `. r9 t+ N5 \& d, P. V
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;) S- N0 X, i7 u# J/ M1 X
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
- |, v+ u3 l. I  w7 l1 qDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
8 s( c# P7 Y6 M; q; fDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;! V' p1 L) c8 z* ]8 p1 |0 w

" b0 q- B1 e1 {$ A: v4 `8 ^* F; c/* override diags mask for selected modules */
# u0 y+ x& Z) Z+ s# k/ ixdc.useModule('xdc.runtime.Main');
4 F7 D, w2 K( @8 C5 QDiags.setMaskMeta(* G' S8 A+ f( w
    "xdc.runtime.Main",; M% K2 W9 V( t9 {4 F, v! C* i
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
  h& H3 W" H# P7 @! P2 C    Diags.RUNTIME_ON- M5 g0 @8 s/ X7 g- g% ?9 a6 U
);3 L2 d  C; V$ }0 Y' Q/ n; A
7 ]2 B! e2 i6 L% D' ]3 M
var Registry = xdc.useModule('xdc.runtime.Registry');" Q0 c2 {0 @0 o1 ~0 {( X
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
  I$ U* _& D, W) W) @) R( N) Z" g/ r$ nRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
; [+ `, w4 O6 H2 N1 i' X# ARegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;6 M# A* t+ f1 M3 S  Z
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;+ U& k8 A1 n6 S6 G& B( Z, H
& V# `' W4 C8 }1 R
/* create a logger instance */
) G! T% S" x' u8 o. \var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
. }5 _8 N3 d$ evar loggerBufP = new LoggerBuf.Params();$ R- W( S# J6 Y1 `7 v4 h+ b
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */& }0 O3 {/ N1 R6 @
loggerBufP.bufType = LoggerBuf.BufType_FIXED;8 s1 a; j! F9 l. j) y" y
9 n/ [. V  ^2 V3 w8 @; ~5 C. j
var appLogger = LoggerBuf.create(loggerBufP);
# L# i+ j7 y, s8 x3 P+ ZappLogger.instance.name = "AppLog_Core1";2 U& h! b" Y1 N* H" _: _
Defaults.common$.logger = appLogger;1 q  B) I; C2 H6 z% {% O
Memory.defaultHeapSize = 0x8192;    ( p) Q+ w" R! n
Idle.idleFxns[0] = "&LEDStatus";
4 l3 C% e$ G2 CCache.initSize.l2Size = Cache.L2Size_32K;
% f3 \3 Y  w0 K) a
6 d7 s$ C2 _/ x# V# t6 u- B0 c4 c! S
回复 支持 反对

使用道具 举报

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 */
8 a# t6 M- {8 Y+ I3 g. b) hvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');- A  r5 ~, r1 l- N$ f  Z
var heapMemParams = new HeapMem.Params();
: n* i  C" n! Q* _+ yheapMemParams.size = 0x4000;; J# D, p9 p$ T; e& _) ]* Q
7 N% J8 ^6 D( F3 b1 V6 v8 {$ V
var Memory = xdc.useModule('xdc.runtime.Memory');
: Z& y* I% U* @4 f  W! _( }Memory.defaultHeapInstance = HeapMem.create(heapMemParams);9 u2 q3 y. l* Z3 H

/ k* z- H4 d# \2 V0 ~我大约calloc  每次共计大小为5K*16bits,
: }7 ^" w3 o! Q4 k4 b1 x5 w9 a而默认配置才0x4000、需要改大。
0 I. r1 e6 r* W: U5 n
9 Y, r7 a1 o* z6 X# O/ I
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */: b7 ~9 u2 l$ @: P/ Z
Program.heap = 0;: f9 V8 r. D1 W, {( }
Program.argSize = 100;  /* minimum size */+ H, N& r7 _2 \
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-18 16:59 , Processed in 0.049266 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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