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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构9 C; y$ _* ^7 A! G: c
: I& R+ S! K( h4 [
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
+ s2 j4 }( T) b! H
, w. S% p3 T0 }1 `1 x6 l" J其他程序段。。。。。
' Y" V$ B( Z& x% [: P/ w
! \7 \5 A9 |0 l- B. F   free(x_d);* M* a3 D; S& M

4 e5 M' U& [5 h使用DSP侧单独调试功能,验证动态申请没有问题,! i$ F  F. S- v% N5 C0 M2 O

9 W$ C% k2 C; r7 L' `但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
1 l2 m; D& h0 R  z1 N/ @
/ ?: F1 w  T% D4 F
8 Q2 H7 L% A- p# N

2 V4 y% X* W6 D2 u% A/ q3 ]
2 H9 A+ M- l4 l, o5 m
' D( s* N+ P$ e% T& R, ~* r, W5 z9 U8 V5 }9 g
- S2 _% I: w5 L2 E/ H; V: l

: E' W* S: {. P6 f/ K1 v, w( N  T/ {
$ O# [7 G- g: n. o4 ^
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明7 ]6 A' K2 [1 [- L$ s; t' g
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
( V: Y: b* w( w. z9 d(不过疑惑的是,为何单独DSP仿真就没有问题呢?)  z0 Z# @9 a* K% @2 U8 }8 ^
3 D: C" ~- B8 ]3 G
是不是需要在DSP.CFG中进行配置
% l) X0 S+ V8 I我现在的配置为) L7 s' B' O8 c7 I3 k$ t+ O  ^' H

+ E2 p# ~5 G, a3 U6 k/*
- ~5 s4 ~8 u1 g. Z# a3 i# u *  ======== Operating System Configuration ========6 N/ g: H0 b' @0 }  Q6 z! j
*/
  K$ @, i  i. H1 K
$ C4 C8 U; O6 @/* no rts heap */8 e2 u& h" N8 @& E: _+ B" x& N
Program.heap = 0;
: T& ], |7 p" u& l& VProgram.argSize = 100;  /* minimum size */( c2 G1 E9 B4 i8 t8 X5 f
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
$ Y9 Z7 k, b$ D/ W
; B7 Y/ g1 q" f9 O  {! Z/* create a default heap */
: l; s* v; K. t3 }. Fvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');& p- \  b8 D1 B1 s8 I1 x
var heapMemParams = new HeapMem.Params();. ~8 O& h: F) D
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大! C: T( E! B0 f
- U9 \2 D, [* M8 Q8 x
var Memory = xdc.useModule('xdc.runtime.Memory');. C7 l: m0 J" k& X* Y
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
0 K5 }5 B. `" K% G# q( r  v6 o5 S. }: f/ ~2 y
/* configure System module */
& A! E2 e% Y/ h  V2 r  s. L  x5 Ovar SysMin = xdc.useModule('xdc.runtime.SysMin');! D$ Q* r! V8 t( J" U& t$ z* B
SysMin.bufSize = 0x1000;
. s  o+ H. g+ A/ M' ESysMin.flushAtExit = false;( T+ R; Y" g- d/ l* ?" P3 y
# w$ L. H9 p9 M5 w
var System = xdc.useModule('xdc.runtime.System');
  O; r# _3 Y3 X" Z' {5 CSystem.SupportProxy = SysMin;
- v5 ~3 n- ]6 |3 Q8 k# N, |* Y7 `( e* V- o& f* m
/* configure SysBios to use the lower half of Timer 1 */
; ?7 B4 B  U; c  z1 svar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
5 G7 s, S1 s' v/ d1 P9 vvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
% G7 V( N6 _6 z2 r+ O' H) A: ~- K( CTimer.timerSettings[1].master = true;, r2 w6 C0 }6 o. g% h
Timer.defaultHalf = Timer.Half_LOWER;( U. m, h+ D  Y: W$ Q* D5 o
Clock.timerId = 1;  o3 `% I9 U- b; S7 g/ \& \
! Q3 |5 Y* K2 F

0 P1 u* T: z; R9 A. r$ y4 G( D2 p/*" Y' u' l+ `4 o8 r
*  ======== Miscellaneous Configuration ========# x% [/ b, y. z2 n( f
*/4 h3 h" q9 a6 v$ h. _* g

* D4 F' o' F/ y/ F- f* P3 X- E3 m/* set default diags mask */
. W: |8 f$ z% G$ r. p& o  d1 D# xvar Diags = xdc.useModule('xdc.runtime.Diags');
0 Z. L5 D9 I$ @; mvar Defaults = xdc.useModule('xdc.runtime.Defaults');
# a* L2 o- {0 u) @% F, `) x2 u  |$ F% {; b5 T! @
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;5 m. Q9 r9 Y5 [  u1 H6 C
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
# x; @7 e  Y  l' W* J" ADefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;9 Y9 Q# S* b/ S" y0 i# ^# o
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */* o. P2 T. E) |* y" `! e  W
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */4 S% N4 h( _0 S9 ?
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
) q3 G" F: R8 A! N% B& PDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
' h! |7 \7 `( |0 `5 R! H. bDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
# p( o9 v8 m- HDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;2 K  X' S% @  L
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;9 p) q+ O* k4 _, A/ ?
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;% C) s  A: p# B- M' K+ ^
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
" V* F4 Y: W, u) m! NDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;& d1 x( L: H7 v$ W& J+ w$ H
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
: Z) V/ [$ t, _6 v6 w
5 \2 @; e6 Z2 x3 V: G0 r* m/* override diags mask for selected modules */2 C) e( [5 P; c. r
xdc.useModule('xdc.runtime.Main');
0 _1 _  q7 O! zDiags.setMaskMeta(/ t1 K) Y9 s. g, j/ E2 Q! }  u# m
    "xdc.runtime.Main",
3 a0 f1 {: r3 e8 I; [    Diags.ENTRY | Diags.EXIT | Diags.INFO,
1 ?) }3 j: |# w: R    Diags.RUNTIME_ON2 f9 L, m0 z2 S& l4 w- G! A+ L) z
);  e: _: z* \% @: n9 Q& _; g# l

; Z1 w- S1 ?3 n2 F6 C- evar Registry = xdc.useModule('xdc.runtime.Registry');- r: ^$ J5 O* b( r; H" V4 u( H
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;1 j& W6 s3 U: ]: b5 [# O
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
9 X2 Q# v, o  Z+ ^) k$ D; S/ n' gRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;4 ?. q+ Z( J4 X, b4 Y
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;1 i. F! M8 A* n' d: _
* G2 [4 o# b: d2 z
/* create a logger instance */. T+ d- \' q9 U# {+ G5 i# m
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
' n+ B1 s) H6 x, _1 f+ avar loggerBufP = new LoggerBuf.Params();
! Y9 w, G7 U- m  p* O0 \0 dloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
* g6 P( F$ V) M( T' {# E& J& g9 xloggerBufP.bufType = LoggerBuf.BufType_FIXED;0 K7 h8 y/ ^, g+ b( y. a5 ]
+ f1 Q, ^, o! N, |( M- ~: W0 |6 t
var appLogger = LoggerBuf.create(loggerBufP);
: j( i4 ]: i- {; O5 i" I2 ~appLogger.instance.name = "AppLog_Core1";/ W0 N: ]4 Q3 E/ O& P  Z7 S
Defaults.common$.logger = appLogger;
/ _' E1 F8 X1 Y/ q1 ^( q0 lMemory.defaultHeapSize = 0x8192;    $ R- S% Q  _8 L2 i7 ^9 [
Idle.idleFxns[0] = "&LEDStatus";+ X0 ]+ Y0 W8 U: t. O
Cache.initSize.l2Size = Cache.L2Size_32K;* X9 I/ N6 M' G' H
  U3 C. ~" i" ]+ j
回复 支持 反对

使用道具 举报

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 *// D3 S5 F4 t8 R8 F% I
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');. ~- m# Z* ], i
var heapMemParams = new HeapMem.Params();
1 J6 S3 P+ h: LheapMemParams.size = 0x4000;
9 Z+ Q8 }: D$ g$ }
- x1 A; e# C) A) s7 S/ p7 |var Memory = xdc.useModule('xdc.runtime.Memory');
& r1 L1 |9 i  W, v1 |% AMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
. O* Q1 v6 Y: _3 j; G% h+ B2 ?
7 D$ V$ h0 T2 N4 M! \+ D我大约calloc  每次共计大小为5K*16bits,7 L! m4 X1 N+ t+ p& T6 V' m7 K
而默认配置才0x4000、需要改大。
' O( Q5 f0 ^1 S# `# V1 w& g0 p$ h5 P2 ]% Z" q/ P. r' c6 W2 L
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */. |9 g/ n6 u) Q. O; Z
Program.heap = 0;
' y! s; M; x9 D8 K* zProgram.argSize = 100;  /* minimum size */2 v4 r0 E) m' M1 c
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-3 15:25 , Processed in 0.043311 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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