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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
+ [- m& J2 U1 C/ E1 t2 Y5 F, t% \- X; @3 f8 G( ^+ c" v
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256) b, s- e3 N( {. ?* u

# ~# R1 Q, \9 ?其他程序段。。。。。
+ `8 `( r) i6 b
. ~* G# r; C7 ?* K9 W" E1 z   free(x_d);! a: H5 A8 v; N% M2 }

* j2 s! ?$ g; f: c! B* ?使用DSP侧单独调试功能,验证动态申请没有问题,( O. [2 n! P! \  P/ q
4 ~5 R( P  a& I# w8 c9 I. O
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
0 v+ e! @: N7 l. ^6 O& I# K: L" X
3 ]. H2 D6 l' x, q9 v

$ s2 P8 F$ ^% i" z2 ~
, ?% s1 g, o5 z" a, r5 h9 z9 y
7 E2 O: A+ k0 C. C6 q( O
8 O& d. }" z% N2 T( H" n! F
6 ^3 H& @* {/ [8 ?$ s* ]
. j: ?% f# g+ j6 n) T4 w
8 w: A0 G. y2 a4 D* c, ?4 Z+ N. J# C' g1 ?" }, A

- B, B% \/ g* w& ]( o
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */9 I. X4 g- ^/ `" N* H) m$ i* O% H
Program.heap = 0;# l4 S- i+ _, k* d" Z& e6 A
Program.argSize = 100;  /* minimum size */
( }% T$ h2 A8 f1 b0 \7 cProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
( r. l+ {7 w* f; L) w" j6 F  ~var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');3 o' A* R; @6 \, [/ o+ W
var heapMemParams = new HeapMem.Params();. F2 ^8 x% U+ |4 i8 X) z
heapMemParams.size = 0x4000;
1 w! {4 Y7 f( W. d, x; [5 K- d3 h5 K0 x# o( f: o+ u% N! u
var Memory = xdc.useModule('xdc.runtime.Memory');6 H9 R. K- x/ k4 j1 v  T  e& H  ]
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
0 y5 z) a4 r3 X) k
1 }3 ~! O& e+ s4 z我大约calloc  每次共计大小为5K*16bits,
' Q; {! {1 Q2 @) u+ Y  X4 ?而默认配置才0x4000、需要改大。
# s5 t, {7 l# v  ]
  }$ w+ ]. w* n0 q* w0 q8 V
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明, |( j/ t8 i2 X! y4 W
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
9 l9 A$ D- r/ w4 M(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
# A; i: \# W. K' y- [& H
0 F1 _+ h1 V9 L& g9 i  n
是不是需要在DSP.CFG中进行配置* C( `/ W0 N0 V% S! H
我现在的配置为
8 N  J6 c# D% C9 s: p! z& c6 d* s: u4 R4 D# {6 |, t
/*2 f( Q9 H" q3 C$ Z$ l; I, i! N; Q; w
*  ======== Operating System Configuration ========2 R2 q1 `0 i. y+ o9 w
*/
# t3 n" T4 ~" j$ D" F; z* E$ o6 B. }6 @  ]% U2 p# w, c
/* no rts heap */9 D! T# x7 j# }( S1 ]: K1 e/ ~: A. `) j+ i
Program.heap = 0;
/ f+ U* o0 U& y/ t+ H' F6 bProgram.argSize = 100;  /* minimum size */1 c* |' |6 z; n( g9 y) V: w
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大' M, Q% o& s9 P( A4 Z/ d0 B
( `& Y' U  Q+ ?( Q- n# N+ u
/* create a default heap */: E6 Q6 Z& G  R
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
5 q$ T$ R0 [% o" [6 Q) wvar heapMemParams = new HeapMem.Params();
" u$ g+ C  }) P8 N  l3 [& vheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
% c8 ]: a+ u2 X  n$ D+ B" Q: y
: y* A& K5 W" ]! ?, }$ @9 ?
var Memory = xdc.useModule('xdc.runtime.Memory');9 a& _$ u+ q8 ~# g5 |) e3 ]
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);% S& k: I* C6 y% @# s0 ^( o' N1 `

' y% F, g0 j" P: k( T0 o/* configure System module */
! Q8 j4 d! v) B& ^  ]var SysMin = xdc.useModule('xdc.runtime.SysMin');
2 ?! c4 S7 x, `# _5 D0 N, g; oSysMin.bufSize = 0x1000;( P5 M9 e3 X/ l
SysMin.flushAtExit = false;- a! [; s+ y0 L$ G3 ]6 u
8 O7 _& g( ~7 f* {2 M. t* T! @
var System = xdc.useModule('xdc.runtime.System');4 Y% d/ B+ E% t( s& N
System.SupportProxy = SysMin;
0 Y* Z( {5 C" \" A5 X. n6 S8 R0 @- ?& \4 f0 E7 U
/* configure SysBios to use the lower half of Timer 1 */
& r* d/ @/ Q8 Z' Svar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');. T# F* y. C, u6 O- b* A1 n
var Clock = xdc.useModule('ti.sysbios.knl.Clock');6 V6 K) C: ?9 h; F8 d
Timer.timerSettings[1].master = true;
4 @5 K2 a8 W& J  U5 |' @Timer.defaultHalf = Timer.Half_LOWER;8 `6 w. {: q' R4 d4 n+ t: a( g7 e7 u
Clock.timerId = 1;  V- v/ H" N0 _
: W- D0 o  C/ D/ Y

0 d* I0 m7 D, Q4 |- l; U6 y) ?/*
* K& R! u, O% `3 F; Y) I/ C *  ======== Miscellaneous Configuration ========7 a& k: F( B/ d; I2 d
*/
6 ]( L# f1 R7 r, ~* h0 |2 ?6 j) a4 Y; l  Y) K! H) Y5 y) y2 A
/* set default diags mask *// G' R6 u1 Z( v" @
var Diags = xdc.useModule('xdc.runtime.Diags');5 p% a7 I9 q" s4 P; w
var Defaults = xdc.useModule('xdc.runtime.Defaults');
+ z6 ^6 |& s* S, d/ n& A' Y
4 j. C8 x, H1 u3 ~# MDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;! R1 v+ T: e" q" n
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;5 f0 @- h7 s5 \7 }# z
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;3 g* _2 M8 c' _7 h5 t
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */1 i+ m/ H& z+ o4 @" R( m4 p
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
3 y2 q: q+ E' e% F/ tDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;) h0 o3 V* ?  B. s
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;: n6 ]3 O8 k/ K
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
4 r' t) R' A9 o7 [7 R' gDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
7 W1 \- B$ }6 Y3 x6 V# I0 d4 S# f. ~Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
  B: r" D+ n# D3 _8 sDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
7 x( |2 ?4 ]5 [2 G5 g9 ?8 xDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;5 Y( Y2 w) }) \" x
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;5 m7 V6 p& O: o$ f2 a' v
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
* S2 |" W: g+ @% z# z
1 ~5 g4 O- [% a  _" k6 E/* override diags mask for selected modules */, w& E/ N) d$ S) Z! R0 M
xdc.useModule('xdc.runtime.Main');2 Y% E. T8 H1 Y
Diags.setMaskMeta(! A# h0 N, x$ @  ]5 _9 A
    "xdc.runtime.Main",, P9 M: f# W! D: @
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
# {; Y: m( F0 S6 s. z    Diags.RUNTIME_ON6 |8 I! ?* L' x7 b7 {
);7 J: Q9 P, g% H
& F3 q" N, G3 d6 l7 L
var Registry = xdc.useModule('xdc.runtime.Registry');: b" }+ A% g+ G( N# M1 y; [
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;& d6 ~/ m8 _7 s  z" R
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;3 x; g4 k/ ?3 Y4 Z! O, H2 Q" L7 B8 x
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;% x+ X+ l+ ?2 G0 b/ T6 B( k
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;1 d0 w$ P. @5 ~9 j

/ R+ F4 W* [  K/* create a logger instance */# S( u1 o$ u  [
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');1 }% c' u) e, j
var loggerBufP = new LoggerBuf.Params();
/ p! n3 d: q& [. _+ W: Z# U, a3 HloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
9 ^7 ?; a$ N2 \loggerBufP.bufType = LoggerBuf.BufType_FIXED;
, E* w6 c+ r  e+ G8 ]
% D2 U4 F/ z$ zvar appLogger = LoggerBuf.create(loggerBufP);$ f5 o' ^& N/ ~+ v
appLogger.instance.name = "AppLog_Core1";
( `6 m' k" i7 q% t5 Q( o: cDefaults.common$.logger = appLogger;
% i' F! D0 g, f+ U" H8 {Memory.defaultHeapSize = 0x8192;   
$ ~* E: M# q0 D- ]% u8 ^# pIdle.idleFxns[0] = "&LEDStatus";
# s9 B% L2 P) `3 I5 u: \; C# o2 d& rCache.initSize.l2Size = Cache.L2Size_32K;  }5 ]. Z, r1 l+ B2 L

1 N# c9 f2 i4 {; T8 ?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-26 17:16 , Processed in 0.046386 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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