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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构1 m  s& T6 @3 x6 m
5 \2 S' ^4 {8 c5 A2 D8 S
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
, r8 A; P2 v3 U9 ]- O1 \0 I/ D2 a  X& D7 ~
其他程序段。。。。。
1 L- F; k5 O/ l4 m8 Q$ o4 K$ x
$ ]. l# s8 ?& G' C  h   free(x_d);
( o! N9 K3 z6 z( [& B6 z' w0 M% v1 @' g! S
使用DSP侧单独调试功能,验证动态申请没有问题,9 O- C) W- `2 U6 J' A5 _$ I8 j+ ?* a

2 z3 o( t8 c1 m但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。' \* G  Z5 h; c8 e
4 B2 ^4 w. R8 @) ]6 d
# J1 M# d5 X+ U" V) e/ z/ ~

' E6 ?" b7 T0 E3 b. t6 o1 [  u
- X, T2 S  v1 Q0 I5 m  s+ b, f3 L/ h8 j" ^# a$ j

2 Q1 I, r' g7 e$ c& t- F% ^8 Y- f; K$ _
0 X, H8 M, s% A

8 [$ n! ?* V. X5 y0 X( G6 J2 r
2 i( Y$ h; R* \0 v! K
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
$ z5 f$ O- v  n- s0 B: ]1 Q* X我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
- y: K" u, e! i' B(不过疑惑的是,为何单独DSP仿真就没有问题呢?)+ H, Y& \2 Q7 g; z" M! E+ E
/ ~+ k. z7 r* q  S
是不是需要在DSP.CFG中进行配置
5 y, k0 J# [6 j9 O: z7 A7 J8 Q我现在的配置为: D# l1 C8 c& C! O% u# l* b; _% @
: K! |% r3 g) z* D# y% P9 @
/*' P1 ?) a8 J5 g0 I- Y( B$ E
*  ======== Operating System Configuration ========
/ |1 h9 _3 |+ }% Z+ q */* G' g+ I( e1 y  |8 q

. R3 c; z/ a- j/* no rts heap */5 l# N, k" ?; O3 \
Program.heap = 0;
% U( o) T0 K% W8 d9 }& YProgram.argSize = 100;  /* minimum size */3 x8 C  L1 P; e. A( Q$ T5 A7 X7 G
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
$ s7 X2 V. m8 b8 y" k, k6 z- L
( U  ^9 h" p9 \3 B/ Y/* create a default heap */, u5 t2 \) ]* n: q; ~' r' z$ h
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
# O' [; ]& B2 wvar heapMemParams = new HeapMem.Params();
) x' u+ j' n7 yheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大+ M5 P9 O$ D: w
; R. k. H5 G: w" E; r5 Q
var Memory = xdc.useModule('xdc.runtime.Memory');
! M  I4 p0 K/ k  R6 E- i+ o1 E# LMemory.defaultHeapInstance = HeapMem.create(heapMemParams);4 ]# o) Q& Z% ], r, D% b# [

4 I' E2 C% F, W6 E/* configure System module */5 \9 E; |# B$ M; V) P# Q
var SysMin = xdc.useModule('xdc.runtime.SysMin');
( i' O3 Q* ~1 N' Z' V: wSysMin.bufSize = 0x1000;
0 _: {5 f! G3 c8 TSysMin.flushAtExit = false;
' \# F6 ?6 Z& ]2 ?; n, x8 O6 ]! |$ ^5 I
var System = xdc.useModule('xdc.runtime.System');
. ]9 E& Y  R  d6 P; |System.SupportProxy = SysMin;
2 k2 a, F3 t4 d4 }
% ]% T$ c* R# y' O5 d) A% j' J/* configure SysBios to use the lower half of Timer 1 */
# N/ E  q* e4 F- d6 ovar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');  _0 Z( y* p1 }; `: z1 ^8 Q) C
var Clock = xdc.useModule('ti.sysbios.knl.Clock');0 z7 h& B" B' K6 X/ ?0 o4 O
Timer.timerSettings[1].master = true;: p% ]) n+ j0 n7 U# a. s- t
Timer.defaultHalf = Timer.Half_LOWER;. t  Z* o+ G& M2 d. v  o
Clock.timerId = 1;
2 |  z0 _6 q9 O6 F) [9 I6 ^% N. l7 y2 F3 r' H
+ _- o2 ]. b8 Q4 a2 D5 J6 O' O3 m
/*3 Z; Y/ B+ r- |. ?& a& ?3 h% `
*  ======== Miscellaneous Configuration ========. w5 m; z$ ?4 Y; K3 a; [3 O
*/
& S: c; u: O( o6 N7 }, J, y' S6 v' p4 q, K, V
/* set default diags mask */4 T, e$ U: C/ b8 c
var Diags = xdc.useModule('xdc.runtime.Diags');
6 d' g' p3 v% p* D& l$ avar Defaults = xdc.useModule('xdc.runtime.Defaults');6 j* E1 f; T1 G$ Q+ T
8 w$ C$ O7 j. n) c, a4 d
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;& |- x3 P0 c5 U" W
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;0 s, ^" a% }; Z$ J9 A
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;0 H$ x0 C; W) o; F; K- N9 e
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
5 Q" [! @2 w. W/ |  K) yDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */- f$ _4 V5 s" x3 I: g
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;& }$ Q# O* a8 F6 {  U/ U; d
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
0 B) w  a' F& D, Y9 @9 Y7 mDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;# A, A# F4 u$ t7 H$ N; D6 d7 o& C
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;7 I# ~7 o+ B( j' j5 o
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;, x( }9 D/ D) o4 f. A* A1 ~
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
+ j9 B, l6 y/ n6 c; k0 |& LDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
# |& A8 I% ?) vDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;+ R3 O% r: N9 B+ l8 I
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
/ |) J& T. e# Q. g9 v3 j7 ^) U" R) z; X- H4 e- S7 D
/* override diags mask for selected modules */7 J% H/ n' e4 ?# }& X" e  F
xdc.useModule('xdc.runtime.Main');
1 Y$ q' q6 `% a3 l1 sDiags.setMaskMeta(9 i: ~, T/ r8 r! P
    "xdc.runtime.Main"," H4 G* }- `& ^+ U3 _
    Diags.ENTRY | Diags.EXIT | Diags.INFO,; |  x$ l) M4 {
    Diags.RUNTIME_ON
' s+ b1 Z2 v  h4 a5 f% d);* |! w' z4 b9 V! s9 @) v
- T! t5 F  g+ `! Z! i2 a3 Q: K
var Registry = xdc.useModule('xdc.runtime.Registry');$ ?, L' z# Z4 f+ }. ]8 T! s
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
: v5 f* c) R0 C6 U( IRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;1 u+ ]" W- d1 L9 T& D
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;- F! A# q# n0 Q
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;+ F% D# o" W9 s' ^  w

$ ~1 a8 y* @$ [7 [8 G+ ~, Q. T6 X/* create a logger instance */
: k8 n' J6 x" p7 q3 \) e/ W- |1 H+ W% ovar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');& E7 L: I! \/ {) g, \
var loggerBufP = new LoggerBuf.Params();
2 Z9 p7 j/ j5 e) G' Y! EloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
1 I! J' S0 H4 i- d5 DloggerBufP.bufType = LoggerBuf.BufType_FIXED;- t& w9 A: Q$ V7 R7 N( x8 U; Q
1 F8 }, Y  L/ ^+ K
var appLogger = LoggerBuf.create(loggerBufP);, s8 d3 f6 p- b6 J, j
appLogger.instance.name = "AppLog_Core1";
3 J" {# X6 \" f# iDefaults.common$.logger = appLogger;7 E! k) x7 e: m' u5 |
Memory.defaultHeapSize = 0x8192;   
) Y5 W" _) x8 d6 T/ u' IIdle.idleFxns[0] = "&LEDStatus";/ u/ [4 {% S$ {
Cache.initSize.l2Size = Cache.L2Size_32K;# N+ C8 Z) }) W2 P2 o
( C. s: @' e4 o3 Q# E5 Z
回复 支持 反对

使用道具 举报

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 */# Z' t+ C! k+ J  D
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
) J: P6 C! |) k# L" j  uvar heapMemParams = new HeapMem.Params();; z% H7 U" o, v
heapMemParams.size = 0x4000;
# m' F" A" N5 A0 C- n, U3 j- p8 I& {3 I* C" f8 r, _: B
var Memory = xdc.useModule('xdc.runtime.Memory');) q5 Q! c: X7 `5 S  p
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);  c9 V6 q- E8 Q# U  o4 P. o! V1 s

& w% v( c8 q( K. i: ~: T我大约calloc  每次共计大小为5K*16bits,' t0 G& L. E) K7 I! h1 |' ?0 u
而默认配置才0x4000、需要改大。& A5 P& n0 q6 A( K
% v+ ~7 p0 J1 k! E
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
  G; a9 H- j" P1 AProgram.heap = 0;4 J7 n' B- i! o% T8 l
Program.argSize = 100;  /* minimum size */
9 T( |. n9 e- N+ XProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-31 07:34 , Processed in 0.041829 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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