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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
: y7 l1 _& c8 K6 ~6 G2 A* [8 O
: n: f, N" C# `0 {# v  u  c    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
/ n0 C* }% s3 }6 R% C. n7 @8 _9 b3 m8 G4 ?3 R# F/ h
其他程序段。。。。。
5 Z$ Y7 w1 d% u' {, W
8 }2 ?" D1 Q( y! r; l( v7 e   free(x_d);/ o9 t. U% \% s4 k  Q

9 Z4 M+ N8 X6 o1 G$ D使用DSP侧单独调试功能,验证动态申请没有问题,
+ Y+ G, r5 y9 M. j! P! ~4 e& ]# A2 T4 [* U9 c8 ^# R4 ?7 {
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
- n. }* W1 t# Y2 [# [& ]

& L5 ]; D9 \' z8 G% L7 I
  ]( U" X* ^3 u! H9 p; j0 ?7 ^# ]) u' ~6 w5 Y# B3 H7 D. x

5 a* B. T5 b; ?$ t* h
+ @7 Z$ j& m  q, M; G; @: i: h* v' N$ ^) b( x. e' n% U' m" Z6 d

( u/ [3 N, I& \. L2 L$ `8 M3 C" A! O) C( l( ?& h8 g& W( a/ X
& a5 n0 K/ n3 S0 w; F( L6 k
( a% `  C; G( A0 x) b
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明9 b3 w  F8 w8 Q* C: y; N  m
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
* @+ ?2 S  I; y6 e. k(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
0 _7 ]; b! y1 q/ P( O. |( G

# Y' F4 z$ |+ v. Z6 h; O, Y是不是需要在DSP.CFG中进行配置0 Z! Z+ g0 T5 M6 p' P- t! m1 g
我现在的配置为
" B" A7 Z" n# ~/ |( X! }
5 m% P4 F7 M. S; ]% a! N* i/*7 @* _" U! [( ~+ i$ k* ]" A
*  ======== Operating System Configuration ========
; }$ z# I  w6 d' W( D# C! H* ]9 H */
, ]! _0 R* X( |2 ?/ y% B4 t6 `+ [# V
/* no rts heap */! s( g2 d+ e1 ]0 d/ w
Program.heap = 0;
& p1 ^: H3 e8 H3 k8 k6 L  [; X9 ~( iProgram.argSize = 100;  /* minimum size */* l& c3 N- {  `% z" u+ F
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
2 Z7 q/ R+ r9 e  f
% ^- }0 W1 V+ g8 L0 C& C/* create a default heap */
1 o/ c  _# Y3 C6 Q  y5 |9 \2 hvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');& G9 d& @* t# o  r
var heapMemParams = new HeapMem.Params();
  g& Y/ u) |- d$ u+ t& A! sheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
7 b  c! H, Y9 I" u4 _, ?* u& O5 ?; x" |+ K4 C6 x; _
var Memory = xdc.useModule('xdc.runtime.Memory');3 e) _. l5 S4 Y/ @+ K6 n* M7 [4 p
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);3 z  a1 l  \- q% t6 Q+ Z

0 t1 |8 e, V) j' }) ^- W2 f8 ^6 E/* configure System module */5 T0 Y: a% f1 I) m3 D
var SysMin = xdc.useModule('xdc.runtime.SysMin');& K8 L2 r9 T$ f. z: X
SysMin.bufSize = 0x1000;
0 l+ |# x! b) x2 T+ g# l# \$ c8 `SysMin.flushAtExit = false;0 O5 G( H. a& I* @! W- v

) k8 r1 _& D" O$ Zvar System = xdc.useModule('xdc.runtime.System');
2 X! b% l- L2 i( C% T0 YSystem.SupportProxy = SysMin;6 s- q. |3 U0 g0 }( m% p3 |
0 \  Z) v/ c" a, C$ F+ J6 R
/* configure SysBios to use the lower half of Timer 1 */; N: n( r6 }0 d5 o. z/ K" K: C& B
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');8 h4 P( |( W7 n7 N) V, {
var Clock = xdc.useModule('ti.sysbios.knl.Clock');" g/ K- t$ [* i2 J& s6 g
Timer.timerSettings[1].master = true;
' h" ]0 a3 j* \! jTimer.defaultHalf = Timer.Half_LOWER;7 S, F+ T: S7 ^: A4 U
Clock.timerId = 1;
2 F3 \2 Y: A3 Z" r
* p9 z( p5 N5 |& V+ x; {9 K; h, {. R
/*
" f' f( K% [% ` *  ======== Miscellaneous Configuration ========3 }) |+ i3 y8 e+ k3 A5 x9 F3 P
*/- n9 V% V$ J2 p7 k5 W
/ z8 Z3 }6 ^. [) t: H) y
/* set default diags mask */4 p1 w9 c4 p9 Y: y. Y- y9 [
var Diags = xdc.useModule('xdc.runtime.Diags');# R( J' ^9 \7 e& @
var Defaults = xdc.useModule('xdc.runtime.Defaults');  m9 R8 B7 h7 ?( M" E) @, [

, G( _. T: n7 T5 @, ^$ Z' ~Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
5 P- |, P; f+ U) T' g$ H' W, i* a4 EDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
  G2 n/ ]+ G8 n  dDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;9 A5 ?5 O, ~( @! `  W6 i3 O
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */( B! [3 M: U5 K2 G/ X
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
4 j5 e, z# }" e' E0 wDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;  I4 \( _9 s0 U1 c. V: q3 W. d. n+ ^  \
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;6 W+ t! q. L2 Q6 h) Z; I
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
: a8 d; z  @# s8 q  V# k" lDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
# O8 C" S% p+ C5 O. eDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;2 c/ T- i8 }. h5 I
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;# A" ^& o% y0 o+ ?8 Z
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;$ x4 j8 t' d. a! _6 \6 J
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;: |8 G) F2 l! U5 G* m
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
' Z7 p2 g0 M: Y7 S6 Z2 W
0 @8 g3 M! w. H4 {1 E: f" F/* override diags mask for selected modules */! x2 H$ z! s; M4 ~/ H8 a
xdc.useModule('xdc.runtime.Main');( ~6 J, e/ C  j+ k4 t+ _9 v
Diags.setMaskMeta(" q7 S! T4 J8 Q, {6 t
    "xdc.runtime.Main",) z5 ]. L6 m: Q7 @
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
: D" C% a) u2 n& p9 s( B    Diags.RUNTIME_ON
4 z* |+ i$ x' m8 v3 u);- Y% o/ z0 }; b+ o7 O0 k& ^

/ R" o5 v: r* v, g; \( n0 Cvar Registry = xdc.useModule('xdc.runtime.Registry');& K: @6 B% Z/ r  N% G$ _: {5 x3 b
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
2 i: k; P4 m# e' i( fRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
% e- V4 n/ o( O- l1 |Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;2 x8 p( H5 C% O1 F1 Z* I( S
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;6 ~1 s6 F% M) Z+ k- {- k# E
$ B  j' t2 O0 Q) H
/* create a logger instance */
% _7 s0 ?3 m2 a! f2 h& o' ^) j/ R# g# Lvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');( @3 P# z" W% ?
var loggerBufP = new LoggerBuf.Params();
, Q) H3 A" ?; s+ p; hloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */( }; U& w. {9 c" y0 f; G, V
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
6 H/ I' e& p; w9 q4 ^+ X9 T, U
" Y9 b; Z0 ]# k6 Rvar appLogger = LoggerBuf.create(loggerBufP);" v- Z2 Q$ z- A( f
appLogger.instance.name = "AppLog_Core1";
' }2 ]2 U" ?7 g7 ZDefaults.common$.logger = appLogger;& F$ }! V1 ?# d# Y& y
Memory.defaultHeapSize = 0x8192;    . H) E' U5 A" m# w
Idle.idleFxns[0] = "&LEDStatus";
; C5 v& R  w" B! HCache.initSize.l2Size = Cache.L2Size_32K;
* F$ D0 M- ~" J% G
: u. ]/ i7 Y& ~1 u
回复 支持 反对

使用道具 举报

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 */& i. f3 _5 i) O9 x' f, z
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');& E$ R4 X  S, s8 W
var heapMemParams = new HeapMem.Params();6 z- ~! p& q+ S* u: ], W
heapMemParams.size = 0x4000;
% B/ U- E; k" L
3 g/ O$ a. [: W' `1 f8 hvar Memory = xdc.useModule('xdc.runtime.Memory');
3 Y3 M0 \/ R% @7 |2 p# ~( _7 fMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
: _& z' Y9 d0 M* l9 S
8 p" y) T; p6 M) o9 x; j  P我大约calloc  每次共计大小为5K*16bits,
4 }& E( _0 x) ~/ R" s而默认配置才0x4000、需要改大。" t% ?5 A2 }: o6 ]

" t. z: p6 F2 x
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap *// s- Z0 W8 }- O! D0 W0 Z. c
Program.heap = 0;( Y( o* G  i, t
Program.argSize = 100;  /* minimum size */" o, W7 j4 _$ _) g
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-15 00:55 , Processed in 0.039343 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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