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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
2 f  C  k6 o9 @9 L/ n! |" o8 Y# A  h7 Y& R) n! D
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
$ W* }8 I: ?/ V* p, o# o" d  d3 e% Y& D$ r2 h
其他程序段。。。。。6 j7 U. t' o) X) }

! s. n3 ^5 ?5 q5 g  q+ e: n   free(x_d);. F/ w: r1 |( l+ j( Z( S. L  u
" b' H4 L7 u: O+ e2 O4 h
使用DSP侧单独调试功能,验证动态申请没有问题,( N) B! d7 H% `3 {8 {* H: s
- w3 Z& `- T) Y
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。* q" U( c$ }* l7 M( i) i

8 Z, t5 J+ f& G% m1 \: {" t) v  v$ `3 g( @" Q) |: @

( _  p. M- W* V' C5 @/ m( {" K! D; d; W9 h' w# F9 ~! D
( f6 }% q# b- E3 q. Y8 o& W

" q) Y0 e2 g* M, `2 o  u, X# J4 }4 o$ x  E- b5 t7 p

, f: I1 {3 F7 M7 e+ X9 q# x  e
$ f5 q/ x2 e! t7 U& w2 A
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
0 s  t& @3 W- ~# d我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
% a* j& M* j4 Z$ k3 T* \# x(不过疑惑的是,为何单独DSP仿真就没有问题呢?)- [0 d5 F6 h* n3 w, L2 w8 t4 l/ O

% o; k, ]; I: K' U$ z  P% t是不是需要在DSP.CFG中进行配置- R$ i" X; d( i( J! _7 r& K
我现在的配置为
; u3 {4 D3 ~: S, R; G, A4 C5 t3 J8 _$ s0 o
/*
$ s3 j4 P* X8 B *  ======== Operating System Configuration ========
- \& @: q8 y: g9 m5 `2 e) D */
; @8 Z, _5 @6 w2 Y6 G& {
4 X, s9 y9 u% `) H' q/* no rts heap */% C+ j' L9 t( p" R
Program.heap = 0;
( B0 S( e; m' V* V: a; E) `Program.argSize = 100;  /* minimum size */
! C2 R5 I  f, I6 ~Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
: q1 ~. z/ `4 }: ^8 Q8 A" Q1 J" R3 y: H$ p2 M! w
/* create a default heap */
' ~3 O- `" |9 {* ovar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');2 I/ c0 @* [  f& m2 i" G6 T- J
var heapMemParams = new HeapMem.Params();
3 O* k5 y* ~& G0 O: M& }& AheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大2 T4 M/ c8 @. f5 e: V
+ }! a+ I! y( `  m% p# d) S
var Memory = xdc.useModule('xdc.runtime.Memory');
# K& r9 r5 X( ]- g  A' IMemory.defaultHeapInstance = HeapMem.create(heapMemParams);8 C% f- l+ W& F( l. @! p7 T7 h

: Z. }* m: e) g" x/* configure System module */
; d, S# |+ v. I: U2 q* \var SysMin = xdc.useModule('xdc.runtime.SysMin');
* u5 l! l) U8 G) I. V# L* }3 ~SysMin.bufSize = 0x1000;
! S4 a( \7 V( l* vSysMin.flushAtExit = false;9 ?* `/ q; e7 B1 v6 @& Z
" z, u! I4 O' ]( v; q1 M
var System = xdc.useModule('xdc.runtime.System');1 y8 a' {* n5 s! }
System.SupportProxy = SysMin;
- N( O) H# D: w+ I8 I7 ?% g6 |
+ m9 @. G! J  d! N! g& v. X/* configure SysBios to use the lower half of Timer 1 */
4 @: a8 c4 r. a# K$ ?var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');2 l7 j5 k0 C) `; D
var Clock = xdc.useModule('ti.sysbios.knl.Clock');, c) |3 L/ v  S4 q5 u) U
Timer.timerSettings[1].master = true;
0 z! P6 G  W2 U5 H0 E+ lTimer.defaultHalf = Timer.Half_LOWER;
' H+ q0 E6 B3 j# L5 o7 n0 VClock.timerId = 1;
! I: o  J3 X1 ?) c
9 p2 A5 `( X  H( t. l- u
! _; x5 ?! q0 ?: P' x+ j1 i/*; x8 f* r) e# c- q) C5 z8 E6 ^( F3 _" K
*  ======== Miscellaneous Configuration ========6 `4 [2 n4 n8 z/ k1 S# L7 B
*/
. g3 y$ @$ H- r6 e
/ r5 W1 ]+ v! f3 c' D+ J& H/* set default diags mask */( u2 j- d& z5 ]% T: q0 Y
var Diags = xdc.useModule('xdc.runtime.Diags');
3 z9 Q$ P) Q7 a+ P1 ~var Defaults = xdc.useModule('xdc.runtime.Defaults');
! t; ^. I8 R, p( |: s1 a+ c, U/ y1 {5 {3 p* H. E2 n0 F% F
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
8 ~6 H6 C5 b8 l; |& q  lDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
  v8 q# u' ?( B7 HDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;, H) N* i7 j, `7 X' |  R
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */  W  i3 f* o5 {1 U6 j9 ?
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
4 R# v5 |! M+ {2 uDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
* C; ]) F6 d9 P1 v* ]* dDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
! r. `# E. M; c% \3 YDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
/ }. R- p+ y4 K4 [& ^, b1 IDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
/ o4 b. M0 |3 Q2 c3 Z8 WDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
5 U6 H1 O3 b* V8 G2 m+ }, d. B( sDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
; H' k: u- W( x8 G6 mDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
/ f& E- f# @% o4 F& X- MDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;. X# X3 _: B( u' I! g& M6 r, ~
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
/ `: Q# {% o- V
; z7 C/ Y& a4 ]( F5 N7 H/* override diags mask for selected modules */; T/ m* D3 o& W4 r1 c0 c9 w
xdc.useModule('xdc.runtime.Main');+ L6 {/ P4 f/ X$ W- w4 y
Diags.setMaskMeta(% Y' _3 d( A9 \" I; d" U5 K
    "xdc.runtime.Main",/ k+ |) ?  G2 b4 P8 t3 g4 W% G
    Diags.ENTRY | Diags.EXIT | Diags.INFO,/ i1 M7 u  E; B- w) k
    Diags.RUNTIME_ON
$ r( a+ p) Q4 A+ d);& b0 \/ K' C/ g+ T% V
5 e1 ]& Z; G' Q% D
var Registry = xdc.useModule('xdc.runtime.Registry');. i3 k* w3 o# w: ~" G
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;' a3 v% m* u* R
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;7 M+ V" T5 z- `+ V0 J+ C* p& s" B
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
. v% S- S0 I( f! A9 @! ~Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
; q4 J) n/ ^6 J+ p( Q; f
8 b3 r5 X1 G" t2 n0 q/ m; V/* create a logger instance */
+ U# j6 V' u$ \3 H. }var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');% |6 G; ?& y3 S# y) q; Y% O
var loggerBufP = new LoggerBuf.Params();
; B8 ~! h5 ~1 D& k/ L- `loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
4 W+ e, H4 P! t6 M" c$ X4 dloggerBufP.bufType = LoggerBuf.BufType_FIXED;
4 V2 o% O' t* p4 r
8 t7 @1 B! c. K, ?var appLogger = LoggerBuf.create(loggerBufP);
1 a$ i- I  c6 _9 AappLogger.instance.name = "AppLog_Core1";9 `5 K1 b  s, a6 m9 b2 H8 g$ _
Defaults.common$.logger = appLogger;0 Y1 L/ z6 U3 T1 O9 t9 R$ y
Memory.defaultHeapSize = 0x8192;   
7 ?" y+ |: r! ]6 R; x+ G- O2 ^Idle.idleFxns[0] = "&LEDStatus";
3 G% ^* [4 b# z# J: v" CCache.initSize.l2Size = Cache.L2Size_32K;
3 B- e! q4 u1 ]- [0 t; Z
8 t) u* V7 I' G6 _8 I6 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 */: `- w0 d: g8 a
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');2 x. d/ u  p: `! q7 P
var heapMemParams = new HeapMem.Params();
% Y; q/ O( _7 `8 T* QheapMemParams.size = 0x4000;
3 e% C* g2 _" K; d6 P: r; f& A5 F3 x+ J; ?
var Memory = xdc.useModule('xdc.runtime.Memory');
" P% P1 a1 U+ v7 L: @: dMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
% @0 \" Y: F1 S* u9 d9 C: d, \  D  O. r# ^9 B! C
我大约calloc  每次共计大小为5K*16bits,
- z( y- A/ U( J' x4 y7 d而默认配置才0x4000、需要改大。
  d5 n: {) O" d: {9 ]3 H$ C$ y0 A
2 }9 S3 e/ r* y8 a, D# ~7 ~
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */9 q% U6 @  Q& j. o; U/ Z$ L. f
Program.heap = 0;
/ o# t  K6 D0 l9 I; y! l( w# _+ rProgram.argSize = 100;  /* minimum size */
$ h0 w* ~" A* V4 `# K& o4 HProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-11 17:18 , Processed in 0.040947 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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