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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
) w7 X$ i+ o9 Y( `: }7 \1 N: j! t, A! h9 U* [$ q; @" t8 }
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256" b+ j2 d- q1 v3 u6 O8 [

8 @6 F4 z+ ^2 d; {9 v0 ?, f* J* f5 T其他程序段。。。。。: {3 J( Z  `  C+ R/ O# @
0 ?$ b; Z9 c. k% ^5 j, n6 w5 n
   free(x_d);
' S1 H3 D' L/ D0 n7 b- c" u  i* \! ]' e. ]
使用DSP侧单独调试功能,验证动态申请没有问题,
. p8 y+ d% H8 e4 Y) n6 g
8 Q3 O+ Z# l: l: u但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。7 X. O8 g0 ]  }3 D; f
! }" x7 h( J5 i' F  T, C
& _4 t+ N# k. v( X2 |9 X7 Y
7 p8 Y$ @. N% f5 b9 Z) U9 w

2 `# A4 Q+ f5 D7 p7 w! }. c% f; V
1 o4 ?! Q  }  P( }+ p
  O/ E3 l: J: \' }* b& d
# B# l5 W4 K# f. j" z
" o2 W3 M, w! u: K6 l' I4 K9 @/ a/ Z, N
' `9 C6 c3 ?  v( p7 M  w
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
/ H. E8 w4 ?% O3 p3 v/ `  J我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
# C% `) V% q% `3 C) y! P" [(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
1 ~+ v2 W/ v, m" N: B7 Q& D9 g

% R: V+ Z7 m3 H* K7 t是不是需要在DSP.CFG中进行配置
) C/ v0 W4 k/ L& B" S& `我现在的配置为
7 Q! B. O2 y+ @7 a; g$ M/ {' U. ^. E5 g: I0 s6 m
/*- s- d) {' `6 N( {) N+ k- ]
*  ======== Operating System Configuration ========
6 B% U& D- i  T( e' w6 t6 V6 Y */
, S8 ]! H' Y! k5 `7 {0 O0 E
0 G, ?+ P/ i3 ^( }/* no rts heap */
  d+ T5 ]( F) L7 A* r7 JProgram.heap = 0;
0 r7 E9 I2 f, Z8 ?$ mProgram.argSize = 100;  /* minimum size */
4 g- W$ G, _2 x; n1 f$ n: M% c' O% xProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大: U7 T# i7 ?1 ?% \8 |; c) G/ C

1 N2 N( f6 ?9 c- F8 a3 [4 B/* create a default heap */# G3 G* t$ x" r7 ~& F: ^0 b$ A) \" Y) B
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
; _# M" T) ^7 e+ h1 mvar heapMemParams = new HeapMem.Params();8 B  l+ b" v  T/ E$ d
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
/ N3 O  y0 F, w
) j  Q4 g; j4 `2 i8 c/ t
var Memory = xdc.useModule('xdc.runtime.Memory');2 G1 l0 \: V0 F
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);% Y8 d2 \5 B6 F+ W9 s- i
# ]7 ~% ]3 [% q7 R" U
/* configure System module */
) o" j( j0 l( r1 gvar SysMin = xdc.useModule('xdc.runtime.SysMin');8 _# N* _# n; E
SysMin.bufSize = 0x1000;6 {6 F8 [0 B0 _: E- O* q
SysMin.flushAtExit = false;+ h' F$ v) {6 H& A2 k" F% d
5 E' ~, _7 m) G5 w
var System = xdc.useModule('xdc.runtime.System');, y- f/ i9 x$ J6 Y5 m2 z
System.SupportProxy = SysMin;
& H9 T  d. ^, }0 A: U5 w: L' q# `- q; W% p4 C# V
/* configure SysBios to use the lower half of Timer 1 */
4 `+ |1 S0 j: r6 i: Jvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');3 M- C" ?: i$ f- e: ]( V
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
& @, u" ~, t" |. o( b% r6 }2 j, zTimer.timerSettings[1].master = true;# a6 U- K/ B3 G. M5 \% p! [
Timer.defaultHalf = Timer.Half_LOWER;
3 G- O0 b7 `0 q, d* XClock.timerId = 1;, ]* G2 Q& }$ {1 g. \" {* B
" {# T8 w# G" G' W( [

" J2 C8 Z; T7 x3 }% z/*
" n. j& b6 W$ c) p *  ======== Miscellaneous Configuration ========
* w$ y$ s$ G7 ?% m& \ */2 ?  G  f: h7 p% W

6 I+ \# }' H2 e2 _; p' o1 V/* set default diags mask */
3 Q2 v( l- f8 q1 ~- V! a! bvar Diags = xdc.useModule('xdc.runtime.Diags');
$ z3 [9 D) t/ Wvar Defaults = xdc.useModule('xdc.runtime.Defaults');# O+ d. Y) |1 z$ w) [$ `5 z

9 t, g5 P6 r: ~Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
0 I( H  m/ l, b9 }, ]Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;; K9 J" w" N4 T! p; e1 F' w. x  ]( P
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;  N; s7 b$ A5 i; e2 b' w
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */9 ?5 B  _; s2 n8 |# ]0 }* l: z
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
$ _" v) A; u6 tDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;2 D! L* M- I" R  G
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
6 Y" [$ T( q' SDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;9 _' U. w) O1 x( \
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;8 h+ m7 j1 g+ d* m4 C) f5 B
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;1 G) U) n  ?& s) D; D
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
! U) g; L1 q+ A- {Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
4 o; F( |5 y2 p' o* O. @7 ODefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;3 p2 V/ F. m; D7 E$ G9 }
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;; X4 N& d- T/ X4 M; \0 |
' t% E  U" o8 }) z& H  z
/* override diags mask for selected modules */
% `& T. R8 {! t* b3 g! Zxdc.useModule('xdc.runtime.Main');
; E- D! O5 w* m- C0 F3 O" U, }) C, [Diags.setMaskMeta(
+ p0 @. \1 o  \' a% m    "xdc.runtime.Main",, j1 Y9 j, Y; t, X
    Diags.ENTRY | Diags.EXIT | Diags.INFO,  [# Q8 Q' o: i4 p9 G9 J
    Diags.RUNTIME_ON5 K- n/ R- Y4 ~8 W
);
8 U. ]5 ~# f% a8 W" d2 o& v7 T4 x
* \: Z' D+ {  n/ y& X8 g6 _var Registry = xdc.useModule('xdc.runtime.Registry');
4 P' E4 M$ l9 ^) I$ c9 B0 ]Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
4 n4 U7 K! x  C3 y6 NRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;6 U( n! ~/ B! I( m4 L8 y' A7 H9 O
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
' d/ }* c2 H; M% |7 h* CRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;! D# Q3 T2 a/ A. j) V

; Z3 ]+ A# E: ?, R, g/* create a logger instance */
9 u1 U8 T( `0 u* Svar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
$ T  c+ h- Y, K! A9 ?3 Z( _6 ^var loggerBufP = new LoggerBuf.Params();
6 @/ \8 p6 s9 F  h$ Y; ~  sloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
! _4 g  b7 ]. \; i5 o/ T: {loggerBufP.bufType = LoggerBuf.BufType_FIXED;) ~2 x+ Q% O! e. |! u% e; }

: c3 J2 Y' i2 H& m2 b1 o" hvar appLogger = LoggerBuf.create(loggerBufP);9 C5 J9 Y$ H: U& X1 t
appLogger.instance.name = "AppLog_Core1";, _0 q# F: `3 H) p% m3 k$ x
Defaults.common$.logger = appLogger;. L0 @8 T) p9 g! W
Memory.defaultHeapSize = 0x8192;   
& J9 q0 D( T3 LIdle.idleFxns[0] = "&LEDStatus";1 y" Q, L+ ]6 S- d) }2 r- q
Cache.initSize.l2Size = Cache.L2Size_32K;
8 K2 R# S3 U/ W" [
4 N& H7 W# \. g3 c
回复 支持 反对

使用道具 举报

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 */
+ Z2 [6 W( h1 R: H8 Qvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
# [/ L# a3 z) I/ V  F' r7 mvar heapMemParams = new HeapMem.Params();
/ Q! b  g) y# ~1 M" |) ^/ HheapMemParams.size = 0x4000;! B: k. H" d+ k9 |5 A/ ~/ ]6 h
/ \) p/ T; ^7 c3 |7 x+ \# A
var Memory = xdc.useModule('xdc.runtime.Memory');9 c6 X2 s; Q; h# J& X
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);9 c- |+ z7 l% W: c1 x3 l

4 a  v8 Z  f( R9 A我大约calloc  每次共计大小为5K*16bits,
: W6 D* D. r2 S" |, S而默认配置才0x4000、需要改大。3 ]( f4 c2 l9 ?" Z* w. b

" U/ ^  ]( }8 [9 s9 U# j
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
  s. b' ], Q, w3 C9 M- l+ i& C4 A+ UProgram.heap = 0;3 G  H; }4 {( O4 ^3 K/ S9 ?: z
Program.argSize = 100;  /* minimum size */
6 R) @6 |, B. n) K3 AProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-2 15:42 , Processed in 0.040955 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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