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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
: @: x5 k4 H- X* F! L6 H$ }; l- l7 r4 N$ U7 C% y: P0 T
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2569 ], D5 [0 _& Y3 L5 a

# s' N: Q2 E7 [2 O其他程序段。。。。。0 {" x9 f, d; c$ U  C

7 U" ~' m( B7 g   free(x_d);
& |# b! s6 l% ^" w6 c# K' T+ W$ ]" l; S# ^5 @
使用DSP侧单独调试功能,验证动态申请没有问题,1 w! w9 {. H: U: N+ C. z+ j

) R9 U. ]# @7 T. p但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
* J/ V0 r) [# Q* w) J2 z
+ v/ v8 B2 ?# g$ [1 Y5 K

5 N9 J- Y% s' ^1 j2 l# G9 p
. v! o0 O; [% {9 W0 D4 a
+ Y. j1 f5 V) m2 j' i* D! n1 _' B' c0 z# H/ ~7 x
' d$ l2 U; r( b, a- y& w+ N3 D/ N
3 F* W) P3 c9 e; ?! _& t

+ }) ~/ s6 o. [. Z' k4 D
  c4 G) M1 N, W* T: h; F. h0 o3 ?) Y, O, z8 x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */# A$ L$ B. t& }' _( p3 d+ h
Program.heap = 0;
/ X% [2 t" }/ D/ _1 w9 V% m! rProgram.argSize = 100;  /* minimum size */& V  D% z( F" t# X! O- ]
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */+ ]3 _: c0 s, S
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
9 X( _7 u1 q7 q+ f% S; ovar heapMemParams = new HeapMem.Params();% a2 u0 X+ t, ~5 w
heapMemParams.size = 0x4000;, s) _7 X# ]% R/ D/ Q: s* S& o

# C1 ~/ g3 j) F8 r0 E0 m9 }var Memory = xdc.useModule('xdc.runtime.Memory');' ]# g! c- r5 n% w3 o7 h
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);3 c2 w# g, U( }' ^" c% Y

3 C6 ~; k5 H- P7 H" U0 o我大约calloc  每次共计大小为5K*16bits,
. L* S' j1 o% P- \0 u2 y而默认配置才0x4000、需要改大。5 e% S7 M$ I7 y7 B

6 Y! e) q' J9 b  i6 g5 Z7 u
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
: k0 E: P" w5 |# H我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下/ H4 G7 Y5 H# `; `+ k6 x2 r1 B
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
9 N' m/ o2 N1 o/ Z, W5 x# f

2 P  Q0 p# k( u是不是需要在DSP.CFG中进行配置
# ?: o! _5 F" D! E+ O6 t0 k- \8 U. d2 C我现在的配置为
1 G9 P- [# L( d5 ^. k/ Z/ ~" ^
0 `# c+ ?0 N" C- o! y! n" f! `) n/*4 @* C: {# }9 |6 @2 |9 A
*  ======== Operating System Configuration ========
" C& A! x& `0 u" L */' w4 l% H: T" p. E, J7 I( k5 O, A% c
2 \. ~1 B3 \; u0 N$ m
/* no rts heap */1 g# n1 i3 M; p& V& `# M
Program.heap = 0;
2 g+ Y: l# e. ?( ]Program.argSize = 100;  /* minimum size */
2 m0 l+ y$ s' b2 ^2 AProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大3 u5 M( I% T  c/ Q  o

# r" ^; [. Z1 m0 c/* create a default heap *// C6 S, |3 o0 o( t. f
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
. \$ O0 o5 l9 h2 qvar heapMemParams = new HeapMem.Params();
( e( H2 c8 h: I4 l; [! o6 dheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大) b- N& G" @6 r$ I- m0 s: k
6 W: R/ j7 J4 P. w* X0 g+ {
var Memory = xdc.useModule('xdc.runtime.Memory');
" k" H2 y, ~( w& H1 w4 T) zMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
, i; R9 s+ l" k: j; g4 M4 r9 x2 m7 _/ v! c# p6 ]! j/ V
/* configure System module */8 b4 b. z, R$ |. k" I, u+ y; a! y
var SysMin = xdc.useModule('xdc.runtime.SysMin');
! q) Y; J, W  \8 O. X5 d6 g$ `SysMin.bufSize = 0x1000;
$ I& x& t  a, X  E$ ~( @8 U5 ?  `' u' ySysMin.flushAtExit = false;) M- T& V/ m% u* R2 q4 ?; H) x7 Z
3 x" ~( }" f# a! }& q. b
var System = xdc.useModule('xdc.runtime.System');6 a. k1 l/ _! A" A7 [
System.SupportProxy = SysMin;* m/ t6 T7 W$ z; T

7 L7 `% T/ D$ M, p1 x( k" ~9 m/* configure SysBios to use the lower half of Timer 1 */) I( s1 V9 l% Z
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');, n5 D% d3 N% p5 a. Y  j  A
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
8 @& c( i4 R6 P) ITimer.timerSettings[1].master = true;
& s/ G$ @1 j& R" `4 u$ BTimer.defaultHalf = Timer.Half_LOWER;" M1 n& u9 M0 q7 J( C  F% o  x: F9 o
Clock.timerId = 1;
0 b9 {+ o  z7 m( \9 N: z9 X  U/ S! `
# C0 a! z/ a. B; v' U4 ]4 B$ z; g/ Z! t  p. ]0 q
/*' c# C) W% L9 K1 Y1 c7 n
*  ======== Miscellaneous Configuration ========
1 Y: s7 p* U: G% W */
+ ~% {% z6 ^5 x1 m9 A
* L% S. I% i+ X) u/* set default diags mask */$ z) F7 \8 S" q/ I5 {6 u; l# |) c
var Diags = xdc.useModule('xdc.runtime.Diags');- R4 Y% L! |3 x6 T. h# h" D# }) l
var Defaults = xdc.useModule('xdc.runtime.Defaults');5 N, B( o# ]* U( H
, V: n  H7 e! r& T+ `" i
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
/ \9 {6 i& w% TDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
; J; T- q4 U! z! |: _" ^7 `. CDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
* t/ R* W( \. R3 t9 A+ ]Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */: N8 L, }* u% V" P2 q
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
+ U) s; W" {6 {Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
+ [/ r, b/ o  n4 K5 @% [Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
& L/ C  X9 G' [2 t5 T) A6 d& ~1 CDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;( g4 \% ?- U, C) F  M' |3 l
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
/ k. c9 k% p, i, y% S2 QDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;( P# L% L5 t" x9 X
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
4 t# e# {  z# \, Y( a& a1 IDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;9 `, O: P$ c( Z' V3 W
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
! v1 V4 ?. u' \) g+ \/ a/ ]8 LDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;8 F9 \  j7 r4 @0 \- }0 K) [
5 M" O7 a' j& T8 D7 A; i! L! M
/* override diags mask for selected modules */0 X+ x7 i! P7 N# N. i9 r. `  p" i
xdc.useModule('xdc.runtime.Main');
+ T3 k* i7 p8 _1 vDiags.setMaskMeta(
8 Y# G; b9 s" {% ~* ^    "xdc.runtime.Main",9 L& |# r' a4 y
    Diags.ENTRY | Diags.EXIT | Diags.INFO,# h9 D$ I: |% P7 t2 O4 N/ m7 m5 ]
    Diags.RUNTIME_ON) R- r" U  h( }0 H
);
: E  W3 p* M0 V$ j' ~1 b, c- O) ?8 v$ s+ L# K4 h4 P
var Registry = xdc.useModule('xdc.runtime.Registry');( b  y! A# s! A9 H1 w& p
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
9 R: a' P4 K+ g. H+ {Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;# Y+ j, f* ]4 n* I0 _2 @9 p
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
: F1 {: d" X" |4 h8 N- sRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;* M  O- N$ _0 I7 x  x  P

9 e' d$ L8 w9 P5 A% p- S! N/* create a logger instance */
% Q$ n- Z& f0 H% K3 h* X0 xvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');+ y  X4 r; D+ g6 C! `
var loggerBufP = new LoggerBuf.Params();
1 I0 z! m$ F! w8 c2 ~4 A/ WloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
& z) e1 Y1 U4 D" }5 x1 wloggerBufP.bufType = LoggerBuf.BufType_FIXED;3 m& V9 P5 Y( Q0 z

) I6 ~) U- P. f; m9 P% e" }6 Lvar appLogger = LoggerBuf.create(loggerBufP);
5 M$ |- o% M- F. vappLogger.instance.name = "AppLog_Core1";0 g4 q( ]7 [/ j7 K
Defaults.common$.logger = appLogger;
- J" J0 D! I6 q4 [, NMemory.defaultHeapSize = 0x8192;   
: d6 G1 j. v: b& ?7 _+ E/ m; I+ CIdle.idleFxns[0] = "&LEDStatus";! S( V: o# Y/ f8 v
Cache.initSize.l2Size = Cache.L2Size_32K;% J6 A- }% A4 B  D3 I
; L) V5 c  j$ o1 h! N; C* J
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-25 17:55 , Processed in 0.040720 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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