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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构7 E6 S$ @7 a0 w

& J% W7 e1 N0 i    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
6 [6 B# I, E: H  T; h  ?
4 K" O& s. a! K# ~- s+ ]3 d其他程序段。。。。。
! d7 O. _$ E7 o' y$ O 4 e/ P; ~1 _$ f
   free(x_d);
. B+ s" s( X2 o' B0 i3 s2 f" y+ R
8 d0 L- k& H4 i' ?& v使用DSP侧单独调试功能,验证动态申请没有问题,9 I) D5 L3 k! \; n7 R. H. x( ?
& c) ]8 @3 `" s3 b( h% |
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
' j% _* j1 J; D% o# O% e

% S9 N* g+ H2 ^& b4 I
6 i- h" |! v/ s7 g5 |( l/ l( F! _1 x4 K2 r8 G0 O# f

- r, z6 `% U/ C: y7 ]
! W0 `' L+ a, o& @. Q2 @$ f: ^/ n2 o- x4 ~# H0 R+ ?
9 N0 V  M4 a- V# k* j, f7 l, M# \
& h9 U7 Y8 B: V
( e/ s& f2 `7 q# a( ?, O4 [; N
4 U" V" a! {$ ]+ A
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
1 d" E+ q, ^7 H# e8 d8 o我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
. @& D0 l, Q* B5 f& g" v3 E(不过疑惑的是,为何单独DSP仿真就没有问题呢?)0 p) \' Q) ~" C8 o! L, X$ P

4 w6 @: k/ p+ D9 o是不是需要在DSP.CFG中进行配置7 J& M( w, A2 A3 N7 }2 Q' S
我现在的配置为0 @9 {! d) q: Z+ O1 @1 t2 P2 d; M* _
2 `: e4 h( A6 H
/*! P+ R" l7 {  V! w0 Q4 l9 R
*  ======== Operating System Configuration ========
) f1 Z7 R. F+ s# ^. |4 D+ C7 ~ */# O" T1 |+ G1 }5 ^& I# z) |

# Z( e0 \' `% \! B! R% S/* no rts heap */
9 K4 {, _# f+ A& h5 [Program.heap = 0;% s) W- d' D+ Q
Program.argSize = 100;  /* minimum size */* t8 a7 E6 O3 ^/ ]2 ?2 f- f
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
/ w* x* s+ r  g% j
2 `9 W( J3 |8 m0 k/* create a default heap *// g5 e9 v& k9 v) \; _; `, l, g
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
" t. r% g& E+ f* mvar heapMemParams = new HeapMem.Params();
/ C# V. o. C2 n2 p' K# n0 s" LheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
* C4 Y: C  c- `% I9 C/ e& ^7 B
& w) o: A6 Q% }# _0 S7 i
var Memory = xdc.useModule('xdc.runtime.Memory');2 Q& E- G9 x2 k" ?) G8 S0 _6 o
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
' Y" Y5 g6 d* L# i1 ?. q8 J4 w( L# A
/* configure System module */
' P, X  ^- f6 Y+ _2 q% R: wvar SysMin = xdc.useModule('xdc.runtime.SysMin');
; f2 ]9 H, R( M: l  d' wSysMin.bufSize = 0x1000;
% F( W$ Q+ I5 ISysMin.flushAtExit = false;" i% [: L+ a- w7 Z6 r! W" `

! r: F, M8 |- `! u+ @* tvar System = xdc.useModule('xdc.runtime.System');3 S  e! H: l9 X4 Z' n% ]. |% F& O8 D
System.SupportProxy = SysMin;0 g, e8 l0 j3 p6 C2 m0 I1 F$ V

3 v) \: W* W3 h1 |3 K: n/* configure SysBios to use the lower half of Timer 1 */& c" X! I# Q; v# R8 n& d0 s3 I$ |
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');  s. y  ?6 R$ C" C- I
var Clock = xdc.useModule('ti.sysbios.knl.Clock');3 a- H/ }; L; t
Timer.timerSettings[1].master = true;
, {  `; _9 q. f  K8 q: ~) RTimer.defaultHalf = Timer.Half_LOWER;
$ `% d9 }8 `6 Q8 n$ yClock.timerId = 1;
8 C" N. r0 O. m$ x1 _' G# r' j6 ~/ [
! p% }$ u# @+ V5 p: T% Z/ x4 g
/*. k; x" ?; e0 C1 g& `# Q3 J
*  ======== Miscellaneous Configuration ========6 d0 b+ w* Y, D$ ?) I& D  Z
*/+ c6 j8 Z+ I1 _+ s

3 V4 \( U: e0 D) d/* set default diags mask */  q5 S, ~/ C9 F
var Diags = xdc.useModule('xdc.runtime.Diags');
5 b/ r! [, L* G2 ]) F% E: Bvar Defaults = xdc.useModule('xdc.runtime.Defaults');+ U  K1 q# |  D* F" v; `
  _, x% v+ r% r, ]# Q1 @' ]
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;& ^. ]. Y  r5 j7 O5 V
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;$ Y5 B0 ^2 d% C2 w. U
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;( r) }! O+ E6 ^  ^5 q& b3 [2 l
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
2 R  U3 _$ l5 N0 lDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */' n  \0 H! `, @* q9 K
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;  L* c' O7 ]- w6 S- {% K' m
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
" s( _% d, ]% sDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;8 b/ ?( @) y- z. V
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;$ ^1 a# \" F4 Q- H$ H, w+ U4 T# |
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;( `& B$ \. O' @3 ?
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;; S+ p# a  m# Y# k- y! M
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;8 z' u' v! @; Z6 T! j; c
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;% L' k% x" \! ?; n+ d" f8 K7 z! w
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
8 ^! o4 D' l) O# p) h! ]. j0 Q) q! d- w$ H3 E2 Z7 d! e
/* override diags mask for selected modules */# o$ x; v  c1 U$ @2 o8 }+ U! B
xdc.useModule('xdc.runtime.Main');7 w8 Q( E0 [% v6 P3 E
Diags.setMaskMeta(
0 d+ e7 f% g3 q# x! L    "xdc.runtime.Main",5 D* h1 u! r1 G
    Diags.ENTRY | Diags.EXIT | Diags.INFO,) g4 }1 l9 K$ f. e0 Y" `
    Diags.RUNTIME_ON
% S; M( f8 Q0 K& ~/ m; d& ?);
3 ^4 g# R! e( B( i) e+ N$ M8 n, c4 L5 F2 H+ B
var Registry = xdc.useModule('xdc.runtime.Registry');+ x' a2 q8 u. V/ L
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
& t8 l! N, ~1 C4 l3 tRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
8 ~4 U8 L9 U1 a0 o6 NRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
$ |) m. I4 J5 A% t' R# F7 YRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;5 e& Q, J8 R" j. `

' {; r& T5 ]! N8 `, h+ ?7 l: T/* create a logger instance */: V8 ~/ A" t% n2 l$ d+ x/ _3 X
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');( W, q* x1 j: s! ~5 `
var loggerBufP = new LoggerBuf.Params();
& ]; H7 c" C* V' W) {, YloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
, W; K+ x  {) y& H3 |loggerBufP.bufType = LoggerBuf.BufType_FIXED;6 d( u: k2 J) N& A7 v
& n  N' H6 A! O) F' b
var appLogger = LoggerBuf.create(loggerBufP);% S. V# a  C. X0 X' G+ V% {
appLogger.instance.name = "AppLog_Core1";
/ l9 O# Q, z9 B( sDefaults.common$.logger = appLogger;9 J: v5 J5 n# |) g
Memory.defaultHeapSize = 0x8192;   
4 k1 t4 H0 }  K/ m9 B. e1 oIdle.idleFxns[0] = "&LEDStatus";
0 Z7 n, c, m( q2 R1 Z2 O5 G- \& e  |Cache.initSize.l2Size = Cache.L2Size_32K;
$ ^9 z  ^9 }$ j! ]! w. b5 ~7 W& X5 k' x: b% 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 a. D  [" D) N7 W3 m# `( X: ]) F5 Y
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');' l1 p2 W8 k! w1 V. G& Y* o
var heapMemParams = new HeapMem.Params();5 I* z* S3 X5 U' E  G# `
heapMemParams.size = 0x4000;) L5 R$ t1 L1 L2 o. E$ \2 R
" r3 V+ _: t8 K
var Memory = xdc.useModule('xdc.runtime.Memory');4 L# C0 C# A4 `
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
, @# S2 B7 |! s4 E; k( }: n$ Y. j1 x7 m. B  c8 c* Z
我大约calloc  每次共计大小为5K*16bits,9 T2 F2 r5 `- b( }: D" I. r0 U
而默认配置才0x4000、需要改大。
% \/ {! W6 M0 [3 K  Z& k& W! f. f  A$ R4 y
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */# J: E  }* p7 I% [! G+ `
Program.heap = 0;# K  K" Z3 O; P
Program.argSize = 100;  /* minimum size */
1 X3 ]$ G3 M3 A% P$ j+ aProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-31 02:07 , Processed in 0.089011 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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