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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构+ U; R! B$ [" c9 P" h
3 B( g: u# d# T. W
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2565 N3 K1 K4 C' Y" g1 R4 k" V; x! m
; l5 A3 `3 Y% W' p2 b6 w
其他程序段。。。。。
: V  r! \: I9 W$ a& O/ l- b" u ; Z/ U/ d3 o+ ^! j+ A
   free(x_d);
/ [# M1 Y: ]1 Y5 }9 Y
, `& n5 u4 E5 C: C; E8 A# N使用DSP侧单独调试功能,验证动态申请没有问题,
8 V+ }* u& U5 P* T: E5 P1 O
( v/ n2 v) G! e# f! `' n但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。- T, }; b$ b4 v! ]

! j; J: I. w( k2 ]7 K% q8 p' r4 `' Z* e. ~: v  G, r

  S# j! d0 y  A9 J6 F# V/ ?2 P! f+ t5 O9 t( j" g; R7 o; {

, Q* J7 ^  r! e  |; t& a* B+ {

! R0 n6 m2 u0 o0 N
+ J! c5 D3 r5 J7 J6 ?! ^9 t& J* U
6 `$ n# f1 R( w4 X. _# a) G  C) ^* Y* b
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明( c0 R8 ?' q3 v9 l
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
) c" a7 W* g9 Q% P% z& c. @5 ?(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
& z3 n' {  M! _8 p  y

( R2 d1 y! i) }* e- ?; b. t是不是需要在DSP.CFG中进行配置5 M/ h4 g, ~% E, P& M% i5 C& s) }9 C
我现在的配置为% h% @3 u! P' b( g+ y+ K( U7 c

! f9 a- x/ Z) W4 f/ H4 N0 _7 {/*
+ ]* U/ G$ h9 r: x- ^4 q. o *  ======== Operating System Configuration ========
$ J! X" B- q+ Q3 c( f# n) v( a2 H */
$ a& H( w; _$ [9 c0 ~5 N) _8 t2 b+ y- p9 S; u
/* no rts heap */
9 o0 R9 c) p( B* vProgram.heap = 0;' o* ^  M1 A7 O/ g% n& ~9 b7 }9 E
Program.argSize = 100;  /* minimum size */
. E. M3 Y9 Z7 k4 i" |" A. eProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
8 Z% u' b5 n7 ^: \: L
' _: i( G  I2 e6 Z1 ]9 T6 w/* create a default heap */
8 }& N8 G( D3 m! u; i6 L& g: svar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
% ]/ ~9 s0 ~* q; @1 r* j) Mvar heapMemParams = new HeapMem.Params();, I) j1 t2 s) C! \5 ~
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大* `. u. `* ~; S, g$ i2 X5 E

( T, n2 L' D0 `% P
var Memory = xdc.useModule('xdc.runtime.Memory');
8 Z. ?. i7 v9 l: j8 sMemory.defaultHeapInstance = HeapMem.create(heapMemParams);3 ]' O, M) P$ F# a: Y2 ^- e* M  v
0 V; E5 C. b$ H+ S. t0 W9 F! C
/* configure System module */: \; j" u/ f# {# _
var SysMin = xdc.useModule('xdc.runtime.SysMin');( J; k7 W8 U2 M9 ?
SysMin.bufSize = 0x1000;# f- X4 q; g* I+ @
SysMin.flushAtExit = false;2 n& `( _4 N8 r9 A1 v9 W

8 \. T3 R1 Q) ]  w- o0 svar System = xdc.useModule('xdc.runtime.System');
* X) q! m  P- P; m& vSystem.SupportProxy = SysMin;
1 R# i) W, v0 A# @& c7 @" w" k- g3 c0 T; Q5 _: c5 I
/* configure SysBios to use the lower half of Timer 1 */$ G) K3 B7 T, R
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');+ p' |+ @: c3 q; a: m9 S. ]6 ]
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
# R6 J/ ^/ E- t! r' N) DTimer.timerSettings[1].master = true;
( r3 @8 n1 p: }' E  Z( u2 sTimer.defaultHalf = Timer.Half_LOWER;
3 F- c% M. S  ?( g/ rClock.timerId = 1;$ a) \  f& D) B

6 \# E" F6 T' i
/ U( E% J* s3 z# p4 y& \3 o6 O/*& V( X, `$ U1 X0 i% ~& t8 B; {9 l
*  ======== Miscellaneous Configuration ========
1 Y+ ^( P0 p" h; E */; K2 T& @" E' a0 C, c* k) `$ x

4 v  Q8 E  k# U& h$ ]/* set default diags mask */# l( y# X8 b+ f8 j! u7 t# t0 G4 |
var Diags = xdc.useModule('xdc.runtime.Diags');
: M, H- N. O# e( i9 ~# Yvar Defaults = xdc.useModule('xdc.runtime.Defaults');
/ X: L- ~7 r- [8 e  S4 H5 c6 T: ]# i1 N: j+ l- t$ G* Y+ E4 p
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
4 k% W6 l1 a/ Y: u+ }) c6 u  R* HDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
8 f# Y! G  U8 ?) D4 WDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
) v: ?; c; G1 D. X( oDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */- {- L. U2 ~* A1 B# c
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
& k- X6 u! t; sDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;: R* T3 m$ w/ P
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;# W0 r" P& P+ M4 k. |3 c$ y
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
$ |* P5 y2 P4 s, E' ?  aDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
! |- ^9 o$ v" A( w( a7 JDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;3 n. T9 a: B  [. ]6 b$ U
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;, {! L/ T8 @5 n9 d
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
8 Y/ {' e) e6 BDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;5 }  v2 z/ a# Q! H0 o* K1 \  b
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;& p; {4 ?: {9 `. S0 z

& ~' A* z3 e  o2 t/* override diags mask for selected modules */( M, O! C2 @# G% ]0 w/ L# c
xdc.useModule('xdc.runtime.Main');5 Q: _5 j( N3 B1 u8 {
Diags.setMaskMeta() {; g$ P, u+ q
    "xdc.runtime.Main",5 d+ G% }; Z" R: a: m  q
    Diags.ENTRY | Diags.EXIT | Diags.INFO,. k/ N. D8 _% A0 E- s. o+ g0 f
    Diags.RUNTIME_ON! i, Q1 W" a2 J" u( M- I* i# x
);
3 e% B) I0 R! D9 s7 h! x7 i
1 c0 a5 b6 p7 B5 ?$ ovar Registry = xdc.useModule('xdc.runtime.Registry');$ _7 s9 N) h9 c6 x$ G& J
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
% X$ [% z" A- i) A, N4 uRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
6 T/ ^6 ~4 C2 p+ V! l$ `$ N: NRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
+ X: k2 _# F! ?/ b- m, ?0 f6 r9 rRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
# k' N  r  c5 J' ?2 b/ l! {% ?7 n
/* create a logger instance */1 \9 N% n3 h- n* [7 S. C
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
5 a$ s5 w3 l4 j4 a/ I' G" _var loggerBufP = new LoggerBuf.Params();
! c; S! N8 G; J& A% ]" AloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */7 `) Z8 E) [3 H: v' [" j) q
loggerBufP.bufType = LoggerBuf.BufType_FIXED;/ Q5 ?' B1 F; V) W. r' _7 G9 T

- d7 G" g5 l) G+ N( G4 evar appLogger = LoggerBuf.create(loggerBufP);' j* t! r3 O$ O' r( S
appLogger.instance.name = "AppLog_Core1";+ a, i$ j+ z* W4 J( w& e
Defaults.common$.logger = appLogger;
4 a/ e' ~+ [9 Z0 K2 Z7 bMemory.defaultHeapSize = 0x8192;   
# d/ Y& j. ?. D2 Q) L2 ~Idle.idleFxns[0] = "&LEDStatus";8 v& U+ k' w1 T7 [. B* ^, |
Cache.initSize.l2Size = Cache.L2Size_32K;
/ |: u; ?9 B" a' H: c/ X2 J  B; t" y( i8 E1 y) H
回复 支持 反对

使用道具 举报

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 */
- K* E+ m7 y( e% ]4 Lvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');! t6 f5 y5 F  \( v/ R
var heapMemParams = new HeapMem.Params();: \! a, A8 q* x" E! h, D: K
heapMemParams.size = 0x4000;
% R3 c. t0 D6 ~" q# q7 I
9 t6 Z3 j7 [. j3 v9 `& @, pvar Memory = xdc.useModule('xdc.runtime.Memory');% X' T, a, ^5 M
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
/ A/ ?! b4 L* }/ C; w! Z8 i; \4 x/ Q& `7 c3 D# R# {# _* k$ q8 o4 {9 y
我大约calloc  每次共计大小为5K*16bits,
  n, q+ Y; y' l0 W6 ^: T而默认配置才0x4000、需要改大。
5 t. \- B7 g, p! L. r: T# q4 j/ x2 b9 a5 ^& I' M
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
% ?  @) Y6 Z! Z! f7 ]! Z6 WProgram.heap = 0;
/ G" O6 p% M5 i1 t. l3 A9 LProgram.argSize = 100;  /* minimum size */; \* C3 r* i' c; A; K) }3 E. Z
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-9 09:29 , Processed in 0.040867 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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