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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
( i6 g7 D3 d) L7 w" H8 m5 M8 `) m6 \" t1 n, }4 |, G
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256& ^  M# I, V5 s
3 p9 b6 t1 }: P2 U' }7 b9 l
其他程序段。。。。。9 [2 f) }3 I  J

" `% z$ P: b0 x5 v0 m( D   free(x_d);( Q+ c& {: w- |( I$ q

( a7 m1 d, p4 c; _  j; o使用DSP侧单独调试功能,验证动态申请没有问题,! _; {9 |8 w  r3 J

1 G( D. p4 k* |6 R. \9 Z但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。4 D  Q: R/ U$ J4 J
9 }+ h$ F; O) g2 Z" c  P% h( _

0 V. @& d, q3 t6 A
0 j9 S7 z; O4 o5 A5 `- G0 j% ], T" \
2 `3 M7 q( q$ ~- h' Z7 \

7 R9 ^4 k. p) }* t" S
* ^$ j1 o1 @" L; D2 n/ c1 Q/ h3 e0 A6 y) P0 b% u' ^6 B4 b
' `3 k' K. d) f3 Y
1 S) r! z  j: F. T9 S- A& x% ?* l
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
0 O* k8 J2 `9 e/ Q2 E8 G我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下1 g/ u2 d$ Y/ B$ }
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)1 Y( j7 z9 }6 v- Y9 d! b

; R( n; X& q7 J" G# _1 f是不是需要在DSP.CFG中进行配置( d) ?5 n9 N, @, o
我现在的配置为0 u4 `8 {# f- r# c5 @! A* E

) `2 y# `! C8 Q5 j3 m# _" D/** p+ A% X1 B2 s
*  ======== Operating System Configuration ========
+ h! g. R2 o" ~6 ]8 c9 C! H */
8 o: q6 I3 V3 n1 v8 ~1 {( }2 Z; C  f6 k* h% S. R' F( X% Z# P
/* no rts heap */
) J! _  Q# o% B+ ZProgram.heap = 0;
1 D' A/ w7 k3 u  \/ m, PProgram.argSize = 100;  /* minimum size */" ^; e/ c8 N1 Q
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大5 S7 ]9 E0 M6 y

: g) h+ C* h6 L! ?! y/* create a default heap */
% ^( m7 b" H. r0 `var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');2 f! J3 v1 [7 Q' V- W5 p
var heapMemParams = new HeapMem.Params();
. B4 b2 _. Y  x' L: _6 ZheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大& s3 p  V$ e/ F
" U7 O2 ]' b3 ?* h% r5 m; e$ b2 L- @: d
var Memory = xdc.useModule('xdc.runtime.Memory');9 j1 E3 ~! P8 ]1 g* |" _
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);: P% ~0 }1 O+ p* J
. T& l7 U7 ]! F, f, Q  l
/* configure System module */; J# ^: A# j; a0 ~
var SysMin = xdc.useModule('xdc.runtime.SysMin');
1 \) X4 @3 G/ O/ L' }/ ^# y% ySysMin.bufSize = 0x1000;" M" @7 Y% N2 Q; A! T5 Q
SysMin.flushAtExit = false;, `$ F, x1 Y8 K+ N
: o: C9 k5 e: l
var System = xdc.useModule('xdc.runtime.System');
! X- G; U. _& b  c- SSystem.SupportProxy = SysMin;
/ p8 G  {. C/ }9 M7 n1 G( D
+ P6 Y9 k" G1 W) ~/* configure SysBios to use the lower half of Timer 1 */$ i" L5 F2 |: h/ x+ J9 ^: W# w
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
# B# t3 o& f$ U8 B5 O% Lvar Clock = xdc.useModule('ti.sysbios.knl.Clock');& ~& U6 ^3 d# ?) s( k, C) F
Timer.timerSettings[1].master = true;
! _  w! L  l7 b$ {, v5 xTimer.defaultHalf = Timer.Half_LOWER;6 I; U3 ^0 m2 j: f& k
Clock.timerId = 1;. |3 G3 \4 r+ R2 i5 `4 [# W* {
4 L1 S8 p, f  q5 S* A5 Z- y

" |+ V  I8 S0 [/*
3 M& `# X( m+ U) h- U1 N *  ======== Miscellaneous Configuration ========: ~* Z5 t( z/ b* s, N
*/
; `- J( w! Q, |0 U% S' B. x/ p2 a9 K9 F+ k7 O0 `
/* set default diags mask */3 y4 }4 ~6 F- K* \9 P
var Diags = xdc.useModule('xdc.runtime.Diags');
5 g) s6 b0 R  [0 C8 ovar Defaults = xdc.useModule('xdc.runtime.Defaults');  }' F0 m8 E6 \4 Y( @# f$ `/ G
! y; r0 s8 b% a$ B
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;- L/ w' e+ G( s9 D) r2 v
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;3 W* e. p3 ?5 ~( X2 L
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;. _7 e$ S& i7 g+ v
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
0 O! B; c% F2 {0 O- a- m5 hDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
# r1 b# I5 Q- }! V% X- m- D  GDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;3 A0 h: N) H, A0 ^$ I
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
8 {4 l8 h( J2 m' J/ i0 [+ GDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;) i/ ?, N( i, q; B
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
: n( l& S) K5 d: Y# @+ uDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
+ p* D5 |: a; j3 v8 v3 uDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;5 S" J0 r7 g( N% z9 R0 p% S
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
4 W, P9 P$ h" C4 `  F6 FDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;5 I4 n' u4 E7 o( h) q7 e% n/ q
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
3 a( Q  i% x0 ?; t9 P+ }  {% Z5 A4 }  c# v. G" ?. r
/* override diags mask for selected modules */0 b% y, [# x% J; C
xdc.useModule('xdc.runtime.Main');
5 b; |. j( s% W, _Diags.setMaskMeta(
; P* a& Q- j' [. H( F    "xdc.runtime.Main",4 X; l: D/ O9 w% }9 n
    Diags.ENTRY | Diags.EXIT | Diags.INFO,+ O% @0 E! ~9 Y+ a; {! q1 ~
    Diags.RUNTIME_ON0 v" R8 ]! F; I0 V7 J) C( G* P9 d
);8 W3 B3 e. }8 R: f

8 b6 e6 ?5 I7 Hvar Registry = xdc.useModule('xdc.runtime.Registry');8 A, d' L5 r: K3 H6 W
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;0 L0 j/ w! z: N! ~
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;) Y* c% g  \8 b6 B! p, K6 z
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
% t  {& P. \6 QRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
3 t2 U- v+ x* C& ^# p7 l; a
8 O! f8 X! u4 l: j2 |2 T/* create a logger instance */" L: ?; ~- n: [2 C
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
0 ~! A* o0 i# d8 ovar loggerBufP = new LoggerBuf.Params();
' I* I% p$ f2 s3 |+ v9 Z1 k- JloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */& w( A) i  R1 e) ]$ W: @
loggerBufP.bufType = LoggerBuf.BufType_FIXED;1 M8 g4 x5 X' s1 T
* L+ r% d7 }5 T9 r
var appLogger = LoggerBuf.create(loggerBufP);
: y' z; L2 p. H0 ]- _  \  [* Y- W* R  kappLogger.instance.name = "AppLog_Core1";
9 [- o; o5 j- q. R/ w2 e/ eDefaults.common$.logger = appLogger;
. B' ~- h- @$ y( pMemory.defaultHeapSize = 0x8192;   
! U2 f/ M# Q4 ?* I8 yIdle.idleFxns[0] = "&LEDStatus";
% Q1 Y# ~2 y" I. S' gCache.initSize.l2Size = Cache.L2Size_32K;( p. M/ G, X5 R% [& h- }$ Z
" V) O3 x- R1 |% ^% Y2 X  Z& |% T  X3 o; j
回复 支持 反对

使用道具 举报

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 */
$ p! D  C) g# }var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
# A$ @$ A7 T4 e2 y/ Y' Wvar heapMemParams = new HeapMem.Params();
# Z& t2 F- N) ]1 m+ r# S2 lheapMemParams.size = 0x4000;
: r) R& s3 m( E
" K" a4 s+ _# X4 f5 q6 N1 y& s& ]3 [2 }var Memory = xdc.useModule('xdc.runtime.Memory');
( D: j: m( o/ ~$ ]* fMemory.defaultHeapInstance = HeapMem.create(heapMemParams);/ t( P; }$ h. J1 `

: p6 ?) X2 D; k* _+ j* h我大约calloc  每次共计大小为5K*16bits,
  E' f2 i2 {/ I7 ]' f0 }$ Y而默认配置才0x4000、需要改大。
, W. c5 e3 Z% t9 @) B) Q0 g- O1 ^
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
3 b, y+ k3 E$ V/ [Program.heap = 0;# @: p3 s) x, K) v0 C
Program.argSize = 100;  /* minimum size */: [! c8 c' X$ c" O! V) u/ A  a$ }. w3 G% q
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-12 03:15 , Processed in 0.042001 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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