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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
3 R( S2 z2 a9 |9 ?* N" c4 u+ Y2 |; o5 U2 @. S7 b! W2 P' h' X0 u
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
+ X$ P0 ?$ C! @- m8 O
8 W& ?1 Z" Y+ H# X6 ]$ i其他程序段。。。。。: r& Y  w8 n2 i$ q( E, k1 o
5 r' d! \6 \  \( E" [9 _: z
   free(x_d);
) ~6 @: X3 _. r; p" W) x+ o$ v! k- e" e! P2 Y  q
使用DSP侧单独调试功能,验证动态申请没有问题,
. S: s5 l, E/ {
3 c7 h: j$ c& b, ^; i: K! }但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
# I# G6 k# Z: ~/ q& y

# k3 D' @8 [6 {, ~+ l7 w
4 m4 w1 M7 |& N/ L5 g; a7 a; k% h4 A. w. f* x/ y8 _& {

6 h* Z: x8 P/ O  }( t
: Z8 O$ G2 F4 d3 D9 x
7 H/ j4 r/ o# R* W' k9 Q1 H2 h1 c" F4 t  Q" |/ R3 O
4 g; u' ?5 p5 S' P
# {1 B, C/ i) k- l* \$ @- M& D
6 T# p6 |0 `2 a
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明- P8 y, h- H- }1 d8 n
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
1 c8 A/ I  y3 C  N0 C(不过疑惑的是,为何单独DSP仿真就没有问题呢?)" o$ U  `4 e. Y1 U: x

+ g; P& A& h7 T# W% H3 d" l6 Y是不是需要在DSP.CFG中进行配置
3 [' u- v$ n9 _1 k/ a+ W) m我现在的配置为
9 |! Q$ H2 H: \! G
8 z8 N" L3 m; H/*
  T% s6 L( |& F/ q6 Y. y5 z *  ======== Operating System Configuration ========* A/ S- \. u5 @2 M; N
*/
8 S  ]5 W7 j: G& ~" c: s* z0 ~/ {2 d/ T! z0 s7 @
/* no rts heap */) Z5 G0 y1 H$ L* F% x8 h* @2 S1 Z
Program.heap = 0;& \6 X5 X4 U( l' T
Program.argSize = 100;  /* minimum size */. n. l! F9 F7 P5 b8 u# s3 G
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
, l9 M, [  ]5 N& ^. q
# L: k- K. A4 t/* create a default heap */; x$ w. N3 f) U# N9 r" _, K( M3 |0 c
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
8 H8 @3 V& T- q; h0 {& N; W3 v3 B4 u) Uvar heapMemParams = new HeapMem.Params();
$ I' ~( g1 Z/ K0 Q/ ~8 y/ B! eheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大- m( V# v! B& ]* i
- r! ^# @& t1 {1 @. i
var Memory = xdc.useModule('xdc.runtime.Memory');
! M8 p0 F7 x. G) o' uMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
2 B; V$ \& v! F& X
3 m' z8 Z3 B4 G/* configure System module */) {  r+ o, B* a2 c  K9 L9 p& d0 E
var SysMin = xdc.useModule('xdc.runtime.SysMin');- Z- S7 T. \  W7 c! |9 p
SysMin.bufSize = 0x1000;9 ]+ S+ d) P+ [7 G3 J$ p: s
SysMin.flushAtExit = false;. y( G9 R! l+ y! Y8 f+ s# J) y

, M* f' \$ ~& avar System = xdc.useModule('xdc.runtime.System');
9 c% U, B3 @/ L" L! C2 \+ }: t0 xSystem.SupportProxy = SysMin;* h! l) ]2 k; g  k5 I) c
# R* J% @  N5 i0 A
/* configure SysBios to use the lower half of Timer 1 */
9 u: B: ]% ~% {) I, G  A& T  ?var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');3 x8 q; q& F+ w  J7 r7 Q
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
0 \' a1 A* {, O5 p8 XTimer.timerSettings[1].master = true;. U: {) i! c; k) V
Timer.defaultHalf = Timer.Half_LOWER;" F7 u0 Y% [' V  H, x& h7 a
Clock.timerId = 1;& A4 m+ w; t  q5 w& m& ~# w

# L1 f, `; a3 F: X& G
! H0 v& d0 r. m: ]* n/*3 p- C1 S1 V" n) w3 [/ Q
*  ======== Miscellaneous Configuration ========5 i1 [5 Z1 _# J4 _+ l
*/( W# G6 _7 ~- I

+ i5 e: [% |6 p5 g: u2 o/* set default diags mask */  J/ D) B8 K- l, X
var Diags = xdc.useModule('xdc.runtime.Diags');
1 C" Y& w, t" c6 m" L' Kvar Defaults = xdc.useModule('xdc.runtime.Defaults');
3 `. h+ h+ v) w' p% p8 s+ D! S, Q# B- f5 o" m6 C( h. ?
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;! J$ m/ q2 X8 R) L+ X( r  L. g% M! q
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;  ^7 V, H4 X  C* }6 z
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
' }; f! w- B8 B5 ?/ `" RDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
9 d. H7 W( B) y4 M( E5 KDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */  }2 c9 g6 F" N4 Z4 T6 x
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
8 ^6 \5 V6 i* o& d( X  ODefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;' @9 l; V  f8 {  W
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
, Z% y+ g) Y- \- B& j. `! YDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
2 d1 K5 O9 E  N8 N5 b0 D5 nDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;/ L- @8 u2 G$ Z* A, d
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
# B' b0 Q  ~- O/ i( D8 ]/ `Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
: G3 K) a& i3 a) x7 n; C! u4 yDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;( R, @8 T: X2 S  f7 _& V7 \" T& A
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
1 O$ a$ n! y* }2 w! f1 @
; ]( U  s8 u/ k& I3 G' c4 F6 C  ]/* override diags mask for selected modules */
6 ]: b: c" Q! zxdc.useModule('xdc.runtime.Main');
) J4 n# k5 X& _! \8 r/ k' x* VDiags.setMaskMeta(
- Y4 N. Q7 g- f/ W    "xdc.runtime.Main",! d+ U& d* c1 {+ ~. v, z& F6 J
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
' k8 `' L2 }3 v) ~, j& e  v    Diags.RUNTIME_ON3 c2 I1 f0 q( S3 M  K, R7 g
);
3 Z; O/ |6 d4 Q6 b- e) l/ v
9 |4 T9 w6 A- Hvar Registry = xdc.useModule('xdc.runtime.Registry');% Q& K) i4 Q5 h$ t! k0 c7 _
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;) f# Q- t) @% F; _
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
- G/ J; U6 z6 i! m& R7 i. x0 Y& DRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
# B! A, Y- f6 {2 P: U; RRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
+ D/ ]( ~, m6 G: S
- g  E- l/ p" \. J, z/* create a logger instance */0 B/ C2 _& c4 x# h' ?8 I) a; T
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');$ \2 e$ P# o, z
var loggerBufP = new LoggerBuf.Params();
6 m( t! k  {% X2 I( C1 Y/ W2 XloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
& Y  ]  J- s! [6 C% c' _% Z9 ~* BloggerBufP.bufType = LoggerBuf.BufType_FIXED;* Q* F$ s0 p6 {+ E+ c
0 j0 n1 [5 o0 h* F
var appLogger = LoggerBuf.create(loggerBufP);4 E' f$ B, x  c" E. I
appLogger.instance.name = "AppLog_Core1";
! J3 W$ ~9 h0 ZDefaults.common$.logger = appLogger;( }8 A+ _( z9 M  N8 h9 [( n
Memory.defaultHeapSize = 0x8192;   
* I; \/ Y8 q$ U% C; sIdle.idleFxns[0] = "&LEDStatus";- y; T) v6 b% m- d( d% w
Cache.initSize.l2Size = Cache.L2Size_32K;8 [' R0 c9 E4 `. A: P6 d  a
; ?9 L$ t; e( V- \% @- R9 o
回复 支持 反对

使用道具 举报

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 */& i0 T) g7 N) _. \$ K6 Q* K
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
+ ]; x1 E+ `& H6 u# l% P. |var heapMemParams = new HeapMem.Params();
- f3 i% V; E; ]7 i: K3 xheapMemParams.size = 0x4000;0 h& n; K0 B( h3 x. S+ M0 h; R" G

# U7 t% r. B9 kvar Memory = xdc.useModule('xdc.runtime.Memory');
8 k. j  j9 V# c. a; E' r& b0 |Memory.defaultHeapInstance = HeapMem.create(heapMemParams);( G( g/ a. c* B# X# w5 |5 k

4 |  }6 |0 b- M我大约calloc  每次共计大小为5K*16bits,
# p& U3 f; g' s/ W0 p) ^) d而默认配置才0x4000、需要改大。1 L: [6 `6 M, E: h0 j* M) i; @- P" N

; b% W0 A/ m9 J/ @7 v; {
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */  |# m7 q$ f8 O# N
Program.heap = 0;
6 M: B, z* ]6 I0 ^1 ?' X, w# BProgram.argSize = 100;  /* minimum size */
8 r6 E$ H9 v6 Z+ Y" M6 ]Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-27 19:07 , Processed in 0.043973 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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