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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
! [6 M  m: P; u6 j
  c5 Y# c7 Z9 y7 G5 \: j7 e    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
) b3 v& w  F; a' k. u+ l1 j. T2 t6 `/ F* E/ n% S
其他程序段。。。。。1 z$ W! H, P7 ~4 N3 j6 P: z

9 K* f3 U. K( b+ J2 l9 u   free(x_d);
2 y, w  G" B$ p8 l/ P! [+ ]; F7 q3 ^' n% Y# Z# P: f3 X
使用DSP侧单独调试功能,验证动态申请没有问题,
9 G. r; g& W9 v) ^8 |5 u5 u( u* P; c; D( H/ `8 P' ]( _
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
0 Y3 P; M$ h# S! |# A1 V! A

7 v2 y7 y) w& y1 F# B
$ a5 [' ?$ A- S  Y2 R) j' l1 f; r% B- v6 v2 f7 B, ?. v
6 y% `$ W/ u& X; |3 U

) p. T# M& S+ g  }& L+ ~1 j
7 h+ t4 V/ J& M! V) K, t; ]
6 V/ N9 I/ m6 U" w9 p/ A& y& b" B1 E; `9 j6 U1 o$ @- R

, D2 U( j1 Y: S8 _+ v0 y! {, p+ Y& C% f. y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
- b# ~% k& D% n" O3 S8 z我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下, T) l+ Z1 j- L' E* H4 n5 f. R
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)( p9 o0 ]2 W$ B; Q
: y3 W* X  F1 w7 o9 s( u  N4 m
是不是需要在DSP.CFG中进行配置
  }% o' `( z  @' D& F* B我现在的配置为  K/ o  q) N+ G# m9 S
8 R- f/ `; C( W) e
/*0 r) R# h3 ?0 V
*  ======== Operating System Configuration ========
" [# }7 v  p4 u */
3 B3 D9 J' R% t' |( k! A8 L$ r7 x1 P/ p! i! o
/* no rts heap */; p6 C, U, z+ O
Program.heap = 0;' `1 t' z) a) F; k
Program.argSize = 100;  /* minimum size */2 ~9 K2 ^" s' B. h
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大6 `7 |" I( ~9 Q5 T$ V# p+ B

& _9 I: u: r8 ^/* create a default heap */
6 Y% [. S( K: z2 V1 Cvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
4 T. x! M0 o+ F' ~var heapMemParams = new HeapMem.Params();
' d% b. `$ P: J' p' f+ PheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大3 |: C6 a4 T- B& Z/ j! Y* L' W) S
* \2 d* R3 j* z- w* z7 c+ v" Q" h
var Memory = xdc.useModule('xdc.runtime.Memory');
2 ?) q5 q) m5 i  |# zMemory.defaultHeapInstance = HeapMem.create(heapMemParams);! c. I& X8 @4 l

* @- o) F* j/ r9 U( i/* configure System module */8 ~5 G/ e$ R/ f- [: S1 }
var SysMin = xdc.useModule('xdc.runtime.SysMin');+ h) l8 X9 d* q2 F; u  L9 V! ~% M' o
SysMin.bufSize = 0x1000;
( U; ]$ C. n6 T* y. m) [5 SSysMin.flushAtExit = false;
, h9 E' `1 w4 |- Z) Y2 \' M3 j9 f5 j5 i6 v& y6 W1 |' r2 L0 K
var System = xdc.useModule('xdc.runtime.System');
+ _0 K4 A" F- O8 N3 J; MSystem.SupportProxy = SysMin;" K7 }6 ^' _* h% D, X1 Q& j
: }& m3 O! l3 x, t
/* configure SysBios to use the lower half of Timer 1 */7 ^) x6 f3 P4 }3 s5 b) V3 j
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');* G) Q4 Z" S( r
var Clock = xdc.useModule('ti.sysbios.knl.Clock');* l& c/ A2 u7 t, O
Timer.timerSettings[1].master = true;
: n1 Z  y" L6 C7 DTimer.defaultHalf = Timer.Half_LOWER;9 Z2 S& u1 E( Y/ R7 y& J/ |
Clock.timerId = 1;9 C, J1 p. {' w% G

& K6 E1 T: z4 N3 K/ k) @" |4 Y4 S: b& e$ B+ `
/*& R8 v$ Z. P5 k8 b6 S
*  ======== Miscellaneous Configuration ========2 ?0 E: ]0 p# w) c+ n5 \
*/
  y, z8 G4 Y) s( t' Z& i8 N$ ~! Q
/* set default diags mask */! j8 ^. m& ]" r. i: @/ @  D0 ?7 X' Q
var Diags = xdc.useModule('xdc.runtime.Diags');. d0 q% h# e) P8 e
var Defaults = xdc.useModule('xdc.runtime.Defaults');) ]) a) A- R: s( C+ f

7 b+ _0 e1 f! q5 s" W# ^" eDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
$ [' c4 }  L7 P5 u2 o! ]) [# J; LDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;" \1 Z  P- p8 d8 U2 o- j
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
& o. }8 x, n) bDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
  [+ l6 R- O7 \- z4 s2 X, uDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */. A, A0 n: y, i8 m; f/ r
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
1 }0 g) F3 [# z0 p4 A6 d0 W* hDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
- X/ w( `& |0 T  X7 @Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;' W# d, R3 }& H* {
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;5 [9 k( ^7 q8 A9 V
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
( P* d) B$ |3 Z  i: s: vDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
1 s- R, ]4 o+ ^" t9 s3 sDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
- `3 C+ I3 _# sDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;1 N2 v; h, B- B( W& l
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;, W/ j' S; N# \. g
' \5 W, r; H7 `  q
/* override diags mask for selected modules */
! w  o, Y3 M4 u8 j9 W6 ]- Yxdc.useModule('xdc.runtime.Main');
) \8 X9 m1 k% _Diags.setMaskMeta(
1 \; X9 |0 I1 s5 @; z    "xdc.runtime.Main",
1 }; G; d4 n+ h, s    Diags.ENTRY | Diags.EXIT | Diags.INFO,
, \  Y/ ?8 v' @6 P8 ?# Y    Diags.RUNTIME_ON% R* ^7 _9 z, H8 r" L, K* a9 I
);" o. F( I; S2 ?8 W9 ]5 a9 j* {3 M
% R4 ?& H8 P3 W2 P/ P, j+ a
var Registry = xdc.useModule('xdc.runtime.Registry');
+ k0 |  v1 |% I1 Y: i8 |+ R: u1 |Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
3 y* Z1 i& p4 H+ `$ n2 A- ^0 n, vRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
& O# L) j% O% L2 O# lRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;( f, U3 A8 R0 h+ n$ I1 V
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
) |) K$ h& t( z- _; N8 J" b/ P1 ^/ ^& k/ I
/* create a logger instance */! e3 T1 O' p9 ?, r2 H" E0 R
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
9 e1 `1 E' z4 Z# z8 W9 \, Jvar loggerBufP = new LoggerBuf.Params();
5 C$ m  g5 Z& q. [$ tloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
. e: M2 h8 @& @5 @8 lloggerBufP.bufType = LoggerBuf.BufType_FIXED;
2 x& S& P2 B2 O3 K1 R9 z) \% m3 k( q, e6 l; T" p! D/ Q
var appLogger = LoggerBuf.create(loggerBufP);
1 d  U2 l5 y5 r6 ]: S! j- o8 ZappLogger.instance.name = "AppLog_Core1";
# a' E8 k' l* ^4 _4 lDefaults.common$.logger = appLogger;7 a% J! H; _  Q- V
Memory.defaultHeapSize = 0x8192;   
8 V- a# ?5 ^+ v- c* SIdle.idleFxns[0] = "&LEDStatus";
& e, B, ?. M3 X( {- E5 f. p3 J* r8 kCache.initSize.l2Size = Cache.L2Size_32K;
, F4 V: u. |9 n) v; Q" X0 j
8 @7 ?; a4 L6 V8 C& t' L
回复 支持 反对

使用道具 举报

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 */
8 n8 F1 d3 o1 }7 V* J7 Svar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
8 Z5 Y( m6 o* h1 i2 u2 j  Svar heapMemParams = new HeapMem.Params();6 F8 g7 y* `% m! l
heapMemParams.size = 0x4000;8 v% d1 f/ E" n" f# x+ _( t
! [5 {# x; F- a/ ]* i) ^
var Memory = xdc.useModule('xdc.runtime.Memory');4 X2 ?* F# O' j$ f! Z
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);2 T7 p! t! P3 S6 d
2 j- _. @6 u5 V/ g; W
我大约calloc  每次共计大小为5K*16bits,. J: {) J- P/ ]" v" `* X' l1 k$ ?
而默认配置才0x4000、需要改大。
; I; P- I3 I) G5 `& p8 b) r: A0 Q0 U4 `/ {+ t! M
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
) U1 u9 l! ~! r2 R( k/ m1 }' A3 SProgram.heap = 0;
+ e. a8 \9 F- f( T) d1 P$ v) UProgram.argSize = 100;  /* minimum size *// Q5 Q7 j3 `; M
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-21 13:22 , Processed in 0.040863 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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