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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构4 ^; i5 J6 U2 Z% I" J. f6 A
6 R! i6 e7 H) x! B5 n+ e# f
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
; V4 R' ^% X& q7 t
: y% D$ \2 a2 Y6 @9 R: Q其他程序段。。。。。0 ?- L% h0 w0 S0 T
" D: i" i+ w$ ]0 j" ]; \1 M- k$ Z
   free(x_d);
! i) U5 K3 u- Z& w
7 v1 P) Y: d; y9 G( E( \使用DSP侧单独调试功能,验证动态申请没有问题,
) f+ E3 z: k" u" ], d& f8 L! R% O
1 L5 `- ]/ D& D/ a. [1 a但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
" P; K; S8 |( b/ K$ p
# h. `% v6 [) u7 y$ T

, D/ Y# _7 |9 y- F. g  E, c% D/ U; D' f$ E2 L* H

0 W: n0 u# N7 f4 z2 f  k
( Q% S& v1 v$ K
8 e, C4 m! {6 q9 u& U
. [  k2 V, T+ K3 B7 o# r/ v4 W( m
  \; u7 p$ u9 m# ~/ f( r1 `! j0 L1 G; C8 b$ i
, q" Z; f6 A& S- X4 i. ?4 f
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
1 W/ q! ^- v6 m$ c: c1 x! T我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
8 i; f0 p) \: p; F- H7 `2 ^(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
/ r2 v# Z$ o7 r4 R

4 p0 ?3 ^6 e7 `6 ^7 D是不是需要在DSP.CFG中进行配置
8 H, I# h; {6 G: v: H* ~3 J我现在的配置为) I1 |) y7 X5 n/ B
- c. M% r* Q4 k
/*) f! \) S( Z: ~4 |
*  ======== Operating System Configuration ========
6 x5 T0 q* t0 B8 Y4 Q3 D/ D */% j2 E+ s! U2 ~: F8 j! r1 o8 s

+ }4 [" K/ r* C5 T4 e/* no rts heap */0 e8 q/ `( I  O4 m+ c$ t
Program.heap = 0;
% R; _4 S. C* N' p: t2 VProgram.argSize = 100;  /* minimum size */8 G8 g, d/ p: G
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
, l. N1 N4 V* n6 Q% {
( k( E/ ^3 q; E2 |0 L) O* `0 k/* create a default heap */3 E% B8 s9 q4 H4 p
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
# f! n- }4 D; d# Dvar heapMemParams = new HeapMem.Params();; d: p: ]( ]( l: I0 `% a  s: v
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
  s$ t7 V- g& t) S2 @! ~$ G
3 r8 i6 L! k: B7 F% S4 R6 c) r. m
var Memory = xdc.useModule('xdc.runtime.Memory');+ h' ?" t/ X4 u0 Q2 ^3 O
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);- @: a) e3 V) L6 n8 A% k! K
+ I6 v9 n; g& z! G1 S
/* configure System module */
5 s8 K+ t$ k6 o3 ~) C; Svar SysMin = xdc.useModule('xdc.runtime.SysMin');( m) K& D' k  Q  j& F& O  q
SysMin.bufSize = 0x1000;
; H5 P7 C. {$ v6 Y6 y9 P0 q$ m7 c: [SysMin.flushAtExit = false;
. {. V5 I4 T% b( @+ F6 H) p5 q- C! T0 g4 o' V
var System = xdc.useModule('xdc.runtime.System');
" K2 x1 I6 [5 ?' Q$ ?System.SupportProxy = SysMin;* i8 y- j( W4 D. {
: _; {9 o) a7 _3 S1 F+ t& q+ |3 z
/* configure SysBios to use the lower half of Timer 1 */8 A# [0 _0 }+ j! m. |
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
/ A4 Z* E% A5 c, `, ~" \& W: bvar Clock = xdc.useModule('ti.sysbios.knl.Clock');- `7 E# ^  P2 G  f. \- |
Timer.timerSettings[1].master = true;: t% Q: u) `' B( P; `
Timer.defaultHalf = Timer.Half_LOWER;
% W. R8 d% |0 j; r6 s. `1 `* |% q5 UClock.timerId = 1;
/ ~) A  P$ m/ t$ H& n6 @2 C1 P2 a" z0 H) }4 V4 G

! |4 e* ]$ c8 d6 }2 j" t7 W, G/*
4 x8 {, g* c6 b5 k. E *  ======== Miscellaneous Configuration ========9 s9 |7 j) T5 P4 R  T
*/9 L0 n8 \: j1 I' A/ Q

) g' @8 X' `! O$ n+ y8 F/* set default diags mask */$ G/ E' Y1 ]! b5 K
var Diags = xdc.useModule('xdc.runtime.Diags');3 }% V) ~+ w* o! l
var Defaults = xdc.useModule('xdc.runtime.Defaults');
, l! n; T% [/ [- w) }
9 A" z8 J% b3 \, }* q: XDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
6 q, W( O& ^. T9 X' ]Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
( v% ]9 j$ `+ h" ODefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;$ j* M, J) q. T/ e! T4 z$ }: X) ]
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
$ i* B% m8 F6 ~; G- j$ E0 jDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
3 a( I, ~  i8 `7 V; FDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
' X# e& X* _# g! l2 Y' GDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
) P0 x! k6 H8 d( ], U3 h1 o. i! C$ k2 WDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;/ v6 e+ l/ T' X# X# d( d/ g
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;$ Z' \5 d/ M- @5 d5 n: G7 R- n
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
. t: T* `( k; x* X& vDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;& Y% [) b- X& F+ ^$ }' ~
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
" a; w% E8 k1 m1 w# wDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;+ @& h" X! K( ?4 o/ u7 ]
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
- ^9 W& a* k6 ?5 ?
6 ?8 N. S0 W2 k0 \- Y# l/* override diags mask for selected modules */
. w& I: K2 D6 w8 B4 e( C3 cxdc.useModule('xdc.runtime.Main');; @. O" U& J, m7 E8 E( V0 x4 i
Diags.setMaskMeta(  y: o, l, U& X2 y! Q. e
    "xdc.runtime.Main",
3 I! k7 C# q, P# z+ a3 D! q5 u    Diags.ENTRY | Diags.EXIT | Diags.INFO,
+ I# _; M+ \8 `8 A3 R    Diags.RUNTIME_ON
% d/ _) K' @& `+ e8 ~);6 C$ D: }9 u( Y! ^
' [" T/ |8 X4 `0 h7 E
var Registry = xdc.useModule('xdc.runtime.Registry');6 ?& _, V0 @2 ~; n. \: F0 v+ R: E8 |
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;1 Q  W* Z# V2 z, m3 t" y
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
6 ^/ o; d6 z& Q% [. d: V, C2 v$ LRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
% R* Q0 p& z0 z( y7 F( d" T& SRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;3 o! `. T# K4 a# j2 k1 B7 r

) M7 R: T) B6 N# J' c; j2 }$ Y/* create a logger instance */
! x% U7 _, j" g) D% Ovar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');' }8 Y, h/ c( Q
var loggerBufP = new LoggerBuf.Params();' I$ Y* E* F" L
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */, K- h1 r8 ~0 r  \! Z
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
3 T9 l+ Y' b5 x  G3 i6 b$ f6 c. p5 Z$ @4 x1 h" B
var appLogger = LoggerBuf.create(loggerBufP);1 b6 {* Y2 O" w: L
appLogger.instance.name = "AppLog_Core1";
+ ~; h7 a' x% B8 z9 VDefaults.common$.logger = appLogger;" ^  x0 _) s( j. y6 Z7 Z
Memory.defaultHeapSize = 0x8192;   
; \9 [8 Y7 ^4 G- NIdle.idleFxns[0] = "&LEDStatus";
  G% i: T( T+ r) Y1 |1 Q+ Y8 sCache.initSize.l2Size = Cache.L2Size_32K;
# o8 v, F9 B2 `9 X8 w& c5 K4 {3 {- B
回复 支持 反对

使用道具 举报

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 */
! X) a. q5 e4 N$ ~: ovar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
, M/ G# j7 H$ `; r5 b; L; V0 Rvar heapMemParams = new HeapMem.Params();
. E" {. i$ [) h# eheapMemParams.size = 0x4000;
# c+ Q# M/ c. b6 t2 ?7 A$ P* l8 f, \. D7 i
var Memory = xdc.useModule('xdc.runtime.Memory');
  E9 p& ?+ K" s8 }; HMemory.defaultHeapInstance = HeapMem.create(heapMemParams);" g% W, `2 Q9 D* @

* P0 p) B" b2 r6 t; D. Z" r我大约calloc  每次共计大小为5K*16bits,+ @1 x5 _& `& ?3 N  M2 Q- r6 C
而默认配置才0x4000、需要改大。* A: f! ^( k6 J9 J

. _  q; j* z. e" }( G
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */: x% n( m6 p  M9 P2 H+ y
Program.heap = 0;
  Z+ j1 \/ N5 h& YProgram.argSize = 100;  /* minimum size */2 N! @6 M* U* b1 |7 |6 n
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-2 22:23 , Processed in 0.058283 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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