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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
( x( f1 K1 b8 G7 |  H' \3 H- ~  ^
( C" h- r& J4 s( t; R/ P4 N4 f3 B! p    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2562 j$ S- p3 D8 v! T( J& f7 M9 T
- c6 h% P! H: {; q
其他程序段。。。。。
. F% J5 l- }- K7 R. q( ]" }/ R 3 ?- ]+ F$ G9 n: e+ a  e1 Q: w/ j
   free(x_d);, R4 ?! M1 d' n4 \8 M9 O. c3 ~( k7 B$ G

! D% ^: J/ J1 d& g: ~使用DSP侧单独调试功能,验证动态申请没有问题,6 z" F4 f: C% a4 i" a8 q" k9 @7 N
7 P8 g$ `) z, u5 |, ?' n5 |
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。* _7 T* m8 @' j( d
! L! p7 z2 d9 g( H: P: p8 V

; g6 s: A: N1 R' ^1 m% p2 [( k; @) o/ ~, A# Y

# ], k6 F+ a7 r! I+ S( F9 f% N" O6 @. W$ m* v: h, ]" ^& D
# e8 H$ v, k1 F2 ^

) }, B+ [; e8 C# [) H
7 X3 f, J/ s; \7 ~8 \5 P
7 ]2 F6 \: g' [2 [
. v0 E6 r7 b" P3 m! l0 W) S8 f
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
! \0 Y* e( O: x# u8 c* C我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下: h/ b. D" `0 _4 F4 ], K
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
' O- d/ V, m0 N# z% k& W* C
- P' a* A) o. e3 s: \! W+ w
是不是需要在DSP.CFG中进行配置
. G4 }% w2 ]7 P我现在的配置为3 n2 `. P, W0 q3 @% Z) Z  l

! _8 F" _4 Y' i( P2 B$ Z( ~4 x/*6 A, k6 M; U" ~! ?' k7 H
*  ======== Operating System Configuration ========
, _( l7 E- S) X+ f3 H  a3 m */
$ l) n/ I9 f" T' X- p" i$ O+ F9 @3 j, b, T. z" F
/* no rts heap */
0 h4 a+ s/ n+ W' X5 Q; q7 pProgram.heap = 0;
' k# p7 ]/ v  m  z9 M( T6 ZProgram.argSize = 100;  /* minimum size */
% ]% u1 I% @8 GProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大* r6 V3 y2 y1 Z
& D; `2 N4 i" \' K$ _+ _; F
/* create a default heap */' h& Z7 |/ a7 |0 K' |
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');$ u9 @8 w. ~. n! W. ]* p6 j
var heapMemParams = new HeapMem.Params();# {' R) w) a% Z9 h
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大1 e, i4 M3 T- v' B7 v

! J& z; n, ]* T. t/ S
var Memory = xdc.useModule('xdc.runtime.Memory');
, v' F1 N* S1 N4 [* B) BMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
8 T" E7 @: a, `9 ?6 e3 x( n# E* ~/ i& C% U, `- T
/* configure System module */$ k6 b0 C/ y9 p0 D1 M+ }# H
var SysMin = xdc.useModule('xdc.runtime.SysMin');
) _5 p% r( q8 A5 h5 {/ P2 @SysMin.bufSize = 0x1000;- F5 V7 ^" z; \1 U  U4 b+ X9 M) I. }
SysMin.flushAtExit = false;
: g" r! |: n8 j5 C; o9 H& U3 E) `( W: j! I( }5 L" U( y
var System = xdc.useModule('xdc.runtime.System');- T# i. j4 v3 `4 t' f( R
System.SupportProxy = SysMin;" o  @8 B9 k$ V2 }# `! c2 e* a

3 e$ G3 C3 r3 h5 m9 ?0 K# Q/* configure SysBios to use the lower half of Timer 1 */2 z# [; B5 W" h: a8 J5 w" N: Z
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');, J" Z3 V3 b7 M
var Clock = xdc.useModule('ti.sysbios.knl.Clock');3 i1 {1 I. i! R) g5 C0 C* d% A: T
Timer.timerSettings[1].master = true;
+ }( i$ O6 h* n: ?: B" S6 q3 f! LTimer.defaultHalf = Timer.Half_LOWER;
( v: z# B! r" R' |. J! DClock.timerId = 1;* a: X! b9 ]5 F4 a+ a5 Q
& _" \, b  a  h' e4 R8 m1 h+ s
) i. q5 R+ Q8 U  Y0 p! A2 L$ `
/*$ e% R1 I7 }7 @* [7 G
*  ======== Miscellaneous Configuration ========
9 x) d/ ^6 H1 Z8 L2 a */
( L' T8 i# A5 H0 K/ A, G" j9 ^- L4 @1 D  _# E  u+ o
/* set default diags mask */
& Y; @+ |6 T) M' Pvar Diags = xdc.useModule('xdc.runtime.Diags');2 j: x, Y2 q( _: l4 t, E! |$ z/ m
var Defaults = xdc.useModule('xdc.runtime.Defaults');
4 m2 T4 H. n% s! K. @3 _+ q( A. n2 x# k( }& {! D
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;! W3 [1 v4 e: x# Z) H
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;+ m$ L- Y% c9 V
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;/ t- f: Q) F" X9 x$ z
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
. Z- h4 a9 `8 L4 _$ zDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
- V4 `' t! a: U9 DDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;7 x* d- W- V+ S3 b2 U
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;  C9 B+ F  {4 x! q9 ?
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
+ `$ B& p& ]& a0 O  KDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;/ n3 V" u  v9 L8 ^
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;. j/ \2 H8 D1 }  g7 S) }2 H, c8 J
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;9 U8 t. ^$ W! {# n4 c0 c' u
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;3 {" a) I% K6 S% L( b& x* X# J+ {0 F- n! `
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
, |1 k! p/ Q5 n2 ^7 c& ~Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
8 M) B, J/ `* ?. [6 w( K: W/ n. l  D4 I1 s2 O
/* override diags mask for selected modules */
! ~% Q5 z# ?8 Zxdc.useModule('xdc.runtime.Main');
' s" A0 l8 V$ q- iDiags.setMaskMeta(
& P/ C8 ~! t8 J8 X* I, P    "xdc.runtime.Main",
, e: e# e! L+ V% v: V    Diags.ENTRY | Diags.EXIT | Diags.INFO,
" l! l% c4 W# ?3 \( m$ q7 s. ~    Diags.RUNTIME_ON
7 q' ~* J) P1 e3 W  F2 D2 s);8 b1 b" ]6 A3 V% n! x
% N6 |+ a% k: W% @( _
var Registry = xdc.useModule('xdc.runtime.Registry');( D8 x/ _* }0 d4 |. H6 G9 Z
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
0 ]6 ?2 C9 A  S$ k1 u8 X# LRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;9 k  p  w! K6 @6 f, ~+ Y
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;( |# B1 R: l- D$ @' t* v
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;1 M9 b( g  U9 b' ^! [# Z' n0 M

) N8 w) _, p! n8 s' b( d/* create a logger instance */( }8 I6 m- K/ H" N0 e
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');- j( w; \) g6 P
var loggerBufP = new LoggerBuf.Params();% ^# g0 N* S( h+ X; ^, A8 s& j
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
; k7 a" R2 v' X: P8 C8 d( xloggerBufP.bufType = LoggerBuf.BufType_FIXED;
4 C4 ]: U) |0 k% k3 g/ s. t: v2 m; O' V
var appLogger = LoggerBuf.create(loggerBufP);7 C( M% ^5 X: {; t" I
appLogger.instance.name = "AppLog_Core1";
/ R3 u7 S2 N5 Z: A4 KDefaults.common$.logger = appLogger;6 ~+ m0 f9 K9 a, s) d: }
Memory.defaultHeapSize = 0x8192;    ( d  F- y4 h8 e( E5 P3 U4 c6 m
Idle.idleFxns[0] = "&LEDStatus";6 x( L4 J/ Q0 u9 y8 `) f
Cache.initSize.l2Size = Cache.L2Size_32K;
" q' s" g& l5 P$ w+ a: `* [- g* y) J8 g; Y, o' F. D& B
回复 支持 反对

使用道具 举报

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 */6 x& r0 e5 v7 g$ k* n' y
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
8 C2 X5 y+ C' m2 Z% `3 f6 ~var heapMemParams = new HeapMem.Params();
+ C: g; u- M$ L# K4 }4 m% X- H9 \/ ^heapMemParams.size = 0x4000;
+ ]0 d  k0 h3 S6 t9 g/ V" d: r7 x1 Y
var Memory = xdc.useModule('xdc.runtime.Memory');
+ v8 }. H  p/ w3 X# z( oMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
" F) S1 L: S; O4 d) ?2 S/ K
% a& u( @3 W: J7 B0 z* F1 \: p我大约calloc  每次共计大小为5K*16bits,0 g1 r  j) f: ~" ^9 U# ?- I( f
而默认配置才0x4000、需要改大。
$ Z5 ^% i4 w) p$ P, y- j  ~- r1 ?2 `' \
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap *// a+ B' |" |2 N7 S3 i
Program.heap = 0;
! T, x$ d" c$ X5 t2 G5 C( fProgram.argSize = 100;  /* minimum size */  q) d1 d+ e6 X5 q+ }
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-4 21:16 , Processed in 0.040297 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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