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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构% W0 _- i# |& r* e6 m: H! A
7 `6 I- \9 T% I* I. `$ Z
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256: }+ ~, B7 O1 D, f( C/ y' w/ _3 X
$ Z. ~* }0 Z4 v7 z
其他程序段。。。。。! q, P" G( b% {3 U# d* Q3 t
' ]+ U: ^8 n- ]
   free(x_d);
3 T/ L2 L: \9 K& I2 A. f4 ]
( o" U1 D" `9 r6 k$ C) [3 o! d2 m使用DSP侧单独调试功能,验证动态申请没有问题,5 P, G& @3 _! U) z9 ^* V
8 P  }7 ?" F9 S5 x" s
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。2 Z$ E" j4 V9 O8 g& U
; U" |/ h/ W! t4 ?& g: E3 L

% K& M) j! O# J' `
. t4 R/ |2 ^2 v8 i: y6 }2 Y4 W5 k5 N! F
. ?9 H' m; o  `" s/ [

4 v" N: H: T) B6 o' V
$ O+ h$ T3 A8 a  }  C! U* T! Z" ]1 Q- D4 X/ n8 n7 O

9 |. `$ K2 C0 F) o$ j7 H) |  `
  d6 B% y. K8 ^. B4 s( [& S
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明: r# @4 i* A! ]8 [9 e, f/ }" U
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下4 c/ q+ z1 L. `! @4 H2 B5 G7 j
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)& c+ ]3 |8 L, o. j6 u( N

' w/ l# i* w; y  o) a是不是需要在DSP.CFG中进行配置
* U4 V  L1 i, i: N我现在的配置为
6 n. Q9 O6 T% ~/ V; G
1 ^, T! u2 ^) _$ `( ~+ ?/*
- W: w8 O* H; h6 H *  ======== Operating System Configuration ========4 x' y# X6 [+ C! p6 m
*/
# h" b$ o* a: K+ K, S: W
9 S; ?7 m5 Y9 f" y6 e, \) Z/* no rts heap */
( M  A7 D2 S% @, U0 v1 JProgram.heap = 0;
( {9 ^9 Q( B/ L% g4 C7 \' kProgram.argSize = 100;  /* minimum size */
. j( M3 v% d- r, PProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
+ _/ h5 f/ w6 c5 @8 B9 l4 k  Q0 C
5 o9 q& n. S2 L. w' N/* create a default heap */3 g/ ]9 b0 G6 [9 x0 G
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
" R7 x4 l& M/ gvar heapMemParams = new HeapMem.Params();$ R" R6 j8 F: m; h/ c3 T
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
1 S' J6 w2 H: R+ q
8 i8 [/ v3 q1 y3 a
var Memory = xdc.useModule('xdc.runtime.Memory');
: G6 d: u$ M# BMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
& J: X$ X0 u1 j7 }! W; b
# ~# j' N& K5 L  f/* configure System module */- c. g+ S6 _4 N) ^' j# M
var SysMin = xdc.useModule('xdc.runtime.SysMin');
- p% R- d7 i! M$ g0 LSysMin.bufSize = 0x1000;5 {% h% p/ W' P+ F, y: A' ?! Z& z
SysMin.flushAtExit = false;
" p' @9 b; o  r& P: C: t7 T. o1 c. x; ?  G/ S% ^/ Y
var System = xdc.useModule('xdc.runtime.System');
; S0 r, @7 U: D  gSystem.SupportProxy = SysMin;- E% X! x4 x) Q8 u( D5 u7 c. z! N

: `& P2 N. H% v/* configure SysBios to use the lower half of Timer 1 */3 J2 ^8 E: W7 @: ?" l0 u+ @4 c
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');" j2 M$ O: n: t
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
0 ~& H1 D7 g' XTimer.timerSettings[1].master = true;
8 a; ~4 S1 M, R2 TTimer.defaultHalf = Timer.Half_LOWER;
. N( _, u7 R. U/ G$ A4 r% xClock.timerId = 1;
3 e1 M1 r8 p; y0 b' G' ?: w
+ r' T1 v$ G4 d+ C
$ y# Z4 J' p  O  g/*
6 V2 U) l# O8 J* N# q4 W' a *  ======== Miscellaneous Configuration ========* G& P* H* [- j6 K& {
*/% D# o$ T2 Y! w$ s: |0 _1 _2 B
3 N" d; `. O* f9 O% a6 q# b  r
/* set default diags mask */
, c) }8 U4 h! T" bvar Diags = xdc.useModule('xdc.runtime.Diags');* h( ~) N* M1 z
var Defaults = xdc.useModule('xdc.runtime.Defaults');3 o, _7 z+ K9 S: v% r4 {4 g

2 d+ w' y+ }$ v& k* q, qDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
7 ^. ?" t4 r2 ~% X* N: CDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;. Z- r/ z  |2 p+ T- |1 _: X
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
, b* @) j8 E( r; PDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
4 M7 n0 S% C; T% k; Q8 [) iDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
$ ?, O- W% g3 _$ n9 \: A- iDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
& c* j' v  W6 s5 ~Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;" b5 h: g5 l* J+ n  e* p. N, ^
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
6 I: R/ }" J. A$ CDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;3 u& D9 m6 ^3 X3 Y! h: |+ Q3 L
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;" l0 C6 r. ]! W" G1 u7 |
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;' O2 i0 c1 u, m
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;6 Z% `7 M. ?5 p( K
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;* d) G# Y# w' a1 L! ], A1 |
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;' ?/ @2 ]3 |+ t, W: K7 ]1 M

' G: L) d, h, A, R. N/* override diags mask for selected modules */
9 Y3 `7 y. l% g& j4 u7 Ixdc.useModule('xdc.runtime.Main');
; Z  b4 U9 b) ADiags.setMaskMeta(# k7 X. `) D4 J2 O. N1 X! y
    "xdc.runtime.Main",6 J4 g9 H6 C- d* S1 Y" t
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
4 {6 O5 r6 b9 J2 f& Z    Diags.RUNTIME_ON
. `: J1 ^! X- A1 v( y1 V( W4 L) k);
  O6 e8 g- A2 \  [0 V! X: v, q2 _  m9 }  J! G( _1 t- C
var Registry = xdc.useModule('xdc.runtime.Registry');
" q% ]1 ?  `: M" hRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
, |% n2 V9 g5 Q4 u5 o) Z4 {7 _Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;  m3 @: l: p; \* ~" I3 A) \
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;" u7 ?% q/ Y7 W0 S- n" n, ^* T
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
0 K* P" j% K: \# G( Q8 W6 f! x' W4 e& G1 a6 g+ j( m
/* create a logger instance */
( U9 F9 O* \7 W: q; bvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
8 e" r: o$ [# o3 i  L' d2 wvar loggerBufP = new LoggerBuf.Params();
; l) [, K! v# [! C7 s* T7 b! BloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
4 C+ I) ]7 X8 b, Q. r( ^) zloggerBufP.bufType = LoggerBuf.BufType_FIXED;/ a' Z3 j( V4 u

( `* _. Z$ e% y( B6 {$ M3 S7 `var appLogger = LoggerBuf.create(loggerBufP);
& l% Y' k& X9 l/ H% }/ S) tappLogger.instance.name = "AppLog_Core1";
$ ^7 J  |$ C3 v7 v( e! G& ]. n. S; LDefaults.common$.logger = appLogger;
6 d+ u- ~( S) k0 t5 I. A! a, MMemory.defaultHeapSize = 0x8192;    + Z, Y8 r  p' [7 N+ q- F# i
Idle.idleFxns[0] = "&LEDStatus";
; s. K) a% \8 q7 \' T* LCache.initSize.l2Size = Cache.L2Size_32K;
; `. q2 s" P# x/ u  X5 m& W2 S5 D! B, P; ?$ P' R7 o. q
回复 支持 反对

使用道具 举报

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 */1 A9 m$ m$ P5 @! {
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
9 E7 U& \5 l3 r5 o+ v1 A: D% {8 Ovar heapMemParams = new HeapMem.Params();% Z; B, I% f9 I) [) w' R. |" S
heapMemParams.size = 0x4000;
3 L: U  k8 m5 Y7 x& j0 q; l' z- u, E9 Q, b9 w
var Memory = xdc.useModule('xdc.runtime.Memory');0 h% z; B9 |4 k8 `6 |' T3 V
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);7 C  A$ z$ g2 _, l
! P+ ^2 O2 @6 h$ P7 M, A
我大约calloc  每次共计大小为5K*16bits,4 M3 O- X7 v: q  l
而默认配置才0x4000、需要改大。
9 i# h( v  d- j. |$ c
6 c$ N$ U3 x( D* Z- T5 f
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
$ V/ }7 D+ s) O% q( n2 QProgram.heap = 0;/ P7 a# p+ Z- T( T
Program.argSize = 100;  /* minimum size */
* i- S2 x+ }% GProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-7 01:56 , Processed in 0.044080 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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