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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
+ R8 M! G% f6 C3 v! D+ K- q* j. W: ^
, B  C2 i' W& ?2 d, \$ d6 E    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256/ s% K$ a$ H% i& t$ ]" Z% h( s
! }  P9 K9 L, ^+ G! e9 b$ t% F
其他程序段。。。。。
9 n! t- Z$ f" h9 O6 T9 f 4 _/ o. J* S' E0 o! e& E2 ]. O8 k
   free(x_d);
3 L+ T9 v( ?: U. @" Z3 ]3 K
$ ^5 l& O( I5 B( d' y" j/ G使用DSP侧单独调试功能,验证动态申请没有问题,; ^0 G/ A: B5 y
# P/ R4 r# s2 p* v2 h* ~3 x; m
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
% Y/ r; R% _9 c$ Z6 ~
7 H# U+ u- E+ g- x. j; j! v( ]) ~

0 A( F8 [& N5 O( g" g) q7 ^/ c$ d3 q6 w1 n* N5 O& I

5 e+ M( f# x2 d+ X4 W# w: _* e  n' s% R$ n$ o( _/ k

; }( O, F6 H! e$ s- p7 q# n! Y
$ Z! L" U" b$ a5 m
; N( |6 X4 W- S- F/ i! M# q+ E
  S# O7 Z, a- {* d# ?1 }7 `5 |' f  o; c! i, e$ b
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明4 `9 i) h$ T* M! G+ W7 k3 L+ H7 L- w" E& f
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
! H7 {% t; R3 ?# Y(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
9 a$ {% B9 ]! s$ f" E

  o% e3 z& z# J! J) H( l是不是需要在DSP.CFG中进行配置
9 M( e0 Y1 A' A* z我现在的配置为
. |" C/ W2 n! m2 H
5 K. {6 V4 l. l6 \9 [7 Q4 P1 ~+ Z: w6 h/*9 s' {3 u! Q$ z" ~6 r5 r
*  ======== Operating System Configuration ========7 h+ @+ [8 G0 v0 ?
*/1 Y( \  x  r2 S

/ ~8 b, ]( X% A. C, D/* no rts heap */! j# J/ i9 c+ m% b  h
Program.heap = 0;
: O( C5 K! d; Q4 o( ~. S" d# iProgram.argSize = 100;  /* minimum size */( k: o1 J. v0 X' j0 z
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大1 U* I4 g  M9 s& f) d* S

  W+ \' K0 D% Z$ p/* create a default heap */
; E, n8 a( D) Wvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');8 P7 C2 y& e4 V9 u6 S& {
var heapMemParams = new HeapMem.Params();
& ?3 u( u& u+ e4 E, X3 \! m' z* ?heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大: g& r% d% U2 E. S$ t

! W! J. [; K+ K- y. x$ v$ K
var Memory = xdc.useModule('xdc.runtime.Memory');6 j9 O. N# {& ?# Q+ g
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
. i* X# u7 f( \: U. U( b0 l! P# R' q2 y/ d
/* configure System module */- X1 w. ?. l# P3 R$ C; G
var SysMin = xdc.useModule('xdc.runtime.SysMin');
& W, q) l4 f$ h7 Q. f! e9 dSysMin.bufSize = 0x1000;
4 Y) @: w3 o0 c( vSysMin.flushAtExit = false;+ l- D: r. x" L0 a1 V

1 D4 F- N" o$ p- n5 R; xvar System = xdc.useModule('xdc.runtime.System');* `* O4 {( {  Y
System.SupportProxy = SysMin;0 W( ]" z* E) x9 R( Q& G2 x

. G/ b" O" e8 V2 K/* configure SysBios to use the lower half of Timer 1 */
& p4 @% x- X9 B, m6 Z- Ivar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');% \4 M0 l4 p. A0 v, M1 k' b/ I
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
. |! O$ x$ q' g7 N3 T! s2 z" MTimer.timerSettings[1].master = true;
" j- S2 }5 k/ Z7 eTimer.defaultHalf = Timer.Half_LOWER;
! `9 C2 a3 s6 L. {9 ?% gClock.timerId = 1;
& y  F$ q9 B% z
8 ]8 l" X1 z% ^4 f- J# u; B0 I+ [& g
/*
7 o; g. r6 w% x *  ======== Miscellaneous Configuration ========' M1 C& c+ H& C4 Q" X
*/
8 j) b3 ], P* [  I; z
2 _& q& J6 A* g+ o0 U* s) j$ S/* set default diags mask */
) L9 Z' j6 \7 ivar Diags = xdc.useModule('xdc.runtime.Diags');8 r: p, c0 v5 t5 ~% s9 @* S* b# Y3 N
var Defaults = xdc.useModule('xdc.runtime.Defaults');: Y% h( Y% j, }2 L2 n+ i8 O
# T5 }$ L  Q) d, B0 a
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
  S) o% N) w: l8 M/ X0 m8 wDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;' i! y/ q% {4 n
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
, J0 B. ~9 r# f0 \3 VDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
* j# f) o8 K8 x2 q% e0 B& fDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */% I$ J7 u7 o3 \: F/ e& g8 r( f
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
8 J% @5 S- d2 C6 ~Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
: w( `2 `" F; MDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
& M. b% b, c& f+ R" H) I+ TDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;" A+ U/ O1 R8 k- P2 i" v
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
( d, T5 \/ x$ W3 Y+ p3 |Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
" J) i* q  ^! WDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;9 P# T+ }9 X! j; c" }: ^) U9 M
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
3 ~  H, m3 a/ S% bDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
# _; T2 D% ^- s* P8 C' r7 x  q1 H4 F0 P- n
/* override diags mask for selected modules */
1 n% _0 L8 v) nxdc.useModule('xdc.runtime.Main');
! R9 q6 P) h3 ^7 e% x5 k# NDiags.setMaskMeta(5 n8 s* b- R& n) e# ]
    "xdc.runtime.Main",: r  \: l0 ~: }* p  S4 S! E) X9 m4 e
    Diags.ENTRY | Diags.EXIT | Diags.INFO,; k1 C1 h: u" M$ w& A) t) h# A
    Diags.RUNTIME_ON9 H% y, k: x1 h. [2 i( L6 S5 Z  i
);" S/ h( C; U1 ~! S# i; n

+ ?4 O/ c6 W7 j/ ]& D5 H3 Ivar Registry = xdc.useModule('xdc.runtime.Registry');  w( |% u! d+ h0 n6 i
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
8 A7 U5 m! t! P3 W' Q/ ^Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
) X5 O, j% A4 @, M- y. u# r1 W/ FRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
3 }. q- p' O! s8 s% K0 o- kRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;: i; Q" Y4 ?$ t9 ]* i5 H& `

. _7 F% {8 [- P& Y/* create a logger instance */
! J) w( W$ d' P* F* `. j- O7 tvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');" S$ X5 Z1 o  x$ D( t3 E$ K
var loggerBufP = new LoggerBuf.Params();
& \' d5 n/ z+ n$ V! z+ HloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
" y6 C+ p4 c- e: {loggerBufP.bufType = LoggerBuf.BufType_FIXED;
6 Y) [1 T+ u2 p) W6 k: u
- o  c6 L7 M( a4 |' Fvar appLogger = LoggerBuf.create(loggerBufP);
! }- r8 |" i  G, XappLogger.instance.name = "AppLog_Core1";
( c7 K0 ^, U1 E* u4 bDefaults.common$.logger = appLogger;+ b/ S. I- s3 D/ `0 R2 |
Memory.defaultHeapSize = 0x8192;   
2 B4 e& b, p0 h& E5 v! F& p* ]Idle.idleFxns[0] = "&LEDStatus";
# U1 a- K, {6 ^3 D. @5 j7 ZCache.initSize.l2Size = Cache.L2Size_32K;
# v! t6 g6 v+ [6 Q, l: g4 n
9 H! S4 L4 n9 s5 ~
回复 支持 反对

使用道具 举报

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 */
% P6 ?5 G& @. o" ]  yvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');3 Y* \2 r( D  G3 u9 N
var heapMemParams = new HeapMem.Params();7 A4 S% D) Q; r- {4 H' Q
heapMemParams.size = 0x4000;
! p. N7 w( d$ S; o  S2 }! G' {# l* p3 _. d) u$ g) w
var Memory = xdc.useModule('xdc.runtime.Memory');
5 Q- O' ]" R- LMemory.defaultHeapInstance = HeapMem.create(heapMemParams);4 H. y& Z1 R: c" c1 |& E
6 l' X  S+ c9 p0 d
我大约calloc  每次共计大小为5K*16bits,
; _6 S; L) `6 g/ g而默认配置才0x4000、需要改大。
( \1 Z0 h+ T$ T5 P* L
3 q6 X) V6 o; o5 ^9 r! [
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
  h# C* W6 O% a/ l1 R4 rProgram.heap = 0;( i+ f, h7 V$ R& C) ^0 F) A0 p
Program.argSize = 100;  /* minimum size */
* I0 Q$ [$ Q- ?( mProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-18 01:20 , Processed in 0.040226 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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