关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
; W* w' l& B: C; j8 c1 g/ `( u  b$ V6 J' R! {& Y
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
; ?0 L" I  J2 Z. r( y6 B2 g2 \" h/ l6 b' o) R# _6 m
其他程序段。。。。。
1 z  }! O+ G% [; E& E4 P
, u/ W# I  \' ^/ ^$ V. H: y   free(x_d);+ l. T) F1 O0 @2 K; u& \

; E/ G& c. @/ v使用DSP侧单独调试功能,验证动态申请没有问题,3 }; I" V2 s9 }4 Q' a

+ Z8 U0 f$ `' a0 [2 @但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
" |, H7 }. ?2 h6 r+ m8 ~1 l
' z. e: J' ^6 z2 p) D

9 ~6 n( f% P- f& y+ \0 Z
% O1 V4 z! q+ R4 [6 A! Q6 k, o% w/ k/ {, w/ _8 }6 n, Z

0 q. i! A4 @/ Q2 Z9 k/ N% e! I4 ~8 X: C) h1 N- w$ ?% H3 Y

1 {* ~5 A  S# y- u* u4 z  [% N4 O  O" \$ Z/ }
) ^7 @, M8 B7 k0 }% @

4 {; y0 T" f3 j- A4 s
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
" K' y) ~  v; S我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下7 b7 R2 Z% ^+ T
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)' S5 I/ J2 P$ V! n4 _+ }4 A
% ?; L' `6 y% B7 v: L& s
是不是需要在DSP.CFG中进行配置& L2 T0 H9 _% z; m, r
我现在的配置为
9 c  `, S6 Y& Z& \& V7 l3 I# e* l# O6 V
/** u# w& Z) X6 |- r
*  ======== Operating System Configuration ========
7 H, p7 ?' ]/ z */- s( ]! X% E' f# G

* Q6 q; q( N! G/* no rts heap */
3 r4 w3 C* n' c  D/ ^Program.heap = 0;7 y" z: q/ q) Q* |* ?0 ]& J4 ?
Program.argSize = 100;  /* minimum size */0 E$ e  E( y9 u/ F* f, {1 ?
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
3 Y) W7 L: M; C9 ~& w, f5 f, P+ ~, l1 z6 {; `
/* create a default heap */) e0 q- h6 d; D8 i# {; u7 F
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
- b4 ?# K9 d! F; Avar heapMemParams = new HeapMem.Params();7 I+ i4 j) o+ F! h
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
; o! u, `3 b$ S. N/ |% I9 b6 i
& y2 l8 I4 o" z( g( {; G% k
var Memory = xdc.useModule('xdc.runtime.Memory');
5 i/ t4 C1 U) y0 R& e! k, tMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
0 b2 a% u  h# }1 M& t) d
9 N  {" `$ G* `) ?' H4 B/* configure System module */, g4 L: O% i* @# p$ Y' U
var SysMin = xdc.useModule('xdc.runtime.SysMin');, K' P+ w! @  @( [+ Z8 E
SysMin.bufSize = 0x1000;% C+ P' u# F$ ~; H* t* T% h
SysMin.flushAtExit = false;
: S6 G# X$ f/ ~* v+ B* R
) M# L% \0 Q0 {. T( y4 xvar System = xdc.useModule('xdc.runtime.System');
1 R% a# K# q6 d( pSystem.SupportProxy = SysMin;9 z4 g3 u9 f& M& c2 ?  Z$ w0 e

7 q/ b/ S* n2 a, ], [2 _( U# K/* configure SysBios to use the lower half of Timer 1 */
4 m' q- t  X# X8 a) G3 fvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');+ w8 G/ @3 k8 \; u3 K
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
" L/ G0 N! }$ v- x5 W9 n/ NTimer.timerSettings[1].master = true;
0 M+ _& O# U0 Q7 }/ a; z) q8 d. `Timer.defaultHalf = Timer.Half_LOWER;. Y7 p6 M. \; _8 S
Clock.timerId = 1;# h% C2 O3 i7 ?- r) Q$ X' ]) J
3 c' ?) O2 Z  u& m( p% X

: J' G( I' C; |) x' i; _* [/*
- G9 V7 K3 `. Z6 H) a *  ======== Miscellaneous Configuration ========
7 X1 X" \$ k7 u" j. Y */1 Z  W. ^# o8 q) W) o6 Q# @
0 \. F5 J) F, ]& v" x
/* set default diags mask */- L% o: S# R& c$ p# f
var Diags = xdc.useModule('xdc.runtime.Diags');9 d" A; P% o1 D. ^% |  g
var Defaults = xdc.useModule('xdc.runtime.Defaults');6 O: H/ L' ?5 p3 B$ A
* l8 |1 k6 H$ @4 A* g
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;  ^( O; }  _9 U
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
& M/ y: N8 i( lDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;: X, }2 `' l& S; ]( ~$ ?
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
& i; z% ^% N. E6 a4 ?, `% W; RDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
7 i( }, ]; |$ GDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
# Q* [+ G' J" g. v$ UDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;' G- Q; J( ]& ^. w/ I
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
% f0 N' e) P2 D1 [3 I9 LDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;, r% ~4 X. @! k0 m
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
0 J. |  O/ x0 ?; }/ u3 IDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;0 i# s; X: A4 ~$ {
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;- G4 K* @& E# ?: t
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
1 G) D# W8 j  o  Z6 w& L5 hDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
/ u! a8 h7 {' K6 A! m; K' K6 ^
& U8 }4 Q, t! Y, ?2 \* Q1 r1 A/* override diags mask for selected modules */5 X% i: c$ }* N3 z
xdc.useModule('xdc.runtime.Main');
* v5 ~. {1 n/ y$ O6 i  zDiags.setMaskMeta(! E+ G$ x" u2 a6 E5 ^  f
    "xdc.runtime.Main",0 n) y% K% n0 X$ j4 n. P
    Diags.ENTRY | Diags.EXIT | Diags.INFO,1 g- d4 w0 P+ i4 M( P* n! D# e
    Diags.RUNTIME_ON
7 A- g" s7 W, p& e( L! f+ Q# ~);4 d8 y! V% g  g  m* q7 I

5 R) q0 a$ B5 |  w+ z. v) L9 z- G/ Q, t2 Uvar Registry = xdc.useModule('xdc.runtime.Registry');
% N. W; o& c! ~Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
7 [* E/ `; F# c& c. U/ yRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
. Q& t* J5 i; D0 lRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
% b" E5 x# c1 \/ H2 P4 NRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
! J1 H1 {) A7 \* _) p; X
9 u1 u- T: w, c/* create a logger instance */: a0 g1 s) S* z' f% \/ t
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');! U+ p9 G* M6 ?, E/ t, ], {
var loggerBufP = new LoggerBuf.Params();# _9 ~! D* {, t3 F+ o' O
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
' G" \" U. V% x2 UloggerBufP.bufType = LoggerBuf.BufType_FIXED;. l6 Q- a8 ~& [1 t' Z7 z

' j- a, V2 x- p! fvar appLogger = LoggerBuf.create(loggerBufP);
' r: |% O8 U6 z3 |2 AappLogger.instance.name = "AppLog_Core1";% \! x$ d( D7 r+ X) y* \
Defaults.common$.logger = appLogger;
6 [2 l; p4 p) TMemory.defaultHeapSize = 0x8192;    $ |6 J: G3 p5 }4 u4 N/ \0 L
Idle.idleFxns[0] = "&LEDStatus";
" L5 y2 }0 N  }5 wCache.initSize.l2Size = Cache.L2Size_32K;
* D; q# s, }, T' c' H( p8 {6 _8 Y, N( }8 W! t
回复 支持 反对

使用道具 举报

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 */
: L9 Z. ~) x! lvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
  S8 m* q1 j% w/ W2 X4 cvar heapMemParams = new HeapMem.Params();- t' F  N5 Y: k. i9 |2 O
heapMemParams.size = 0x4000;
8 ^1 O- w$ L; {  L, `% R
4 u- l' V; G  {) e1 c4 dvar Memory = xdc.useModule('xdc.runtime.Memory');
7 ^* p" O7 r5 c/ G' `Memory.defaultHeapInstance = HeapMem.create(heapMemParams);' ?' U9 g  x: l. q3 Y  u

# @. n4 m, q. J- ^  w, E* s/ i我大约calloc  每次共计大小为5K*16bits,
: O3 a+ K- D$ |; b- v而默认配置才0x4000、需要改大。+ h8 q" _2 X: R! l4 X" o6 s! K8 t

  z9 d* v2 I* n% @% ^, t2 m9 V
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */3 O, ?* ?+ C- ?  O& u
Program.heap = 0;7 F9 o& O( v- l, o
Program.argSize = 100;  /* minimum size */
: ?* L2 O1 O5 |' a3 p  n6 xProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-12 23:03 , Processed in 0.041446 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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