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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

9 N: R' n+ z. ^. e) y+ J' Q    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256  @, `# k4 D4 }# }& G- j$ C

6 E, e6 o9 c- [  P' [- i其他程序段。。。。。7 b8 r( q$ o/ q7 r
: ~: Q' r+ O8 b* [- k: {$ f
   free(x_d);
; a; S# b$ x4 v8 ~8 ~# E( \, |7 e$ x' |; K
7 x. B0 W6 W+ g7 i5 S( t使用DSP侧单独调试功能,验证动态申请没有问题,
" @; B) l$ ?6 A
3 Q) T7 j( P1 e& J, |4 ~但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
  H5 p& \0 r+ o6 \8 _
4 a; o- \# V/ F9 K) K$ k" |

. a2 ^  T; J$ t; |* Q( A  A0 P  f2 i( O
1 C6 [3 l3 U$ M. w) m9 \& n

2 W  J6 F* j4 s+ o. J1 ^" N$ t. E+ {1 Y( r" V: z( d

. S& u! N6 Q3 [+ g! I- u) Q" _/ `& B

# i1 [" v& J8 M% b5 ?" {
) z6 u3 `' k* h2 X) B5 }
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
! L- \3 m( h4 a* `8 U' `我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下9 b. f. n! O. Q2 M
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
2 D4 }1 |+ a; B
, K, R* z" e8 x& {6 F* b2 E+ i
是不是需要在DSP.CFG中进行配置
# G6 @- P% v- u: n4 s  q2 q  R9 x我现在的配置为
6 j- ~) Y3 k9 j# {; n9 w
+ j3 l* U; A4 j- f2 m/*
6 R7 v  s3 h$ G7 o: k# W6 i* r5 D *  ======== Operating System Configuration ========
: u1 y+ N  L6 o) U/ W/ h */7 S1 Z& \' A3 o  b0 V9 K$ q- l5 G

, E  w6 C5 R+ R0 n) g# o/* no rts heap */. o) }3 N3 `$ F* ]4 y' F+ ~
Program.heap = 0;- S% t- Z- Q( j' D8 C7 x
Program.argSize = 100;  /* minimum size */4 v9 W1 X% @: [: @
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
& T9 E$ n. d/ ^! q1 b. T% Q9 `! M
/* create a default heap */
' `* s3 f) p0 j1 nvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');7 H+ ^" k5 R. L; B
var heapMemParams = new HeapMem.Params();" ?5 y. I# g1 _3 z8 R& c7 J
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
$ N' Y; I6 P" f5 D/ P& ^, D5 Q  Q2 v! U" _8 E
var Memory = xdc.useModule('xdc.runtime.Memory');
- |8 ]1 I3 j( i; g* n. bMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
' B) L9 j$ o. d+ [* Z' M  {$ D* ^+ [; T) j; N3 V: R
/* configure System module */
+ T$ D( w1 x/ ?4 ]' G; u! {" r4 c! dvar SysMin = xdc.useModule('xdc.runtime.SysMin');
& D; l2 w! @  |4 Q4 h8 Y4 ^& a1 iSysMin.bufSize = 0x1000;. K  q. H6 S$ ~- x
SysMin.flushAtExit = false;
$ @5 L; i, u" _# h9 p/ i4 L1 U
6 w3 l5 M3 m& F# [, H/ _5 B! X/ x: wvar System = xdc.useModule('xdc.runtime.System');) X+ ]6 [: D3 C
System.SupportProxy = SysMin;
/ m" q# Q6 V( T0 D$ B2 P6 j5 A& o
/* configure SysBios to use the lower half of Timer 1 */
6 y8 {+ W6 L& m6 hvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');+ g+ a6 P8 a5 Z3 ?8 B6 ~2 m
var Clock = xdc.useModule('ti.sysbios.knl.Clock');5 m" ?) v! d& x8 N; ]
Timer.timerSettings[1].master = true;
. d5 P6 i$ @# p  bTimer.defaultHalf = Timer.Half_LOWER;: ~# |- C' [' J1 N/ U
Clock.timerId = 1;
! e2 f- i3 g, e5 ^" Y& i  X/ w' Q  M( f# f: S* t: A+ s/ p

+ |: D9 J/ t" U: B# P8 I* o+ ~/*- F' [. m4 T( z  Q1 m& u
*  ======== Miscellaneous Configuration ========& i: _! f. z- ^, i
*/
% u0 Y* n" i7 v% z7 a& Y' Z+ G+ j# R- U" s, g" |/ ?
/* set default diags mask */' ]* o/ j8 t& ?- F: G3 Q' f: N8 C
var Diags = xdc.useModule('xdc.runtime.Diags');) O& O* c9 u# x( f! c
var Defaults = xdc.useModule('xdc.runtime.Defaults');
7 S* s& b* H1 s. G/ E! r  r5 g% u) }, X& T; [
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;: W' u$ o6 x4 O6 f2 O7 F
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;# K7 N& T' G3 N- b! P
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
1 f. |5 W% w6 l& G) W- Q2 mDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
6 v7 U2 D6 B# K2 ^8 cDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */1 N9 a4 l& K: H5 J; I. R2 F  K
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;% c3 Q5 U" k+ a  j$ X
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;, B6 B' D1 k( T, e/ {6 p) C4 o
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
4 l" t5 `( v- S& p! _+ F, @3 X4 YDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;! L7 G' K7 ^6 _' Q2 q. E8 Z7 s
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
4 o, F- T6 b) d9 i# E& w% j) WDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;: E& [3 U6 `$ w! N2 e
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
" q) K' T% x, i! D/ rDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
& o2 T, t. o' P- S$ gDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;, y2 P# W! q) X

; \  M$ s4 u1 u6 m5 k' t/* override diags mask for selected modules */' G+ K0 ~1 v# e
xdc.useModule('xdc.runtime.Main');
1 f  J: ?" h& L8 H. m7 p7 e  j, s( BDiags.setMaskMeta(
, p/ \5 o: |( `+ Q    "xdc.runtime.Main",- I/ ]" b% V0 N* F9 b
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
. h: p9 L! A$ t) s- i    Diags.RUNTIME_ON
, G3 i6 a# q5 ]$ ^2 t: T: o2 c& c/ C  o8 x);
/ D" p- f% w" Y4 [& ^$ b. {5 d$ S% t; O' h
var Registry = xdc.useModule('xdc.runtime.Registry');5 R- _  R( E9 O, `4 Y2 @
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;& C# a& p! B( f# f
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;$ Z. Y. n+ ]. x
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
# J+ R" G" ^+ j( R) S5 `4 s* yRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
& O# X& ?7 D7 N3 I+ ?1 Y2 X
/ l4 ^$ W3 u4 Z/ }/* create a logger instance */
" }; @) C- L+ x8 ?% tvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
# l9 t: d4 E# {2 avar loggerBufP = new LoggerBuf.Params();% X4 L/ ?. v3 @4 r  O
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
5 d+ n( s  O- g% N! S# ologgerBufP.bufType = LoggerBuf.BufType_FIXED;+ n3 m1 R  ?+ Q* {+ Y

; l/ C7 d3 j+ l, @# |" G" {var appLogger = LoggerBuf.create(loggerBufP);
6 J( `! Q: W# }9 r' ?; `" [appLogger.instance.name = "AppLog_Core1";
8 P- V2 f- @$ d2 r& B6 HDefaults.common$.logger = appLogger;6 y, ~) G: `- ]! D& `/ |  G3 k  g4 N
Memory.defaultHeapSize = 0x8192;    ; Z& s5 c8 U7 ]4 ?0 r
Idle.idleFxns[0] = "&LEDStatus";
, O: w7 k* Q7 [5 K! T- GCache.initSize.l2Size = Cache.L2Size_32K;
( `; W. V! N# F6 Z: V3 u$ Z8 t9 P0 Q* J7 ^9 q* k
回复 支持 反对

使用道具 举报

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 */
/ D) l% J, ~1 s: R, ?  Z) l& \var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');, _3 m$ I3 q* E& Y
var heapMemParams = new HeapMem.Params();4 E. B; ^# @; R+ I9 L, n
heapMemParams.size = 0x4000;
$ v* W. \! M- M/ _7 P
/ e5 U! }' `( b: ovar Memory = xdc.useModule('xdc.runtime.Memory');* D/ J' T5 X& D& ]/ k
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
( K8 Q# g5 }! r" ?7 Q9 K+ ~5 g/ e' D1 ]" M, _
我大约calloc  每次共计大小为5K*16bits,; X' w# D7 j1 ~: A
而默认配置才0x4000、需要改大。/ ?& L. q3 S; c6 j  C8 X2 ?
, N: f! C" D1 n7 T2 Z5 l
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */: z8 Z/ g4 }, [3 ~; M
Program.heap = 0;8 b0 _( ?, }' R2 {  C
Program.argSize = 100;  /* minimum size */7 i" p+ J2 c9 R% X" `) [
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-23 17:34 , Processed in 0.040692 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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