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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
. ?" C: [7 O. `9 n* V- s; K( X# A& B9 O8 T0 z
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256, s. n4 @9 H6 [" K
0 P! C) L+ G# y; N4 n
其他程序段。。。。。1 P' g8 e$ ?3 K
( s+ [0 `2 \; U0 y3 M
   free(x_d);
7 [( u9 L. o* c- j$ w8 X8 u
4 c1 v- D" \0 }* N使用DSP侧单独调试功能,验证动态申请没有问题,
) _/ N+ {9 v9 v  W
6 z. Z! o) P' u  X- J- y9 }. O但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。- [9 V8 D. Q. \3 v! B$ g
/ `/ g. W+ ?9 @. C3 u0 x4 {, s
# G$ |% u" Z1 \9 X% g# u8 N
: }: o6 y  e3 }1 `5 k' z
% |5 W) L# A$ ]8 c' j/ E6 A' U

& e& ^& @$ @7 ^& U& p! ]. J/ l. A: N8 ^& e: b8 s
' N: c3 U* J4 O  I. j
( l( l5 d6 k& W" q4 X: p+ R0 _& F4 y

) H8 L% l0 h' q2 T
" W5 T" U4 G* n  P& Y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
( U9 K$ U2 `1 a; E8 i, V' Q我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
# c# }# m+ _4 |/ s+ q6 U2 g4 u- i(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
- v8 a% ?# ?& f( m3 b1 l1 T* j
  X* F2 r* _6 q7 t5 Q; n; w0 @) s
是不是需要在DSP.CFG中进行配置
; |: V) z6 t5 G& W1 r) M我现在的配置为5 |: m: x( ]/ S

& s5 n; ^6 V: V9 N4 O/*
  v: s2 u) _! H! T& \( ? *  ======== Operating System Configuration ========# N1 l0 h: p# |' T
*/
# K' |+ D. t/ L3 v3 {
* N9 j4 n- O$ W9 E6 T, L/* no rts heap */
1 c$ b: j9 ?! h9 \4 I: s+ cProgram.heap = 0;! l& t$ y# d/ e! H* f
Program.argSize = 100;  /* minimum size */
7 O$ \6 I- i$ `: j- Y# V) @0 w* }Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大; t& j& s9 c" Z2 Z( r/ j

, l$ n' ~* P2 m( j" W- M& ?% t0 N/* create a default heap */
$ n( u7 C9 Z% A8 X) l  B3 uvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
( m2 l! C# Q% I3 l+ `; Ivar heapMemParams = new HeapMem.Params();+ n% _& J+ R  \8 w- Y2 U3 c* R( e
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大- q. ?: P/ X+ M( y% |
8 t# |/ ~& K8 N0 |5 |* b
var Memory = xdc.useModule('xdc.runtime.Memory');" G# m. i( Y3 u
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);- }: c: ?6 L$ q5 ~6 F0 h2 G' |$ e

8 J6 l* ]& [, [  Y# S  ?/* configure System module */
6 b7 S  I& E8 v  }% S, v4 Y6 q! P8 {var SysMin = xdc.useModule('xdc.runtime.SysMin');
6 V/ T+ J3 [- e* B8 r6 A! m( iSysMin.bufSize = 0x1000;$ |/ |5 {5 z8 F$ q; b# M. g! D
SysMin.flushAtExit = false;
) X; S3 n5 g) Z) h9 O% I! h
; \& Y* g' @5 D6 }) G6 [5 Z) Svar System = xdc.useModule('xdc.runtime.System');
* S; p% m! {+ gSystem.SupportProxy = SysMin;* g8 X4 d. t2 h6 @) R

6 Y' n) ?& z3 o$ c4 l  e- V8 G3 ^- @/* configure SysBios to use the lower half of Timer 1 */; a1 J% r& L  W% E
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
. l: R% X) ]9 v8 qvar Clock = xdc.useModule('ti.sysbios.knl.Clock');7 P" Z+ h/ p7 [8 e! R
Timer.timerSettings[1].master = true;  ?* N  a7 i! }$ G0 R8 e
Timer.defaultHalf = Timer.Half_LOWER;
7 f8 p# @1 D5 I8 |Clock.timerId = 1;
! X; \- B& w0 b5 E7 g+ o9 c. a0 e9 y0 J* l! c2 e
. n5 f4 h3 O' N8 w& c: `2 O
/*
8 K& H5 B6 ^6 Y% [ *  ======== Miscellaneous Configuration ========2 k' k7 q( f+ E- @3 k; ^* \6 u$ X
*/
# l/ C( e6 p. x6 B; W7 W) Q3 I/ t" N4 X( l7 u, }
/* set default diags mask */; F9 c7 \( l8 [9 X0 w1 a7 ~
var Diags = xdc.useModule('xdc.runtime.Diags');$ m6 ?- `. b5 Z$ ]
var Defaults = xdc.useModule('xdc.runtime.Defaults');+ z/ V" X& d/ }% h- n# m; f

/ [: ?1 X4 l; uDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;. M. Z% Z8 G  m1 p( x; r6 l. m0 T0 m
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
4 ]# Y- u  h0 ~4 B0 Q3 eDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;/ t: Y. Q: x- j
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
! D- M* d0 Z! T) mDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */1 F1 Q- m$ C1 w* h5 A
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;4 B& e) j- N% M1 E. P4 u, e' `- t. E, z
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;5 {. W7 t  O( S' ^# i* `
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;2 X+ i  a0 O& S: ]. [3 P( Y7 {5 g
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
/ ?4 t9 T) a& K+ @( mDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
% M4 w4 a! t( r3 dDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;. g3 t# `9 @3 Q2 H6 U. E
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;4 Z" P$ t, }" O% E: E( q$ _
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
4 _0 k! O0 S+ C3 ]Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
. R" b9 ]1 W/ P  Z5 b1 h4 P) h2 n5 Q: K& ~8 t+ Y4 K; f
/* override diags mask for selected modules */# a0 e- V" X# i, d3 p
xdc.useModule('xdc.runtime.Main');1 K  k: W. q) P' P+ m
Diags.setMaskMeta(9 {% D2 s* r* N3 o" g& L2 b
    "xdc.runtime.Main",' p/ }! A' V9 d
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
, r5 u/ Y  k/ x# V5 ?( j/ K. u    Diags.RUNTIME_ON
' p' A8 _0 I0 s. J% p3 w);+ e/ _8 w+ V6 @' w

% j7 d7 m: v! B7 X  R# Rvar Registry = xdc.useModule('xdc.runtime.Registry');
  t4 l- e0 B* W; VRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
! N; Q, b# x: {9 z+ TRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
7 O! @- g+ t7 H6 H6 uRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;& Z1 H& C* y8 S
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
7 _7 l. u! j9 ]- n" d: A; c5 `
7 q* u+ {" M  d# L4 [/* create a logger instance */
4 m$ ], y# o1 a, zvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
% e2 d+ l$ n" S, k* dvar loggerBufP = new LoggerBuf.Params();
$ ~0 d3 y) `3 a: s( n5 @# X8 bloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */, p. Y# d, Q1 j8 {
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
0 q, Z) z3 Y. R% M+ g+ p- ^$ X$ H8 h4 B0 \, r3 n  E% V* C
var appLogger = LoggerBuf.create(loggerBufP);
" Y7 e4 T5 v5 uappLogger.instance.name = "AppLog_Core1";( d  i0 r. L& e4 r) g# \3 F" L
Defaults.common$.logger = appLogger;, [2 p3 p2 g5 e# P, d) v$ b
Memory.defaultHeapSize = 0x8192;   
: `1 K, l6 s' `) d, _( Z2 nIdle.idleFxns[0] = "&LEDStatus";! i3 ^8 P( G: j0 W4 X1 R
Cache.initSize.l2Size = Cache.L2Size_32K;
8 z7 T4 c. t( n+ w
0 k' U. N' T& x! A# C
回复 支持 反对

使用道具 举报

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 */- K9 T3 {* M: E! J# }6 q( m
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
! z1 f" w8 f0 R& X. T) Y. U! m# fvar heapMemParams = new HeapMem.Params();
: k& C& W! U, K, Y0 v# vheapMemParams.size = 0x4000;6 N. G) b( U" F8 Z+ a
, h5 F9 S+ i. _+ A. Y; J4 }
var Memory = xdc.useModule('xdc.runtime.Memory');% J9 h: b" @3 f6 L, k
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);6 g5 ?/ q5 Z1 t2 N

: `3 }- \0 G2 S8 ^1 ^我大约calloc  每次共计大小为5K*16bits,6 S5 Z+ z7 i. j: }4 A
而默认配置才0x4000、需要改大。
$ x& E  E; Q$ U# h0 y* {. L' w6 p" E
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
* t! Z* V( W) P, Q; {& U5 J" eProgram.heap = 0;3 S6 X0 p1 _4 N6 ]8 {
Program.argSize = 100;  /* minimum size */% O2 a6 a# w3 X: G, `; Y
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-11 04:43 , Processed in 0.041863 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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