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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构/ U6 H# R: t9 V1 H+ J
0 N  g$ i  m! n
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
; b/ n; M, s) ?
5 Z3 W4 N% D( m+ U$ C其他程序段。。。。。
# b# T5 m* `+ I1 Z
( @; a' g* `8 W) K# S   free(x_d);1 J4 R/ f6 h: \" M

3 Z! ~/ u2 S+ V( }- f) v使用DSP侧单独调试功能,验证动态申请没有问题,
; y& V7 I- o+ k6 J- b8 s9 R* P
2 O) G/ {5 f6 u7 E5 ]但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。) X; c0 Y  Z3 U; W# i2 r4 @/ h
8 Z# J: g( ~2 A
1 C. q' u. y7 A4 X. _

- O" d9 ]' j! r$ W
6 g5 X: N+ f% J& v
' I& p; i" T$ Y& V
* R! l* a5 a  r
- c' I& a! p' c% G' h; Z4 T
$ N9 y- F; z( W4 [7 }9 W2 q9 x; \, t" B0 _! Q. z

( `& J* G1 {' H) f' ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明8 c" L$ [+ U" j2 ]
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
+ y" A8 y0 y9 P2 g" k(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
  f# C7 b0 O4 J8 i$ \: ^
( J3 C) D! y. X1 K
是不是需要在DSP.CFG中进行配置
% R1 k: @2 h  D5 k' d$ p我现在的配置为
& H; }7 ~4 [4 l/ d$ A7 R3 B
! D2 K& t* T6 ]& v8 s/*
) e1 r* a& G2 {! \ *  ======== Operating System Configuration ========8 m( [7 ?) l- c3 n0 s
*/+ R# y4 F1 p% S% S
; @6 D- c( p* x( E
/* no rts heap */
9 g$ V# j0 q4 \Program.heap = 0;3 _/ F6 ~6 I0 q) B1 u- H
Program.argSize = 100;  /* minimum size */
1 O4 _8 v4 H0 N6 f8 n9 ~Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
. ~. d; L& `5 x# m! {' S
) b6 D" G- @% G, z% ^0 w; v/* create a default heap */
% f+ I$ }* Q/ N5 ivar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
( b7 T/ `' N" H: B$ ?var heapMemParams = new HeapMem.Params();
# I& o$ O: ~# `/ g$ yheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大& Z  e  s1 m( f- h5 J4 {3 X

# W: i8 L# n/ ?/ @$ O
var Memory = xdc.useModule('xdc.runtime.Memory');3 M' o" `+ H7 b+ y3 V. }6 L( Q- ]
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);, q( R: Y* C8 ?! ^0 n. W9 y
4 J) b; C7 G0 C+ o( _8 D7 c2 N/ Y
/* configure System module */
( j- Y4 F4 n; t& }3 Wvar SysMin = xdc.useModule('xdc.runtime.SysMin');
3 T, h; \1 O8 P- uSysMin.bufSize = 0x1000;
: v6 J. e" j4 eSysMin.flushAtExit = false;6 w; s* j  h2 t  z
" k9 Z2 {7 f( M- O  w
var System = xdc.useModule('xdc.runtime.System');
" \, \% `% {1 L8 @System.SupportProxy = SysMin;' v2 l9 f5 r& S% U5 M: h* _$ Z- _

& K# [1 I% I" z" @/* configure SysBios to use the lower half of Timer 1 */  O7 l( @3 b0 }& b5 T9 @
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
- _8 m; F6 Q+ f  f* n) kvar Clock = xdc.useModule('ti.sysbios.knl.Clock');- O+ ?/ W5 O! u2 w
Timer.timerSettings[1].master = true;
8 \2 l  j" L8 ?5 x9 ^7 fTimer.defaultHalf = Timer.Half_LOWER;& Z' s; T$ I+ D& g* R4 P1 s5 |
Clock.timerId = 1;* T/ O3 g8 C4 L1 ?6 G8 R
, ?7 o0 I1 [# i' p5 K

4 L. n9 I0 b: v$ z. N% d9 L/*
) A9 w% f9 f6 R. g; {  _ *  ======== Miscellaneous Configuration ========
2 X& ~, C+ s- p8 Q* n */
" ~. S, J8 d% y
) y8 ^" x8 b9 w1 T/* set default diags mask */) m1 R/ `& x, N& G
var Diags = xdc.useModule('xdc.runtime.Diags');
* z2 H$ F$ P2 Z1 `: {7 l2 fvar Defaults = xdc.useModule('xdc.runtime.Defaults');9 P' M( r, `. W7 g0 Z! B% e" \
6 D! n6 a) i2 H2 p5 }  l
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;3 V" A9 \  i6 t
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;- y  P1 V: T' u, h
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
; E- k/ `. M6 H* @4 g- r3 vDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
+ j& Q0 s# }: b+ j: XDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
5 {  l  G% ]) s; w/ C. E4 ~Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;/ W$ A* e4 M* R6 s7 [1 l
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;) i& M6 u& O  C# s! x$ U3 G3 Q
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
; b* q/ ~% l# ?( [5 EDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
  {3 X( D! \. Z! o1 KDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;3 r# c" o5 N: U" M/ y8 {$ |, O
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;: V8 ~. H1 O9 H1 i
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
) G+ H1 Z6 c  F& v# u, r5 }Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
" Z, b: Y( \+ [+ R& o( b; WDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
# d, y+ g+ u4 |( J( d/ Q
. A+ I# k! i/ R* \, d$ O/* override diags mask for selected modules */5 h' q$ y2 o+ p
xdc.useModule('xdc.runtime.Main');
9 a. u8 [" w% i: mDiags.setMaskMeta(# N9 h6 g7 C& [2 f. X- h* ]4 W4 O# M
    "xdc.runtime.Main",9 C( [' g" W- x) m. |0 M& g6 I
    Diags.ENTRY | Diags.EXIT | Diags.INFO,& v- J7 h' g  E! e9 |
    Diags.RUNTIME_ON
6 d+ K" |) a: X4 U# T);+ A& t! Y5 A2 J7 K, H
9 X/ l7 f( _% m, N
var Registry = xdc.useModule('xdc.runtime.Registry');
5 N3 [& k; E& l, fRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;2 D* H( F" d$ z5 g
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;- N& |3 L' }; u7 y
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
+ h0 O% l' P& y# [Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
# B% t  V4 f, `, `! T2 f7 l9 n8 Z9 Y+ d
/* create a logger instance */8 D5 _8 i' A) E- `* f  a$ ]9 L
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');: j8 Y' c+ x% _# e- B; }8 u+ X' j  K
var loggerBufP = new LoggerBuf.Params();! F; Z% {5 J/ S* t
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */% C. @- H, d5 s, U& N' ^
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
) T1 q) Q0 N; y' i( r& B' [2 Q1 }1 e& j  d" X# O* \# u2 k
var appLogger = LoggerBuf.create(loggerBufP);4 K+ ?5 Q3 ~( Q2 Y; L4 i) i$ a7 m. ?, }
appLogger.instance.name = "AppLog_Core1";
0 a4 Z1 ]4 b- [* x* DDefaults.common$.logger = appLogger;+ f* C% Q; o3 G7 C9 ~4 _
Memory.defaultHeapSize = 0x8192;    * b( w1 Q: h2 E; n  d
Idle.idleFxns[0] = "&LEDStatus";
" o2 }* ?5 O! LCache.initSize.l2Size = Cache.L2Size_32K;
% P* J. P9 F8 H
. j* |: d" h7 R- r& _* t) T9 }& U
回复 支持 反对

使用道具 举报

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 m5 H: y  J" P7 I: r4 [6 `
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
! T: V6 a9 w, {0 Avar heapMemParams = new HeapMem.Params();
& A0 V  x! L" s  D  I9 ^( W# aheapMemParams.size = 0x4000;
; ^& _! o' i/ T8 Y: R# i8 J5 _/ m2 o8 D0 X; q4 D4 e) S# N
var Memory = xdc.useModule('xdc.runtime.Memory');
; C" b/ @. h4 D9 \Memory.defaultHeapInstance = HeapMem.create(heapMemParams);2 }$ b4 |/ S1 P: ?$ M  f

7 c9 _  q9 I9 Y) D. o  v6 ]我大约calloc  每次共计大小为5K*16bits,
& i2 J6 n/ {: v: g而默认配置才0x4000、需要改大。
& c  ]8 o5 L$ X, t& o: a- l0 p3 d4 O9 [5 }$ o/ P
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap *// `/ D5 @1 S; y7 x5 r
Program.heap = 0;
2 C7 Z; X- Z; pProgram.argSize = 100;  /* minimum size */
! a  s0 C5 k* y! w, s6 T+ V8 GProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-28 12:08 , Processed in 0.041281 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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