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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构/ P( G7 V7 Q+ d7 _' f/ p

7 i! F8 Q7 L) e) K; G    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
2 g& a; r8 B% i( m. h/ J7 \& o8 K) B' {
其他程序段。。。。。$ w7 _8 ?4 \; A+ D0 t- |/ {0 C

/ D. I& P8 h; z. o   free(x_d);5 Y' c, ]9 \& v, @

3 M8 |7 K- P# X) n* c使用DSP侧单独调试功能,验证动态申请没有问题,
. w6 t3 B. ?! _, J- @
2 n9 P' g9 o1 g' f4 T; t但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
, t8 a8 Z2 [3 c! ]  p
) D6 W" G5 D& L) @, J( u

$ Z6 v) k4 [: l& L" ~! S) U- R, O. D! ?$ j# n1 q# K

; S% Y- z2 k! {7 I8 @- O8 y* |+ i0 t# N

$ L4 ^9 r( M. S% d0 C' s, C9 @& w% _2 t$ x5 }2 ?
! K& z# q# M- U1 O7 l2 @+ h
2 e7 Y  D5 x, B  ^! U: M9 O+ y5 i

" m9 w4 U7 C2 Q5 U: d* s( |
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
' g! x' t! B9 V我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下1 w# ?4 B. D$ J* j6 v
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)) x3 ]$ R9 y/ P/ i
% ?; Y, d9 p! |) G$ G: n
是不是需要在DSP.CFG中进行配置- A# e! `& q! y& t- V+ Y9 D
我现在的配置为$ ^9 u% A- F% [

; ?! v( u* @  U8 O% B! S5 f/*
. W' W' W( \$ |- g) \ *  ======== Operating System Configuration ========
* W' z9 y8 d. d6 F4 Z4 U: m */
1 T* ~  I. K" H3 Z: {; p+ {  V, I  @: w8 r7 u# U) v1 M* f
/* no rts heap */7 Y& K( j3 b$ ^2 I2 I
Program.heap = 0;5 X, r7 I' y$ C3 @+ H1 M9 X
Program.argSize = 100;  /* minimum size */: q6 e+ G7 M2 K3 _) d
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
- W5 e) j4 l/ U0 z) b' u: ^7 O1 F4 b) _% m
/* create a default heap */$ a7 O7 Z' g5 c# w) C* |
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');; ]& h1 e" v8 q( a6 {) Q
var heapMemParams = new HeapMem.Params();0 ~+ |1 O1 |/ X7 K7 H
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
# a6 ^5 I' T; k  T
+ D7 g3 ^* I8 I% _3 |3 H
var Memory = xdc.useModule('xdc.runtime.Memory');9 D( g; F5 Q1 F1 W3 M( S+ S7 R& Z
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);: ]7 Z# C2 i2 X* t# ~4 ^- Z
* C" a( e, U- S; h
/* configure System module */
3 x6 K% S/ d+ E8 Q( P" J. B4 Xvar SysMin = xdc.useModule('xdc.runtime.SysMin');
; ^! V4 \* n$ s& N1 b3 z0 ISysMin.bufSize = 0x1000;$ D# B/ L& X$ Y6 l! ]! e
SysMin.flushAtExit = false;
8 [6 T; N5 J: V0 z, u( R; p  l, y6 _0 w# Q( l
var System = xdc.useModule('xdc.runtime.System');" ]( \! H4 ]4 e  x) b0 }. r- C1 P
System.SupportProxy = SysMin;
- K: m' k( i; M7 b. E+ x
- N) s7 w) o5 q4 X  t7 {( t/* configure SysBios to use the lower half of Timer 1 */4 ^4 l+ ]+ w% c+ O
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
& u5 ?. P( x' }# d: R% Kvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
4 J+ W( e( f9 o: s. p0 ATimer.timerSettings[1].master = true;
2 _9 M6 m7 p4 N. GTimer.defaultHalf = Timer.Half_LOWER;- `% [6 x" p6 ^/ U; L
Clock.timerId = 1;
- \0 A2 C* e1 M3 w
+ g* i! r" t5 k: p! s6 Z  e
8 G& N0 @! ^$ u% _/*% J- E) c, `* k6 L# S+ L
*  ======== Miscellaneous Configuration ========
3 M2 p: t  Z( _; [* e6 n0 s */
3 s! q! L  m& D! ?6 p; P! @4 ~2 C% s5 S- i/ b& J
/* set default diags mask */
4 B: a; r  k( X  D" dvar Diags = xdc.useModule('xdc.runtime.Diags');; G$ P) e, |( y
var Defaults = xdc.useModule('xdc.runtime.Defaults');5 b) @1 T# A" |8 b' e7 c

/ C' J) u+ l- b" B6 h: hDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;5 m% k, o4 Y! O3 O) c1 d
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
( {* q9 K8 \3 u& ?* c; k# ?/ mDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;- V( j6 [) |: c. W
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
/ O; `8 i; [4 L+ D5 m/ u, v3 }. |" W4 sDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
8 f% [9 @( D5 U! ^: x' UDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
1 n3 r6 d- g; KDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;" J; `1 v7 r# s+ k8 }/ c8 Z
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;6 \1 }/ B3 U" g0 M6 l; E
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;! {& _# E1 R7 d6 V' J
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
( M3 F0 F( |; ]Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
8 d4 c% {* }$ \( g# G! mDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;2 j: x, o4 ^: |
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
; U0 d  T$ P% H/ [* xDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;( D& B  g3 n6 l, A( t

: u) ^! R4 e  E$ o8 O& B/* override diags mask for selected modules */
4 h8 f0 \- C# D1 D2 O7 x& v3 g7 l6 @xdc.useModule('xdc.runtime.Main');! R+ P" D" Z8 K6 @) f0 G
Diags.setMaskMeta(
& h) N9 o, B' Q3 R. z) N8 _    "xdc.runtime.Main",- h2 i! h; S. h7 a. U
    Diags.ENTRY | Diags.EXIT | Diags.INFO,! c! k) j' x9 D! l8 y
    Diags.RUNTIME_ON+ U+ W* ~8 y5 f% D$ P! C
);- s+ k6 p2 P8 Y' B$ s5 _% E
0 [6 b  b6 u; j9 L" u& F( P
var Registry = xdc.useModule('xdc.runtime.Registry');
' w# b; |4 v) O9 e' |+ Z# \; iRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;! d+ @% R1 z( z( v2 M% v
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;+ U8 f4 v* V; k+ D* v4 @1 f# A
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
% J. q8 ]9 e; a& j( LRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;! {2 M) a% j2 w( I  q
! v3 @4 A/ {8 Y# E4 R
/* create a logger instance */
8 |& ^7 i& e! E, o6 A1 pvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');* ]: Q' a' y. `! V3 U, u* r
var loggerBufP = new LoggerBuf.Params();: |9 E/ L. E. G6 |
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
! E4 T/ s# Y2 u2 RloggerBufP.bufType = LoggerBuf.BufType_FIXED;* K  A; [1 y" \9 r8 u/ R  L$ C1 F

, ~% W& ]- s: l$ |var appLogger = LoggerBuf.create(loggerBufP);5 e7 C0 U, M  ^  v3 @& V
appLogger.instance.name = "AppLog_Core1";. K' w& S! x: U/ U: t& V
Defaults.common$.logger = appLogger;' k1 C( z+ g. K! V, k
Memory.defaultHeapSize = 0x8192;    0 v6 Y4 r* z( ]8 w# w
Idle.idleFxns[0] = "&LEDStatus";* Y2 E$ K9 a! T% p, z
Cache.initSize.l2Size = Cache.L2Size_32K;
* X. Z" f  c8 ]4 ~# o4 b; ~% x6 w6 X
回复 支持 反对

使用道具 举报

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 */+ I+ n* `# b+ U+ |. w; H4 {
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
% B( a4 Z4 i: S3 mvar heapMemParams = new HeapMem.Params();
  I; Y& O# O) _5 UheapMemParams.size = 0x4000;
8 }* j0 F$ h: D+ I7 F- l. e
, A1 ^0 b1 [1 S: u# b: ivar Memory = xdc.useModule('xdc.runtime.Memory');
2 G6 B4 X% ^; p9 T, aMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
3 n* I) X/ i4 [+ o
& G) x: q$ f+ P8 k; N; V! P( G# C我大约calloc  每次共计大小为5K*16bits," K) o& M% |$ g% `8 l
而默认配置才0x4000、需要改大。
( u: |4 ?1 u6 o% E% R+ ~
3 s' k$ r- w+ k+ v
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */  }# a- x) c; L5 r) V4 C
Program.heap = 0;5 c/ \# [9 a5 {( u
Program.argSize = 100;  /* minimum size */3 x* n2 s7 J0 F: Z
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-25 19:40 , Processed in 0.047466 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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