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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构8 M- |. e. r& m7 M$ [
( U1 D8 \0 K/ ]
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
1 b7 k' ?/ B- C
7 t- N0 H- Z, {3 Z! o# I7 N! a其他程序段。。。。。8 ]5 S) |7 U# y; K0 x1 u" {

" {& A( H9 \7 t6 S+ @  T   free(x_d);( Y' z  U9 @/ q  @- e% H' _

5 |# [1 K: ~& |1 l使用DSP侧单独调试功能,验证动态申请没有问题,/ `# Y/ q2 f/ ^7 s) `# {' U

# C9 x8 [$ j; n6 P# I. ^* x( |但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。1 e  Z/ [8 y5 b& e, n- C2 V& b

1 T/ c; J4 M! a8 i* e9 O) B" y* x0 r0 S6 T! v# ~
, m+ D5 q/ S  @6 f
6 F$ O* v" @: p

9 _) f/ t9 F' e. \  u7 a. I+ I
4 h2 A$ b% h5 ~! T/ T! W
3 p! j0 m" q/ F5 _: q* M2 S7 c# G1 `/ i) O6 a& v+ ~; p7 G4 W1 t

# @! a( |3 F! B( n$ O8 g( N5 ~7 i
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明4 x  A3 Z( Z- @5 N' d
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下$ v2 ]9 H0 `+ k0 V
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
8 I% }, g' J0 v: d, E( a. M
6 m4 L! ?  p. ~5 b$ y; |/ C$ Y* A  |
是不是需要在DSP.CFG中进行配置
+ a- O% p, r! d, p& s我现在的配置为- c! P8 T4 s6 l2 A" c

# x9 A& g. [! D; Z) [9 p' B/*
" `, {$ n0 o& W *  ======== Operating System Configuration ========
/ b* n: ?+ Z9 X */$ @  u' o) n9 g% W$ j
6 W* H2 b6 ]6 u- U" l9 ^6 ^- }
/* no rts heap */8 ^1 k! @% }' j, z4 _8 u! L
Program.heap = 0;0 x& {$ E9 m# l9 G- ?% S
Program.argSize = 100;  /* minimum size */
7 f$ ?! E" M0 W+ L- kProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
, `4 U7 J  P7 `2 i! X
4 n1 D% n' T* J. c/* create a default heap */
( p) ~2 N# c2 C3 ]  [8 ~var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');6 O9 e& I0 b8 y3 w& _
var heapMemParams = new HeapMem.Params();+ t: Q  s' h: q/ A8 P
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大# u( k3 {( W' G, {" b' L' z* v
( [1 x. h; P4 H" S3 ?9 O
var Memory = xdc.useModule('xdc.runtime.Memory');6 D. N: \+ k) J
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
2 D6 ]- Q8 c0 d0 n1 }" J8 }3 h3 u4 G+ c8 U: o
/* configure System module */* [& o1 K& L$ F7 z* t9 o
var SysMin = xdc.useModule('xdc.runtime.SysMin');
% [( c! E7 |  h9 J4 e0 K! W- @7 \SysMin.bufSize = 0x1000;0 a5 _! U% ^& b- o4 M5 ^
SysMin.flushAtExit = false;
  o( I7 I% N$ C, j' A/ u/ k" {$ K" l8 x5 x
var System = xdc.useModule('xdc.runtime.System');& H# Q( M$ E4 {9 D# w* l
System.SupportProxy = SysMin;
/ q; {) |- H( W& C' _, X" l# Z
% z8 i# ~  C/ g" q. O* i0 h1 o/* configure SysBios to use the lower half of Timer 1 */
* U# D0 g$ S1 W5 xvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');+ E2 D- G8 C/ l4 b
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
- \% r- R! M* f" C& VTimer.timerSettings[1].master = true;, u8 N, e0 n3 H% [9 m8 h- [
Timer.defaultHalf = Timer.Half_LOWER;. E5 O4 H' a" l+ X. y
Clock.timerId = 1;  T4 _, f. g# ^" C
- F7 T0 E5 q+ z! r+ A; K

7 g/ U5 h% C4 M9 v8 H! ^/*8 ^0 v1 y# T: E5 Y: O/ Q, K1 g
*  ======== Miscellaneous Configuration ========
3 h) F0 J! P! z- Y$ g1 A* r7 W' E$ | */  Q, Q- [& W6 e) H
6 ?/ o2 L; W: n- Z2 t8 m
/* set default diags mask */% y6 U- ^3 m) [4 t
var Diags = xdc.useModule('xdc.runtime.Diags');' C, z# `7 l5 T8 O, |" j
var Defaults = xdc.useModule('xdc.runtime.Defaults');, t& E8 v: ], S
  w' |  K$ S  T. T6 f
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
: A- E9 O. x7 _5 V) z0 m9 hDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;) b0 ?% K# O' Y9 i( ~
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
% [. A* O' Q% U5 S. F4 cDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
' w7 {/ M$ }5 _, W. d5 nDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */& R) B) I+ U3 y- L& }* ^  b
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
4 X+ ~8 f1 y* e& e" R+ gDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;2 v. s9 X2 y' p% d/ n! H
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;- N+ T1 O3 N, t" _$ h
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;# l4 F& z5 t$ T7 w
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;$ a# H5 B: s* o# k7 b* e
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
) D9 X. k1 W/ M: d8 A/ I+ w' k  ?Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
7 Z5 A0 ?( y! K3 i- zDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;% @, @. L$ j: z) ]1 E
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;# W/ b4 ]- H  d

" V1 r4 _3 W' `3 a7 q% [- O/* override diags mask for selected modules */
9 y( l7 {, f# Kxdc.useModule('xdc.runtime.Main');
4 P; `( V  ?8 PDiags.setMaskMeta(
  ^1 N/ U4 ]( c2 V& {$ [8 L  w    "xdc.runtime.Main",
: H$ P# x2 E8 q( t  J0 @2 O6 ^    Diags.ENTRY | Diags.EXIT | Diags.INFO,
* D2 y0 Q% S( L" l) c8 g% B    Diags.RUNTIME_ON
4 S+ Z5 c7 F! E% H% M+ X2 E" |);! W( g5 K' s, l% L$ T# N# a

& w% w/ a; D. q+ r2 \/ Tvar Registry = xdc.useModule('xdc.runtime.Registry');
9 ^+ Y! p7 D) V6 zRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;& T# I4 q6 @5 E9 Q' A6 h- D. v% ^
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;% ], j$ D8 g& Y  v5 U
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
5 l7 j' z( H: N) B' q8 L" q  WRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
) V7 b- o# F1 q7 B/ f
, o: R7 L! S# Q6 b. Z/* create a logger instance */
. K" U: t; y6 G& b$ c7 T0 A: J- vvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');% z9 p, K/ J$ t2 K; {2 p% f6 i
var loggerBufP = new LoggerBuf.Params();
. v0 f4 K; s$ e& q2 P+ d, ZloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */+ ]8 i6 v3 b) M* C+ Z
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
5 a5 H, ^' C- f$ T1 I+ s! r" m( h/ o* j* u9 Q4 ?; h
var appLogger = LoggerBuf.create(loggerBufP);
3 y' ~: ?, Z1 b; r, G0 d: J% RappLogger.instance.name = "AppLog_Core1";
5 I- k) _: C% |$ @Defaults.common$.logger = appLogger;
# {: L3 {( A. n8 z1 P" @$ uMemory.defaultHeapSize = 0x8192;    " }$ K& @  ^; p/ `/ ]
Idle.idleFxns[0] = "&LEDStatus";
. Y6 P' q. T' h8 {- Q+ j$ X# MCache.initSize.l2Size = Cache.L2Size_32K;' W. d6 w% U  A0 ^5 d# {* \% [- @
0 v+ |" K% I8 a* c7 I0 m8 L
回复 支持 反对

使用道具 举报

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 */( w0 J# A- s9 D8 q* j
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');7 ^: v. K6 V, F6 e# `
var heapMemParams = new HeapMem.Params();
7 Q6 T/ U" ~( LheapMemParams.size = 0x4000;
  {8 J5 T# V: S) T' {% |  p- L0 F! _5 Q
var Memory = xdc.useModule('xdc.runtime.Memory');
* ^5 @( A2 F& ~- l0 |Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
" j7 l1 H- k, i8 j5 l: M; M0 W' |- W5 A5 T8 N9 v9 F8 ?0 w
我大约calloc  每次共计大小为5K*16bits,' [0 o( P' l' T: a2 l$ O: h# D  Q! U% r9 e
而默认配置才0x4000、需要改大。0 H' @- q  b8 J7 Z; {% P( d

( q3 S5 C3 ?! ]  ]
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */0 s* i+ `, [* a* j; v
Program.heap = 0;0 O6 A- f, i/ R* \0 s
Program.argSize = 100;  /* minimum size */
9 S! F& v% G) i. w  \: ?. vProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-22 20:36 , Processed in 0.045786 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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