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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
( p  G. J  P6 q% n$ L! C4 z) x6 O# `/ G. p# ?% A
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2563 @9 Y2 N" i; W! V5 r

; p. g+ c# U- J# c/ o/ T: A* \其他程序段。。。。。
6 u$ c) H8 K3 j9 K* {$ m( C6 B   m$ _' L" Q' u5 m
   free(x_d);
& }# z) W3 X+ [$ L0 q2 v1 N3 N
5 |# ^8 a" }1 j& Q# w. ^使用DSP侧单独调试功能,验证动态申请没有问题,
2 i+ ?; N  q0 `* F* A
9 h" d8 I& F. K! N5 L但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。# e: d% _( t! d4 A+ E7 f
4 B$ d9 m. u, O2 M* [% c
/ k( \) h3 R& s# r- j$ N' A
; G7 v* Q0 u' I  m
/ f5 i8 }7 V9 I* q7 q
0 F% {7 [/ K! ]) c6 ^" y

6 l+ R& ^! B  s0 N; I: g$ J
$ K/ z! k3 h$ j( |( I& S6 o- u
, D7 T( C/ g* q( o. e5 \' N: ?5 \' D1 |# p6 s; R; n; U/ A

. _, E, ]! _) R+ c) o! q% U
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明, T* b9 D: M$ l3 X% _5 J( B7 n
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
. P' G2 b( z* R( u( l0 Y9 |9 f(不过疑惑的是,为何单独DSP仿真就没有问题呢?)1 T1 J5 S- ?: y2 \0 z3 M8 C! _
+ b% W8 ]# B3 W9 f
是不是需要在DSP.CFG中进行配置0 T: {' d' u8 G  B
我现在的配置为
: I! ^7 v0 c# Q+ l- {" R) H
/ J8 m; ~+ ~' z  F* D/*" P/ Z. u) x1 o0 J1 `2 ^' U3 N
*  ======== Operating System Configuration ========- x6 Y! n# P" w* @, ~2 t# k
*/+ h6 u8 ~% q* W2 n6 ?" q
+ f3 u5 |4 e5 S& E& T
/* no rts heap */1 K+ k8 C- ~8 B0 H" B1 \1 }
Program.heap = 0;& m2 V! u. X3 h& q/ A" v$ a; ]  C
Program.argSize = 100;  /* minimum size */! O+ R  B' x% d* F
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大! z, r+ u2 h( S

' \# Z+ G9 t9 W6 h0 h7 C" r/* create a default heap */
7 L" M* ^2 j% v  H0 O( e% ovar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');. [8 H  I$ w/ X3 O( @- ^" c
var heapMemParams = new HeapMem.Params();+ a8 J! M! u; X
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大, j  f8 J4 _& J. b
& m* B+ @, M- ?& x
var Memory = xdc.useModule('xdc.runtime.Memory');/ a! k0 l7 ~' V! q# A+ d0 |
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);8 j9 d! T: N8 t1 z* n+ s" K

2 g: Y/ g" h4 Q( d/* configure System module */- A( h3 `9 B0 }* z' {7 O2 C
var SysMin = xdc.useModule('xdc.runtime.SysMin');' a! c0 o( `; S! c
SysMin.bufSize = 0x1000;
; I, H/ u2 M: K7 J0 q: z& {% b7 eSysMin.flushAtExit = false;
+ m% ~' h* ]' T& a6 K
1 _/ B+ t4 A- r/ {$ l6 ]7 I/ jvar System = xdc.useModule('xdc.runtime.System');( |3 y+ N; W/ U
System.SupportProxy = SysMin;
. `& B; D3 A$ h1 z- t7 M& d) u+ |0 t; _* L. w3 o5 M6 t0 Y0 k
/* configure SysBios to use the lower half of Timer 1 */+ [" t1 K, H7 Y/ e* M$ r# f; R3 q4 ~8 w
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');' h' @) m6 @- l4 R
var Clock = xdc.useModule('ti.sysbios.knl.Clock');& x. m$ T8 g. v) ^1 \
Timer.timerSettings[1].master = true;
& {1 u: m/ @0 b7 fTimer.defaultHalf = Timer.Half_LOWER;8 t# R( ^, F" ?% O
Clock.timerId = 1;- P! ?0 n* O' `3 y" Y# h! Z
( N0 x, j" h- L) Q5 r/ Q0 A/ e) P

# ~0 c3 P( d8 V/*8 L. M2 W: [- Z1 n
*  ======== Miscellaneous Configuration ========5 R/ V! a1 j2 a' h" P
*// b' G; U3 y4 m7 ]8 F- {

+ C4 B7 f! h/ v  w/* set default diags mask */
, a" r5 t7 K+ z& Wvar Diags = xdc.useModule('xdc.runtime.Diags');
3 A, k5 G! l- J+ Wvar Defaults = xdc.useModule('xdc.runtime.Defaults');& }7 q3 _0 h& j+ w- s1 @/ Q
2 E. E& G+ K: V' e3 o
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;9 I$ A1 g" P6 r( ]) V+ _
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
4 z0 {+ ]: H& n) `9 I- bDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
4 b9 z; o0 D6 J/ [7 x( PDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */. a3 k4 M) ]# b9 j
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
3 L3 g; i6 u, a$ d0 m! d3 KDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;1 s6 o3 A" W2 r+ ?# ~
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
, @+ X) g  e3 y3 |Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
7 h* U) W2 C4 U4 h/ BDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;+ E) ^( j0 N" B! s9 |% a
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;: }' P' [! Q8 `$ G) w# O8 y
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
0 \" n6 _" K+ x- d* \. S. J7 wDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
. @- S6 m% `0 g8 n: V$ iDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
$ d1 u' i, I; U- q; G( DDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
3 y" ~% T! J3 L8 b" ~) Z% @  ?1 _/ M# X9 r5 `
/* override diags mask for selected modules */5 ]( t' j; k; h/ p
xdc.useModule('xdc.runtime.Main');
6 _% z( A: |6 ?: _+ i. O3 X. mDiags.setMaskMeta(
* Z. s$ e8 W  ]% \5 b* m    "xdc.runtime.Main",
6 o( W0 y8 j; G$ o3 U& ^6 O    Diags.ENTRY | Diags.EXIT | Diags.INFO,
+ `1 H  v+ g. j$ p    Diags.RUNTIME_ON
6 M+ h% ~% M  ?9 w8 b5 w);
0 K. \7 f3 c: p2 S; Z; Z4 N" A# U8 b1 q6 w9 o2 Z8 C5 G
var Registry = xdc.useModule('xdc.runtime.Registry');
( W' b" P3 y! R( c, X4 ]Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
% B9 g  I/ Y, J; ?1 l# L: IRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;& q9 s( R8 D) @& a
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;( F; J# {, \: ?$ n1 M7 f; _4 B1 b
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
* W: O# }* w7 H/ C. r! S' Z. P* h2 e4 `0 {
/* create a logger instance */3 M0 [2 f- [5 ~& `7 [7 F, o. i
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');' P6 h% R, j9 [1 T
var loggerBufP = new LoggerBuf.Params();4 A1 Y- `, k3 x8 l3 D: ]0 J9 T
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
/ t0 B: @6 a" h; iloggerBufP.bufType = LoggerBuf.BufType_FIXED;) @/ J# z. K' Y/ I8 X
% W  P( @) s9 M0 o" o
var appLogger = LoggerBuf.create(loggerBufP);
( U$ R5 _) Q) q3 l3 Z+ D- Q, }+ C7 x; }appLogger.instance.name = "AppLog_Core1";
7 y6 B" t+ r7 tDefaults.common$.logger = appLogger;1 Q1 ~: O9 r" l% T9 E7 K* F" M
Memory.defaultHeapSize = 0x8192;    ; e5 Q6 B% X$ a4 e) g
Idle.idleFxns[0] = "&LEDStatus";
6 C: n4 Y0 X+ A1 v! i! S5 @% eCache.initSize.l2Size = Cache.L2Size_32K;
: v7 g0 Z( j  c7 e& ?- u' X$ E. q- M% A/ [7 u+ }1 |4 D. 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 */5 D" x+ c8 |+ s
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');2 _; ^% X" G  B
var heapMemParams = new HeapMem.Params();
; b: u+ I/ t& D% qheapMemParams.size = 0x4000;% c* g, ^6 }' Q; \
* ?: D9 _1 f7 `, X
var Memory = xdc.useModule('xdc.runtime.Memory');7 C  Z5 S; p$ z( H7 ]' A  r
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
9 ~. ]: Y& m0 X) Y! m# [0 ], y$ J. Q5 a- f
我大约calloc  每次共计大小为5K*16bits,
, U6 K! D2 A7 L8 W9 M8 m而默认配置才0x4000、需要改大。' [1 G+ c& p- G: F% M" e8 c
1 @: C5 u: L2 b5 u
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
6 ]7 \9 U; Y8 Y2 Q5 oProgram.heap = 0;
! \! e$ X4 t- _, h3 O  r8 tProgram.argSize = 100;  /* minimum size */
7 d9 C8 }( i9 X3 B: sProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-27 07:53 , Processed in 0.042155 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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