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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

# j" w  B' b  n. t    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
1 u8 E' a! V  p. D
/ `- ?$ G1 T  j8 H) s4 a& J# ?其他程序段。。。。。
) d5 v& c2 H9 q) k" c
3 J% @9 g. x! H" @   free(x_d);
& n, W1 {$ r6 p2 ?0 q9 G0 e2 s+ R. L+ ]
使用DSP侧单独调试功能,验证动态申请没有问题,
6 s/ L& U' {& r$ p- r2 u$ k( t" O3 S! H
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。- @# x2 f. J& V% i( \

; Q7 P5 K9 E1 [, j- H& l# t# `6 u  ]0 Y9 ~" g

/ m1 T: r2 Q2 w+ @5 p! L2 K7 j: I+ O. U# }+ ]) M4 @8 q/ \
# ^" m" [. M8 I; E6 d6 Z2 h

2 L/ Y! e$ P4 {6 E+ U& l2 S
9 b; {2 p/ u! ~7 i# \( q% m
1 X; t. K) X6 A
" V* L. C3 T- \
, F) C% m' _! e
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
( S5 I5 N' d2 b我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下0 G1 M  c1 H- j7 ?8 E
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
' Y- w# B5 f/ x5 ~5 y$ E

; T0 O+ w+ J; A是不是需要在DSP.CFG中进行配置( m" F5 T- Q& Y1 e/ G# T; _
我现在的配置为
+ E1 K; X3 n# l% G
7 |$ u- `" F  J6 t/*
- T6 a  o) b: i+ o *  ======== Operating System Configuration ========. H. c% @* H' Y
*/3 p6 f, g+ \, T# y1 C$ |% _; _
( o! Y( I% i9 e/ Z1 a3 A; x* i
/* no rts heap */
8 O+ O& e+ f5 q, q: r; w, LProgram.heap = 0;, c3 O# R% C; P' N
Program.argSize = 100;  /* minimum size */+ ^+ J/ C% W$ R5 z" ~0 ^4 {
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大  R9 ]2 J. i5 X* v+ X
* K8 E$ t" A& L7 e9 G
/* create a default heap */' {+ D7 Y$ v& q# a, I
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');& u* g, n3 X8 N  T7 n
var heapMemParams = new HeapMem.Params();
- z6 U& i7 [) ~heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大0 N8 a  M* S4 ~$ ~  W

( S+ }, a, u/ c: E
var Memory = xdc.useModule('xdc.runtime.Memory');1 m& `# F4 u2 [' G( L( n$ g. I1 T
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);* E! R! w) {1 N4 A; ~' W

) x9 P( ~& n/ i/ r7 d) o! R0 e: G/* configure System module */) N+ p0 ^! V* T+ ^* N
var SysMin = xdc.useModule('xdc.runtime.SysMin');3 w3 T; @; f) U
SysMin.bufSize = 0x1000;* u$ ]* }9 R/ N' V1 C* O/ \
SysMin.flushAtExit = false;
+ y  O) x! v- ~' m3 N) A3 M, {+ {2 W2 o) Z3 z, {
var System = xdc.useModule('xdc.runtime.System');; E) ~  e" X  C  E" W3 R
System.SupportProxy = SysMin;* S9 b! T+ `; C
/ G  D9 a9 W- T6 K, N
/* configure SysBios to use the lower half of Timer 1 */
. P. K0 z1 m3 G( J  t$ F: A7 D  Mvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
4 A" g2 x' z9 ?( S+ t& j/ Lvar Clock = xdc.useModule('ti.sysbios.knl.Clock');" F' f1 L2 ], p- L% Q& S
Timer.timerSettings[1].master = true;
$ q% E) L' ]  J  K# VTimer.defaultHalf = Timer.Half_LOWER;; r" V2 ]$ z% _4 s& r7 O
Clock.timerId = 1;  ]9 O9 x! ?' U3 k9 o' K3 X/ I
& [7 }9 F! C3 @# g
* i- Q8 d. a0 l. L0 L
/*
/ a1 a3 z1 o$ i+ D% X, i" Y *  ======== Miscellaneous Configuration ========
1 ]6 ~6 V; O3 N& T0 n *// a" @% o) l: F; q- }* o* c

8 w2 H% c- E. b& u% I$ ]' O/* set default diags mask */
/ }; z( S. a: ~3 z0 r8 e0 A3 Zvar Diags = xdc.useModule('xdc.runtime.Diags');1 L0 {* t/ |" I/ l% H; A( ^2 ~
var Defaults = xdc.useModule('xdc.runtime.Defaults');& V2 [' W4 V" a
9 Q7 h/ m9 b- o9 ^1 _1 \
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;5 V+ y# T0 ]2 z0 E& p# c
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;# k& L6 m0 `1 h( ]2 o. X& o0 c
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
: `7 O: P3 ~8 a7 ?. |& ~; x& V% sDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
) v: i& J- }3 `1 RDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
" x7 M4 y: ?2 [7 b2 y: t9 jDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;5 [1 ^. j* i: O. h
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
" ~* O8 @9 `( B: V( ~* PDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
. T, N; Z1 H- u/ F0 EDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
$ b1 p( g* y% v! a% d! c5 R1 p9 XDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
+ W2 S# }: m9 A  b9 Q  U" l; ZDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
2 \+ j( G" J! b3 }* ODefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;2 z- T# G  V5 l0 z3 L, B
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
7 g- L9 W: C" C, r" p; |Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
, e! t( m+ F) H
; j+ [  g8 F) L+ Y+ `' E6 k: k+ ]/* override diags mask for selected modules */
  `2 g; ]5 \9 X9 Q9 Jxdc.useModule('xdc.runtime.Main');
! |7 g- i1 H/ P5 u) l; G# }Diags.setMaskMeta(: g9 C  ]4 ]) J; O5 E+ G& f
    "xdc.runtime.Main",
$ x, B9 X& r, j& d+ x1 w5 b& r6 |    Diags.ENTRY | Diags.EXIT | Diags.INFO,
- k2 _8 f4 M0 w    Diags.RUNTIME_ON0 y$ b) N8 _$ v3 }' d
);- y; u: ?$ y3 m% q  y& @9 x
' B2 R( p. t, I9 [  C. C. i3 n
var Registry = xdc.useModule('xdc.runtime.Registry');
3 _7 e3 d; R! c2 k& u% N# {, zRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;, G. _6 h2 C& W8 S$ T9 I; L) [% |
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
+ `$ @. g- {* W# Z, fRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
) H4 o7 G* F, Z- YRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
, M! w) x" X- f! j9 z: O3 n4 y& _/ N- C( Q3 I6 w( r) ?
/* create a logger instance */8 @) b" w) G, w
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
- W7 b; T+ I: fvar loggerBufP = new LoggerBuf.Params();
& V( Q8 f1 D" O! A. E8 eloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */2 d5 k7 s8 Z- K: }$ v% e9 C
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
  X, r' B$ ^" n& Z
# \0 c; j  b: C7 T$ Dvar appLogger = LoggerBuf.create(loggerBufP);' @* J% x3 k8 V! _" ]$ H4 S. A
appLogger.instance.name = "AppLog_Core1";
6 P) R" |! F3 q: F6 D4 sDefaults.common$.logger = appLogger;
7 o) i/ r2 E! J3 N" h+ }- c# XMemory.defaultHeapSize = 0x8192;   
3 v1 |. T& W8 H2 lIdle.idleFxns[0] = "&LEDStatus";
* U; w0 N; x* W8 {7 tCache.initSize.l2Size = Cache.L2Size_32K;
* |, h( w0 ?4 M! i1 d6 w  |1 x; E" W; l; j. n0 ~' w$ z
回复 支持 反对

使用道具 举报

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 */
& ~& X6 |/ j! l  V% Tvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');" `6 E2 q# x2 e$ a- d9 Z
var heapMemParams = new HeapMem.Params();
* `$ ]/ s8 e7 g4 xheapMemParams.size = 0x4000;
' B7 _' v1 N6 U4 F
. g% g' M; y% x, s6 @* {) i5 Mvar Memory = xdc.useModule('xdc.runtime.Memory');
- \2 E# }* F" [6 @+ `' j2 eMemory.defaultHeapInstance = HeapMem.create(heapMemParams);! x5 {- m; ?/ \* M8 s
  D2 }9 m% ?; V/ j" h% E
我大约calloc  每次共计大小为5K*16bits,- M6 `! F0 E! M8 S& u/ c+ G% r
而默认配置才0x4000、需要改大。, j0 D1 C8 z8 s! w

7 g5 _0 m$ \. q: m5 T, {
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
% J9 @& x1 ~) C  q9 |( gProgram.heap = 0;' m6 g2 _; T' P# P% `
Program.argSize = 100;  /* minimum size */
' @- D2 L- K& Y9 h( |! K/ AProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-3-6 11:54 , Processed in 0.052305 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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