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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构2 c% T! c: M9 y' w
0 {6 b1 ?6 I$ \
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
! W" n2 ]9 j; U
' u5 v1 L* K8 o) F9 \; P' L其他程序段。。。。。  Z1 T. ^1 x5 @% H( o
. g* ]4 w; V! p! r# t
   free(x_d);
- F/ d/ ~2 X. d" t: b- |: {: g9 b# j, X0 A
使用DSP侧单独调试功能,验证动态申请没有问题,
7 P5 ^+ V8 |7 B1 L3 n2 L, j" b+ F. [% C8 @6 ]6 h
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。' W1 {3 |& q9 g% `

( j1 ?3 D4 K. F9 \( o% e
" _# }" L) `0 X! A1 H3 {/ W9 T2 I) D+ V+ K+ _8 a# Y$ v" g
3 B0 L5 }! a/ |- E

1 Q- d8 V8 V! a0 I+ L( ?( x% O
3 ?/ [" y; T8 i! I( i! {8 j* n+ Y
" |4 s) W, Z* M8 R0 k0 |" B! H3 G. A( A

* d, L# Y* W  V- [: c
: R# J5 ]; N8 E: }- A* C. ?5 C
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明# @* X$ h+ l6 J0 F
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
: C, S* ]. [9 q2 m1 B* |(不过疑惑的是,为何单独DSP仿真就没有问题呢?); ?  Q1 J0 a; P; B0 J; Q: G; o' z

* Y- l8 q- _2 m9 G' u是不是需要在DSP.CFG中进行配置
8 e% f- h9 n/ k& s4 B$ \3 ]3 n我现在的配置为
6 ^$ G0 N" C! T6 E/ @! _, a2 c/ `# ?/ C5 c6 J
/*
- ?. Y# l% a; m( z& [ *  ======== Operating System Configuration ========
2 ^* A. d3 D# k" v4 e. e* P */
& T2 _) k; z9 [* {7 b
+ ?. }4 r9 t) C" c$ f7 v& B/* no rts heap */
( k& A! @4 E5 k% t5 SProgram.heap = 0;) x1 ^, J* }0 w% u( d
Program.argSize = 100;  /* minimum size */
* {$ G$ l' D0 J" g- ^2 ZProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大/ \, z6 i/ K6 ?, a- S

* h$ a! i9 W! w; {1 \% M) ]1 e8 O0 U/* create a default heap */' R' C( d" c+ i* t
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
; ^3 T5 t; n/ e: \0 @" Cvar heapMemParams = new HeapMem.Params();
! k: P- T, i2 y& n! e4 y! LheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
9 p3 K9 k4 r. G5 e/ ^  m+ ]
1 L- ?3 e' u& I4 R, |7 W; z
var Memory = xdc.useModule('xdc.runtime.Memory');7 S/ j" r: z; i9 ?9 [7 J$ {
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
4 n: N2 i  g9 ]/ S3 C  t$ ^8 L! L
2 _* f: d3 y  e+ c/* configure System module */
$ T& @  H  F. c& A4 J5 a9 S2 Svar SysMin = xdc.useModule('xdc.runtime.SysMin');
. M+ P5 M/ d9 P& f- xSysMin.bufSize = 0x1000;
$ \6 h( k- z  n' S7 [8 FSysMin.flushAtExit = false;+ a7 N" X3 N0 v4 E# c
$ X8 ]+ c  ^1 ^" d$ l- n
var System = xdc.useModule('xdc.runtime.System');: `' V. e# m. J( @
System.SupportProxy = SysMin;0 C5 w8 S1 H: K+ j: i6 v( U

( ]& p5 u5 s& b. ~- |/* configure SysBios to use the lower half of Timer 1 */
0 }* ?5 C$ ~" ~var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
( g9 U  B# T$ e9 W7 Rvar Clock = xdc.useModule('ti.sysbios.knl.Clock');! h8 D3 p+ N% r; Q, a! q1 O( I( m6 {
Timer.timerSettings[1].master = true;
3 R9 x, b3 j7 \0 aTimer.defaultHalf = Timer.Half_LOWER;
+ _9 t# ^0 f! F& ~- XClock.timerId = 1;; C, C# t* {1 G4 ]% p, X
& ]! [8 r; x" y9 o  ~' j

5 I0 J+ E6 P2 E+ J% g; q/*& ~* s: ^( k/ U2 s
*  ======== Miscellaneous Configuration ========0 c- F5 f1 f+ c. v
*/& r) }7 r7 L) I: u7 u5 e4 [

5 y' D$ s! s! A2 J/* set default diags mask */  _* t: C; l* m0 C
var Diags = xdc.useModule('xdc.runtime.Diags');( k0 Q+ J9 Z6 c7 _. |1 `1 g
var Defaults = xdc.useModule('xdc.runtime.Defaults');. F: w1 Q( p( a) S% X# r) j  @

# v, n# x' Z5 `( K+ oDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;2 T7 g3 Q4 l" ~$ t
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
2 N7 u. X1 D8 ^! EDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;" _: R% ^9 H- A9 X7 U1 t
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */: l* \0 Q' Q# {. T9 e, z* l# N9 Q
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */2 }1 g. E& j5 d
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;7 L! g) r, ~2 A, D% M, a: {
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;3 o& J4 d( u9 W
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
, @1 n+ Z; |+ P3 i; ?9 PDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
) d; [! }+ Z. h. A- fDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;9 p; V, I' F; C
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
1 ~% ~7 e9 Y" h+ ?Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;7 o6 R. I9 F+ ]
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
5 ]  ^# S6 v/ m% t' uDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
9 T7 c% O' r7 [  e7 G% b! ^+ s* C
/* override diags mask for selected modules */
! e! J  X/ J- N. T! @# \& Nxdc.useModule('xdc.runtime.Main');% O4 p1 K& B" X) ~* I+ S
Diags.setMaskMeta(! x3 A$ S; ]; w) j4 v
    "xdc.runtime.Main"," p! L$ }  i1 S& Z# W( J
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
. y9 y& c  p  K5 r$ \    Diags.RUNTIME_ON6 p  }3 F+ ~% B" U# o) l2 X( x1 `. D& L
);4 `- }! s; {0 U" i( p7 D  \

$ B- D9 X1 b- g4 _* V1 Jvar Registry = xdc.useModule('xdc.runtime.Registry');; b, e! w. V7 P5 w- h
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
2 R6 e9 X1 H2 n4 XRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;$ j; X' G0 P! ^( m2 A' u- `3 @
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;3 c( V# |$ L+ B: S
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;/ V: q; Z1 S/ g5 y/ D. ~

& ~: i/ i- L  d. X/* create a logger instance */( A4 s' a1 q* Y1 T$ Q" c8 F% L
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');& p6 C. F" q$ s0 @
var loggerBufP = new LoggerBuf.Params();% A2 b) \5 @/ W# v& }) x0 V
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */" U7 ^0 x+ s- y5 g& ~3 ]* q5 Y8 {
loggerBufP.bufType = LoggerBuf.BufType_FIXED;! a8 l& ~* V/ R) b
" P2 g7 k8 n, W' z8 d! D& C7 H
var appLogger = LoggerBuf.create(loggerBufP);
/ o: \* B( a6 i; w: i( eappLogger.instance.name = "AppLog_Core1";
6 M0 z% D! ]: W3 Q" oDefaults.common$.logger = appLogger;! G- |9 {- h/ f  Q* k" f
Memory.defaultHeapSize = 0x8192;   
. R* i+ l: T9 `Idle.idleFxns[0] = "&LEDStatus";$ A5 c: b+ d7 S" f* i3 \
Cache.initSize.l2Size = Cache.L2Size_32K;
# |  j# g( D. E$ f5 {" e; p9 L: |* `3 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 */
6 a: N3 y+ v6 c3 v* S' Q$ Fvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
' C4 i4 d8 J: `5 R, [* cvar heapMemParams = new HeapMem.Params();
$ I* o# O0 [* k$ DheapMemParams.size = 0x4000;
) k; [& _7 E- V; q
! [: G) O- A. b" Evar Memory = xdc.useModule('xdc.runtime.Memory');! r3 s8 z, b% k' E1 @" u6 Y, z! u; Z
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
. z' F, T+ i6 N' H- R' E) k7 ~) Y0 X0 F3 a: v7 ~
我大约calloc  每次共计大小为5K*16bits,
* c% l0 g( d. k- Q+ z9 ^而默认配置才0x4000、需要改大。2 X# |, r6 J0 y$ \

3 q5 F/ q/ T& ]- p
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
/ Q4 M. e: f% Y+ f, WProgram.heap = 0;( G8 I3 X- x% }! G( a* v" q: b3 P
Program.argSize = 100;  /* minimum size */
& O* Q0 w9 z2 ]; n9 z& Z4 B4 b0 s* qProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-5 09:33 , Processed in 0.046346 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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