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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
0 q% o9 S) Q0 _* E0 h5 b  B" d4 K# h
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
9 r) G8 b3 p/ J! i
. y* Q3 ]4 b2 U# z其他程序段。。。。。
7 ~- m5 C% I" |# d
1 X, q. g& `/ b/ W* W5 V, J   free(x_d);
/ j- }4 _& r: }* D- h) _& ]
6 j$ ^3 N& k0 T7 l使用DSP侧单独调试功能,验证动态申请没有问题,, o$ V% `; v1 G* x! F

: _, r( _9 J! o  V% S, w" C但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
- M" B% D! z2 r( i

. n- _, E) l- M5 Y" @  P4 g2 Q: J
, u) b$ n' m4 m* H( T$ L3 t- o' h: T* I% i

; _% [: |. T9 U! A) N% k, b: ^8 O$ @8 w5 z" f- V

; h% n  w1 X& |8 ]2 W
! g( A3 p9 u1 n: Z1 y
; b8 s7 [0 ?; E' g6 U# i! m0 s. G* k9 l5 N; K% {/ g2 j

7 M/ f& I: y/ P! o# h% Y  l
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明" j. O2 g  o5 n; l9 w7 |6 i
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
7 P2 d! a9 _6 d4 N* \; F(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
" \: Y/ [* J+ I: J- x! s0 p" Z

; @  y* R2 t/ M9 `9 C* c1 {! W4 N$ P是不是需要在DSP.CFG中进行配置
/ S# E3 t' e1 [我现在的配置为
: _0 `% c$ t! s8 k& H/ @9 W5 u" S. `. C" k! ~3 A* j5 \; I
/*
, a7 `8 L$ @& s6 f7 C  U( C) H$ a4 Y *  ======== Operating System Configuration ========/ `, n0 V* n- H$ _7 G
*/
* {* x2 j+ |) A  x3 y" V* u1 d6 v  s: M# E
/* no rts heap */
& e- Z. B! ~, n4 \Program.heap = 0;
0 B, Y* v. `, [( HProgram.argSize = 100;  /* minimum size */' ^8 \. r2 ?$ y# |
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大2 o! [1 B% j& Y# z

1 B0 z3 f7 }; h5 ^! [/* create a default heap */
: }) G9 w7 r; {: Pvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');8 B* @; y2 E( i) b- R# ]/ o) _. q
var heapMemParams = new HeapMem.Params();4 p" i& }$ D2 H7 H
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
7 V8 s3 V! L0 e1 p8 R6 ]+ r* S3 s  e' g/ P! ~; X* Y
var Memory = xdc.useModule('xdc.runtime.Memory');
/ A- t: f/ P3 e4 X) V. k! e; rMemory.defaultHeapInstance = HeapMem.create(heapMemParams);; W3 w+ o# D6 ], @
* f$ j) i' j4 ?( i. T
/* configure System module */
3 S9 s: z( [/ Ovar SysMin = xdc.useModule('xdc.runtime.SysMin');4 e$ g( a! ^) B4 X
SysMin.bufSize = 0x1000;3 Q! ]! C' C+ ^4 o2 H
SysMin.flushAtExit = false;
4 G- q2 q$ g. r, e  x! \5 L/ {' q
% f% T% A* O% p% qvar System = xdc.useModule('xdc.runtime.System');
% p8 z( }- ]" d; w5 U5 D/ j8 ySystem.SupportProxy = SysMin;4 t- o, h; \! T' S
: E' T; W8 _7 U! t/ G% O# X
/* configure SysBios to use the lower half of Timer 1 */  c5 V3 f* c+ R9 U3 ^0 F, B
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');1 }- u) p  _6 p) ^( `! h! g' K, O
var Clock = xdc.useModule('ti.sysbios.knl.Clock');3 x0 {- L& P1 ~' G8 K1 P% }4 E
Timer.timerSettings[1].master = true;
# }) N% \- O. k8 |" }5 L8 DTimer.defaultHalf = Timer.Half_LOWER;
  y  A% F6 l: ^0 ^8 h9 j8 w2 uClock.timerId = 1;
. g( S  G) A+ H/ n" B0 G& g9 T6 u6 e7 ~1 X4 v

, `, j9 d" O9 ]/*
! ~; N( }, D  |  D$ Q) g *  ======== Miscellaneous Configuration ========: D' O4 |. S; {$ k3 [0 Z2 _. B
*/
4 U& r$ Y2 W4 W) l1 s) {7 }. X* T  k' Q8 ?8 X, f% M
/* set default diags mask */
5 N/ L, K* a5 z- J2 x  I4 H, Qvar Diags = xdc.useModule('xdc.runtime.Diags');5 c( W: I& v' R2 y/ a, i. U9 Q5 h
var Defaults = xdc.useModule('xdc.runtime.Defaults');
0 s4 a* a$ ^5 b6 J0 U$ c1 g* d  O# r
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;+ B2 m- u/ ~; v- ^
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
. z2 O* U% u( _, n6 O) O$ b4 }( QDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
) @7 `8 F3 w7 v: a9 N) o. RDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */  h3 Z! g" Q7 T. H. ]- e9 F
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */) Q3 V) S& P, X1 F
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
) t1 `! J( P0 f. xDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;3 W" [9 U; Q3 p0 p
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;, v6 p1 w  q$ q! p4 q) }0 W
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;% q6 p! P2 \$ [+ g+ y. v  r1 e
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
* r5 s# ?1 a# m$ e2 hDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
" G+ \  l8 p8 G: r8 y, F9 f% N: fDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
  W6 |( j! M2 ^  ^+ `, `5 dDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;( u0 c# x4 F5 X. Y
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;+ G- h' D7 X0 X3 I
. A& C0 P3 O( M" K1 E  I4 Y
/* override diags mask for selected modules */
& k6 a; s* f  L+ G  s( Ixdc.useModule('xdc.runtime.Main');
9 f; y5 M% I# O' X9 G; M  LDiags.setMaskMeta(" ^, m/ m; g; ]7 K' ]
    "xdc.runtime.Main",
6 V/ V( A& z. Z/ ?8 k  h2 w    Diags.ENTRY | Diags.EXIT | Diags.INFO,6 c- p* @. G3 U
    Diags.RUNTIME_ON# b: r+ m: k+ o% E; i/ b- ]' `
);
' T; Y- t4 p& V. f# R0 B) R
; D+ a) L9 }6 `* ivar Registry = xdc.useModule('xdc.runtime.Registry');
  P" E8 i' _* S* G$ j4 m+ i6 pRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;4 V6 P" n$ m: d  o) T
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;1 b1 P; G# c. t; A, T
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
3 r5 [) V# X2 B$ yRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;+ d" X" L% y5 }& e
0 _6 l- {5 ?% G. ~( [
/* create a logger instance */: g& g8 I$ t- L, R. a* f8 R( _
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
' J1 ^; o& {2 T) e! J( L' f! r2 @8 ivar loggerBufP = new LoggerBuf.Params();1 a  S) |6 Z' O0 g% C3 b7 H
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
5 n# q3 }- u3 W4 N+ U6 j7 o( ]loggerBufP.bufType = LoggerBuf.BufType_FIXED;8 `, D% |: I% |- ?" ?. P

9 r' c6 h" r0 o& J# Y: Ivar appLogger = LoggerBuf.create(loggerBufP);
# a. O2 c. b0 \8 k) sappLogger.instance.name = "AppLog_Core1";6 o* w6 X: J' c2 K5 C1 e9 G5 G5 z
Defaults.common$.logger = appLogger;6 u/ j- Y. O* t% n  w
Memory.defaultHeapSize = 0x8192;    , \6 a. \5 K- h8 v
Idle.idleFxns[0] = "&LEDStatus";
8 V( I8 G2 C+ Y9 ~7 z4 sCache.initSize.l2Size = Cache.L2Size_32K;9 o! D7 c( q8 b8 m# m

0 u; J* n# t: ?# h! M" ]
回复 支持 反对

使用道具 举报

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 */: R4 V/ ^3 n) [6 P3 V& c, I
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');8 i, S( h% S$ q, V% @( ^
var heapMemParams = new HeapMem.Params();
9 m: Y8 I! e; X  s( }heapMemParams.size = 0x4000;  ~, L3 M2 f4 O# V2 H
4 _) j/ E2 K- U4 S
var Memory = xdc.useModule('xdc.runtime.Memory');
8 O) E; i2 o$ r7 @: JMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
% q/ e6 \9 p* f/ q" {8 F/ U$ D" z" P; D2 J! {
我大约calloc  每次共计大小为5K*16bits,/ P) z; c3 j+ W& Z- r& C2 n+ c
而默认配置才0x4000、需要改大。
9 @1 h7 ]" n& a6 S- C/ \
( [) P3 s5 \+ t! B# U3 O
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
5 s; b4 k3 \; m5 |Program.heap = 0;
, R7 B4 x1 C4 G2 R8 O* r6 v7 V7 q/ |Program.argSize = 100;  /* minimum size */  y2 y& t- j5 S% ~$ S
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-10 09:01 , Processed in 0.042553 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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