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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
& Z* q4 Y0 ~7 a% U) g9 T0 C3 ^! N* @# r4 r0 x& \& L# n  H& G
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
# n$ h1 q, H7 d1 J- I4 x* b' H% J4 R- F
其他程序段。。。。。
7 j4 V! u4 F5 ?/ t# k1 q0 k1 Q ) t  `! D& x" G* o$ o3 u
   free(x_d);
! h/ r$ H1 X7 X- d+ Z
; ?; I# i6 |/ b; ^; ~3 o$ I. A使用DSP侧单独调试功能,验证动态申请没有问题,
/ l6 d" p- \( ]: B  d! v3 j
1 C. R% M! `. v- K- b) f但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。+ M' B4 |5 Q7 N2 }& R2 {& f
$ C: l: g! ]& L! `  Y% f* ^+ {+ C- l/ K
7 b* Q% f  m( a' r3 v
8 F' [( k/ J, l# I+ u9 P; f+ Q# Q

6 e$ {9 E8 L) r4 ?& ~) E- S  d) Q& `
( X4 \+ j: p0 h
0 \7 Y: h% p5 t" l; _9 L# ^8 k& V& F( B

0 N- \' O% l+ u: b; t& S% x# w
$ Z3 x/ O0 V- y2 w' W6 G, t
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
  S2 M9 d& b! c+ [  H- Z$ l9 ?( K我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
, D& u' z8 |6 X% w. i(不过疑惑的是,为何单独DSP仿真就没有问题呢?)8 u% ^/ ^3 k$ q8 R# i2 k) f3 r
: }3 N# K/ p5 n7 L, ^. a, X( |% @
是不是需要在DSP.CFG中进行配置
. q  l2 {# k0 X4 V6 V我现在的配置为. Z6 C0 n) ^6 f- o3 R3 V" U# F

' F& o$ u7 T8 u/*
$ }. A: w( E# B  u9 N *  ======== Operating System Configuration ========1 t" t& w- I0 Q
*/( j- g9 L$ @: b

$ u9 W5 z  J3 T- T) {- Z6 n7 @/* no rts heap */' I" i  W6 x8 p# D3 W& I! e$ r
Program.heap = 0;  d; ^/ O$ a7 Y! B* ]
Program.argSize = 100;  /* minimum size */' M& P/ K' E8 W- D4 u: ~" Y& m. v
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大- P  Q6 m( n/ p

8 y, C3 l# k7 L& \# `/ F3 l; f9 g! V/* create a default heap */& |; u7 [5 [) @
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
, {& s) w. x% h0 @" f; Wvar heapMemParams = new HeapMem.Params();
: t4 h8 {! S( E5 J! ~' _3 [heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
3 ^. Q0 n1 y; c0 B
5 @& m$ W( K& ^. y. a/ h
var Memory = xdc.useModule('xdc.runtime.Memory');- }* O7 {9 i" ]7 ^
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);: i8 [8 I( V. g$ Y  F

% i2 W) P2 M9 A8 G; {# u/* configure System module */: m5 z- c$ Q& l2 r1 C# \
var SysMin = xdc.useModule('xdc.runtime.SysMin');
9 ]* z0 T% B$ f/ tSysMin.bufSize = 0x1000;
' u9 w; I9 e) ]* SSysMin.flushAtExit = false;
" z$ J8 R5 u: J% X. m2 w- a$ _9 l; v  w% S7 B* x; j
var System = xdc.useModule('xdc.runtime.System');
9 U% K8 G7 {$ DSystem.SupportProxy = SysMin;9 w  H' V* `" N; k3 ^; [
. u( g$ D! E1 o0 F
/* configure SysBios to use the lower half of Timer 1 */
# ~( y) V" }& y) i; ?0 hvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');+ i' X: p- d1 l: Y; ?
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
/ c1 i* `8 w+ U. h7 ZTimer.timerSettings[1].master = true;# N0 c/ u6 C$ |; v& `1 D$ A
Timer.defaultHalf = Timer.Half_LOWER;
" \( D/ |3 i. I, kClock.timerId = 1;
' O4 D, }! H7 Y1 ~5 }  @
/ G, D, g* J# k8 a. b& o4 x& ]2 e6 {5 g! {' R
/*! @7 u$ U! [2 L% F& J
*  ======== Miscellaneous Configuration ========2 f6 b# |  _% }& r6 w' D
*/
4 {# x) @3 E' i4 V1 [
* j; z( |' _0 N' J7 o& l* D: f# e7 J/* set default diags mask */
9 q8 b# M: C) a2 v8 w8 H4 pvar Diags = xdc.useModule('xdc.runtime.Diags');
$ I' Y% L+ g9 ~; _var Defaults = xdc.useModule('xdc.runtime.Defaults');
6 _% w. M# I2 l
# s5 e- H% `9 w$ A4 gDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;/ e3 p' K* O3 R5 o4 G
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;3 X; q. s! b9 {- h: _$ ~2 Q( j
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
5 M% R* h& P$ C+ nDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */4 ^( ]4 u" m" }3 v1 L( d1 F2 T
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */5 V8 w! t* c4 j( W) W
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;3 n- m# Y6 N7 F- U& B- z+ F. s" \
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
0 W7 x% H1 O9 u% W- KDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
- g1 q( S+ }0 J: zDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;/ w7 I  u1 b9 Q5 d( o+ x
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
: E, A( V0 A3 F7 ?% h$ t4 vDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
* s) M  n. Y# S8 W: p6 o5 DDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
- C2 B/ r& M8 G4 ]: @) g. \Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;( O4 {3 ^7 Y& D8 u) b- h8 p8 m* F
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;  I% p, Y) D: D1 [0 d, u0 {9 S% n
& y. J9 j" `1 U# m& p
/* override diags mask for selected modules */: u) ^5 k9 q- L. T1 e% S8 D
xdc.useModule('xdc.runtime.Main');) r- F# _0 o! Q* n# P$ v
Diags.setMaskMeta(
4 g3 R, G) r' W1 Z* O3 S    "xdc.runtime.Main",
+ Z4 @6 x$ |. J& r7 ?6 L  p    Diags.ENTRY | Diags.EXIT | Diags.INFO,' _+ ]$ a! J6 B( c8 M' v% p" c
    Diags.RUNTIME_ON# X8 z2 L1 y) x$ S+ O' Q
);# S( D  x+ b( L+ _4 M4 Y
+ v$ _  L% R! d6 p; S9 A+ d" F
var Registry = xdc.useModule('xdc.runtime.Registry');
& t! u5 ]3 L8 C, Q, u, [$ F" I6 s# iRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
) f; q( U  o: k* F. yRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;7 s& V+ G! A, n( X, ]( R6 B8 Y
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
; Z, T2 p) R6 u0 n6 a; K4 rRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
# z' [; K9 s; L. s$ |" f$ S% Y9 {0 s: j: X! U2 f7 r
/* create a logger instance */
: m2 u2 S* q9 z9 v0 j# Vvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');0 O, E8 q1 h) ?9 j! S+ K6 O
var loggerBufP = new LoggerBuf.Params();1 T) z( M! l; U5 R% Q+ L
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */' t- ?; `# s: g1 S2 m8 R
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
( ^, D7 E, u, n8 T4 Z9 D& x/ |3 e( r
7 K1 j; |7 v9 k" g  d% _' {var appLogger = LoggerBuf.create(loggerBufP);1 X( I0 w6 K% h; Q+ J! c! @  P
appLogger.instance.name = "AppLog_Core1";8 L% U! K7 W) N3 [/ }/ ?+ t
Defaults.common$.logger = appLogger;
3 K2 |; v, O6 @' O! Q: f( a5 a9 jMemory.defaultHeapSize = 0x8192;   
3 t/ w- t8 c' U- ^4 z9 `* AIdle.idleFxns[0] = "&LEDStatus";9 B8 r4 x6 _# F4 z  ]7 N" y
Cache.initSize.l2Size = Cache.L2Size_32K;& n2 ]1 H( [1 J8 Y! L+ b
' X5 J  D5 [: \/ F2 W
回复 支持 反对

使用道具 举报

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 */0 f; \7 k3 S' q+ h1 B
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
# h6 R2 m( [( j( B$ ?var heapMemParams = new HeapMem.Params();0 D1 M, D" a7 C; X4 @( [
heapMemParams.size = 0x4000;
4 C, B. A; G; G2 s* [7 A; w* t9 i) \+ Q+ p
var Memory = xdc.useModule('xdc.runtime.Memory');1 j# V& Z$ O8 `
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
# F1 Y- w* u( K9 E! @! f
9 V9 V, ]  |$ v- x我大约calloc  每次共计大小为5K*16bits,
" J( b$ l7 _  `而默认配置才0x4000、需要改大。6 f# K' }+ i4 ]& ~( _1 L

! D9 `+ r7 ]& q8 a0 T
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
0 K# a- x( s) aProgram.heap = 0;6 j% c+ F0 d. W/ z$ s
Program.argSize = 100;  /* minimum size */7 x$ J9 }7 |1 {5 M: a
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-28 03:23 , Processed in 0.042837 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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