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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

. B* S0 h( y+ M    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
: j/ X/ w5 i" I+ I, Y9 N8 _/ J  k6 Y6 N# z. d; S
其他程序段。。。。。
, B) b/ G6 L; b, Z4 f # h) L4 Y& j/ S1 N
   free(x_d);
( c+ y4 }8 L# O1 P: x! A5 s; x' A. z; e1 A
使用DSP侧单独调试功能,验证动态申请没有问题,
2 N# h9 l! F& J
) Z$ }- w4 J# m" q  F但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
4 O0 ^7 z( @7 K! k: ^- F8 p
5 c, B: G$ q9 i

% h: w) Y6 {* z' K  u+ |' Q
: c* }6 t5 g. l6 [$ K2 G' z2 U
! o! ?# Y8 Z! K# U7 T; Y  y- S7 L* h& x
8 {4 p/ v1 d5 e: E- b% l
4 ?" L6 v9 _% a: K# Z7 c( F+ P3 T

- o# @; q( O0 g8 ?: ~( |
' V, Z1 H) |: z9 T9 p: F4 a
" ?$ i% @; c8 z" [7 f
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
8 }% G6 R. R/ G) L, J我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下$ I3 {; g; C9 v# e  G3 u! l+ F5 g
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)9 t- ^' P& D. Q+ Q& E( y
( z4 R' L9 K$ ^2 D" {% [* R5 x
是不是需要在DSP.CFG中进行配置5 c) M( H# g+ j' s
我现在的配置为
- z9 [+ a( U: o6 _& @- ^
9 `- z* {5 a0 [0 ^/*
; d9 ]- \, Y! H *  ======== Operating System Configuration ========+ l/ F6 O* ?/ e9 R! z6 T
*/* @: X& Q, X& ?7 F5 x3 Y
9 h8 r$ l3 s; m/ w+ U5 A- w
/* no rts heap */
4 i% _, H% W4 @: l. w. ]Program.heap = 0;
& {1 `* b5 \2 {Program.argSize = 100;  /* minimum size */
1 k: m" K( U* X, p+ m% ^Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大% r( Z; F  P& d5 v0 O' q* W
" ]6 ^6 D2 A/ s
/* create a default heap */9 o) P+ h; J2 {1 [: `0 ?, S* ~
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
, o2 Z5 E9 t  q7 k& ]var heapMemParams = new HeapMem.Params();& j5 e, A" n* F
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大3 g5 z% l8 {! `# ~$ v1 o& W

, F+ {/ c9 w! A6 J# ~/ F
var Memory = xdc.useModule('xdc.runtime.Memory');# y7 ~7 ]8 `3 r% }1 M" G! ?% J% R
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
; `$ @, |, O$ v5 f7 n3 d% m: h9 i3 U; e  @0 W
/* configure System module */5 E9 h9 s' ~- I! F
var SysMin = xdc.useModule('xdc.runtime.SysMin');: h0 I# Z. o" v: B% z4 r$ k
SysMin.bufSize = 0x1000;
& M! V* W! K* L$ C; f1 z0 `SysMin.flushAtExit = false;
: c5 S! g0 [$ y! X, u6 l
% o& c" j( m! wvar System = xdc.useModule('xdc.runtime.System');
3 b( z# ^8 v4 u! TSystem.SupportProxy = SysMin;9 n  X* O$ o  b# A: w9 e) b2 w

4 l/ k" `2 E: D* X9 K. ]  ~$ f0 t/* configure SysBios to use the lower half of Timer 1 */
4 O! Q: ^- [4 P8 L  }% s* n$ pvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');/ S; ~" U  J0 |" x& b6 V8 X
var Clock = xdc.useModule('ti.sysbios.knl.Clock');$ m( F8 U; y, \( I4 ~! K: m
Timer.timerSettings[1].master = true;
" d, X  r9 Z- p5 S5 e8 s/ ^, R# GTimer.defaultHalf = Timer.Half_LOWER;
$ J) ?$ }# z1 s' e0 d" XClock.timerId = 1;
7 G) Q! g; Q0 l2 r# v$ h: X4 V# F" I2 w% C* N" P- K  d# {
. M& ?5 q4 n" O
/*
, a! Y6 U  A/ }( j, Z *  ======== Miscellaneous Configuration ========
/ h9 [7 X1 t7 l& Z */
. ?6 P) ]/ m- a3 w: P+ w3 b* `( n4 K- o$ I  a- A6 v
/* set default diags mask *// R6 \2 K& ^: a! s
var Diags = xdc.useModule('xdc.runtime.Diags');
; [/ h! w6 V" C5 Avar Defaults = xdc.useModule('xdc.runtime.Defaults');7 Z$ `; j9 V, v5 v) g$ j7 f
/ F* M5 H3 d7 Y/ H0 X
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;- H+ J, @) ~8 [( d) z. }8 {
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
, y$ l9 e+ ]9 rDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
: a/ s- Q9 J. GDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */: O1 w7 r# y6 I6 E. l% ?
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
7 h# _, o+ `& R! kDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
7 h  W6 n$ L) \1 x5 zDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
  Y& Y+ }9 A" TDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;' t6 Q* _9 i) J, N0 D% V
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;5 c0 }& S! w$ @: ^9 S
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;" U1 a/ j: Y7 S! [( y! b
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
' Y6 ~6 n% e8 ?Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
2 v9 J$ o7 ]$ w9 W- S! ^2 N0 C2 EDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;3 U& v& o2 T# |- Q$ g
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
4 V  r- ^3 N. R( [
6 B6 c9 N7 }9 O" B) }$ O) n/* override diags mask for selected modules */6 B  R  M: W1 y- L; ~$ B
xdc.useModule('xdc.runtime.Main');
1 a; Y2 f" ?: EDiags.setMaskMeta(
; y" b" d$ B+ c7 R( u    "xdc.runtime.Main",. o4 f8 [9 c/ p
    Diags.ENTRY | Diags.EXIT | Diags.INFO,  ]; G- }) {3 l
    Diags.RUNTIME_ON( ~6 O0 m, O: d+ i3 @
);
1 N5 S8 y! y7 b7 _1 T/ F5 ?' }6 |' f
var Registry = xdc.useModule('xdc.runtime.Registry');
. C% `: |& Z0 u5 CRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;' z0 x8 G  h9 H+ b5 o
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
3 v6 l, I' v9 L& |: X3 o5 _Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;5 q. Z' z0 q- p( E1 }
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;5 |! A/ S1 f5 M! [; ^: `
8 @' W9 @/ C$ z9 u1 E" ]4 f" A2 c( w
/* create a logger instance */
: S- X( u$ }) e4 H8 zvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
% ?/ e% ^- C1 F  j2 K  z5 m; z1 {var loggerBufP = new LoggerBuf.Params();
% ?  T9 E! Y9 c* l+ JloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
. c8 P: S1 Z8 D4 o* b# xloggerBufP.bufType = LoggerBuf.BufType_FIXED;; ?+ Q" ]# I5 v* }4 b6 S  q3 m4 V
8 d; @3 Q" W* r/ b9 s' g- E" K
var appLogger = LoggerBuf.create(loggerBufP);( C- v1 ?& m# m/ D8 o: Q
appLogger.instance.name = "AppLog_Core1";7 Q: |6 l* [6 K' E0 C# e( B. |
Defaults.common$.logger = appLogger;. l5 Y: R1 v' a* g" \* Z% m$ Y
Memory.defaultHeapSize = 0x8192;   
: t$ O, L. `+ H% H% D9 ~. ]Idle.idleFxns[0] = "&LEDStatus";
' ^+ o/ \0 j) r8 u/ s0 D) lCache.initSize.l2Size = Cache.L2Size_32K;8 h, F) G% M- k1 d  p+ D+ C
* l+ ~/ c2 M. e$ W$ a! o+ [
回复 支持 反对

使用道具 举报

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 */' z  l( I; M! z8 Z* Z2 y/ n' Z
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
) q  X- B# Q5 w# |1 }) Yvar heapMemParams = new HeapMem.Params();
) e0 B" F/ J3 B9 d0 x- a4 RheapMemParams.size = 0x4000;- n  \5 V7 K) H/ Q/ t1 U

' V- P$ W# ]/ |8 @5 e( I1 nvar Memory = xdc.useModule('xdc.runtime.Memory');
2 N: v5 \6 q3 _/ k9 nMemory.defaultHeapInstance = HeapMem.create(heapMemParams);) K, `, f$ F7 B% E9 H: ]! m/ D1 ^
& _6 Y. G9 @; Y+ n" `
我大约calloc  每次共计大小为5K*16bits,
9 w+ t) T: h1 G. I& W9 j! V而默认配置才0x4000、需要改大。; p0 U& l2 I" I. Z

; I, A0 V/ Z* V
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
+ M  i+ S' `$ a' AProgram.heap = 0;
2 e7 g4 U' |( j4 IProgram.argSize = 100;  /* minimum size */% L5 X* r1 w, `) J5 E! R
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-24 04:23 , Processed in 0.043890 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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