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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
. P: |6 d8 z3 o1 G; V
3 a2 o3 f$ T( K* c    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
/ }  N$ m# I. @/ i1 S( Z; o0 m; I
其他程序段。。。。。
8 l0 Q* Y; E5 t3 ^: c# Y* [8 G ! Z8 a) h* j! y1 J+ m
   free(x_d);
" u9 m4 x6 z, C  Q* `7 [8 v4 w+ d% H" e/ Q" E' f1 ^. I
使用DSP侧单独调试功能,验证动态申请没有问题,
1 F  Y9 U; m" @7 `# ^# Q$ I8 a: v& ~- V8 {9 ?
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。: i  e* P# W7 l5 W- o
% I7 }" y. ?" H# D4 W! `( u

; Z& _2 ?3 K6 K# r; J+ V1 J' x
$ b  x' W' k; i( Z9 o9 Z5 u1 a- r9 L* J& u" ^5 v& B

, o# a; s; G& H) v0 L3 ^) M- n" E0 b$ a2 U; y

8 ]/ y$ M8 f$ W) Q, r. s/ {
! y+ W  f4 Z+ ~( P
2 V& D3 ^: g3 d- q" ^/ S, u0 P% z0 }
: P: B& _( |' q  \; |; i- K  J& v
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明% z' {* F5 I3 b" g8 J$ `
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下, h# n. u' o" C( H# Z
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
; U- J4 c- {9 i6 L2 T$ d' ]3 k$ f
; X2 p# m: @7 t$ {# e) X5 i
是不是需要在DSP.CFG中进行配置
. b% \3 h& k0 ~+ b+ D$ b1 K我现在的配置为
: `2 I7 G  u  a% n1 A
& H$ w% J* o0 t) P! O; r/*
3 v, F6 [8 b% m- S, s *  ======== Operating System Configuration ========
4 l9 Y9 B6 n+ s */
1 P( O2 c! A5 ~- M( v( l) M, U, s4 |/ g' ^& a5 n- Z
/* no rts heap */' e% U% y) ^* H7 Z- S! |1 j
Program.heap = 0;
  u3 f0 |  D! }$ j1 ]3 D' KProgram.argSize = 100;  /* minimum size */
: L2 L1 M9 q" z/ z+ ^Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大& g) ~% l' u9 H9 |* v
! X5 r/ J9 H( c# {, W
/* create a default heap */
; f2 o4 p1 Y( N/ I* C5 Ivar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');4 m/ K4 N% y; v- a! _
var heapMemParams = new HeapMem.Params();
, g) p2 j3 ?. O8 e  G% aheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大- u. h' W/ J) }
5 [' I# Y. u9 h% {) w3 k' G' B4 n
var Memory = xdc.useModule('xdc.runtime.Memory');
$ }5 n1 D: K- I* GMemory.defaultHeapInstance = HeapMem.create(heapMemParams);' j3 |& _/ M* z" M; f
& I6 h/ ^( Y/ E" k9 J1 l
/* configure System module */$ M( K3 j* ]- K% M+ w/ c
var SysMin = xdc.useModule('xdc.runtime.SysMin');, q+ c( z( `. R6 c* u. s
SysMin.bufSize = 0x1000;
% d  X! D+ J! c. v% zSysMin.flushAtExit = false;- }* m( ~8 `& W
9 d( [5 [9 Z# i& }9 l7 k  U- i
var System = xdc.useModule('xdc.runtime.System');
% j" r7 k$ X7 u0 v) ^# VSystem.SupportProxy = SysMin;/ A5 k7 C$ _  X  P, L
" ~6 [- f4 {1 x
/* configure SysBios to use the lower half of Timer 1 */
4 u( m8 [& j+ Z& ~) xvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
# }1 I4 s2 w; Y& Fvar Clock = xdc.useModule('ti.sysbios.knl.Clock');9 S  ~! n: g5 g
Timer.timerSettings[1].master = true;
$ W* ^  H/ X2 P" e7 s4 c0 ]0 nTimer.defaultHalf = Timer.Half_LOWER;
& O$ Y  _- A( SClock.timerId = 1;
2 s5 e! T/ a0 v2 Z  j
' d" `$ v6 |0 T: L/ y/ v2 W( W
+ E$ L  R. F* u4 u0 E# Q/*
* g1 l& i" I; m( d! P *  ======== Miscellaneous Configuration ========8 e5 h6 {% z- Z  {, t! e/ |
*/3 t( `3 W3 s5 Q6 `' R5 W
) k+ R: Y4 z8 Z- N: @7 m
/* set default diags mask */6 S. C$ ~- `. v( ~
var Diags = xdc.useModule('xdc.runtime.Diags');
+ G. z) q, }3 X) R0 ^$ P4 n) zvar Defaults = xdc.useModule('xdc.runtime.Defaults');
. g7 r# d- E3 Q3 c3 S) G
' p' V1 T/ f3 y3 }Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;2 I) t, b, L1 [) v2 W
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
: M; C; D" D3 m: vDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
# s; V$ V, q6 ODefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
, ~6 I' A3 ?/ |# i$ Q( ?Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */8 }/ i) ]$ ~2 g4 {
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;! h/ [7 b# g1 A. e: b
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
3 f0 ~. l, y! [7 |" g: ]Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;9 U, W# G' r; y  I9 @1 C+ @
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;9 {& U1 P! J- s6 D: J
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;' i3 z$ C2 L! b1 U$ |
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;* [7 W0 |9 [* U+ b- Q3 I
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
% {! t/ [) @  G2 b4 g2 oDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
+ o3 K- K! I( a$ U( R% {Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
7 J9 k- t4 o5 [2 D( k+ w* E* Y2 a8 m& {. \
/* override diags mask for selected modules */
# J* K+ |" L: l: |xdc.useModule('xdc.runtime.Main');
; K! \  X, i0 u* J) h; JDiags.setMaskMeta(
% E- |. J  l' a* I) {' F2 c    "xdc.runtime.Main",
7 D2 u+ u1 v% ?. E, \& y4 p    Diags.ENTRY | Diags.EXIT | Diags.INFO,
* {; R% o* _, K* \    Diags.RUNTIME_ON) ]" I6 k' [" Z( g0 x
);
! ^% Z/ Y$ E& H- p4 y+ b
. w  i% E3 h* [6 D; B* V, yvar Registry = xdc.useModule('xdc.runtime.Registry');- ^* m! s" |, V7 u
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
9 n: x# R. Y( k1 A0 xRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
2 ?- m8 l& M+ DRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;/ |. Q6 l- o% a& l" S. f) L
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;8 Y: n8 O$ u7 t, H
2 Z, M' q! |* h3 o1 l# H  [9 F
/* create a logger instance */
# S  G6 z9 u/ ~6 Lvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
: Q! I8 |: t. G7 `9 T" qvar loggerBufP = new LoggerBuf.Params();
$ b' R( U( P  XloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */$ o  G  o1 u3 a# W9 [2 ^8 ]
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
2 b: [- p6 |5 @4 G0 Z4 _7 [! e, c2 w+ U7 m1 }- ]
var appLogger = LoggerBuf.create(loggerBufP);1 l- {5 K+ B  g# v& `
appLogger.instance.name = "AppLog_Core1";4 U' J$ V0 T: I4 i( O
Defaults.common$.logger = appLogger;
, Z( g4 u' a; cMemory.defaultHeapSize = 0x8192;   
/ B/ @4 s! N7 T# B" d  M1 U+ X3 o1 ^Idle.idleFxns[0] = "&LEDStatus";
0 V0 H8 A6 v1 l8 s6 R0 b; G1 eCache.initSize.l2Size = Cache.L2Size_32K;
3 y1 w9 e3 K/ b9 a
7 P" q+ M# N( L6 B' Z2 g$ ~' |
回复 支持 反对

使用道具 举报

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 */% t% {$ X( i5 g$ g  `  n0 w& I8 P7 l
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');' z8 Y0 ^! t, t4 h2 k
var heapMemParams = new HeapMem.Params();
& Q# g/ W4 e; x+ nheapMemParams.size = 0x4000;
8 z* d% ~- ]% o' b2 l
- A. V4 A% A0 q4 y$ n4 Rvar Memory = xdc.useModule('xdc.runtime.Memory');
+ y  w# b( _6 ]3 qMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
& i$ B" x1 [' T; Q) b' l) K
( y+ r8 K" H5 U9 l" q. s我大约calloc  每次共计大小为5K*16bits,
- k/ z' T: b2 F& O9 N而默认配置才0x4000、需要改大。
5 k8 w* D& p+ L; b, ~) j# I! f% I) P; L" G  T2 n/ w
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
# h% P4 @7 T5 Y! [# }; QProgram.heap = 0;
9 j" H' r0 d0 O" s- W9 a6 r7 MProgram.argSize = 100;  /* minimum size */
# |! c4 e* A; a7 m; f1 t7 \# u3 NProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-11 05:11 , Processed in 0.040614 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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