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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
, r! O; i  N( N  _. T7 W; b0 f$ R) y# u) i
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256, Z3 [2 d- g, e  [, }

. l8 T1 k9 Y0 \- ?( B- W其他程序段。。。。。
$ _6 V$ u9 q2 I+ [$ z . K" T/ g& g7 L/ ?+ p: g! U) i
   free(x_d);9 y  C" @; E' \6 \
1 \' }2 A4 y+ T/ ~
使用DSP侧单独调试功能,验证动态申请没有问题,# ^7 g( w3 z) r- u* A
9 I. v1 G7 I8 t, \) d
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
8 k7 [& X% U: H+ o
+ b$ ^* q- V  F% c% q$ }' q
. k& [& Q- W9 ~; a: C! r

7 p8 [+ j5 r, J5 ~# Q3 [4 L
; R8 P' F( b4 x. t% U! J3 T$ E1 k
; o0 l1 _) B* G# {
& N- t; u9 @' Z! }, z+ D: l- C
" V/ U% T% S% e# T9 `2 @

1 H& z% f5 I: p
* n( L. r/ Q% q; X# b2 ], g
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明& H8 Y1 d( _. G0 G1 ~  k% J
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下, A- [6 ^* M; v- y% J
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
9 v% G0 ~) y& |# ?' s' x& k
/ `: m" a3 r: b2 u5 e  C) ^5 r# G6 t. o
是不是需要在DSP.CFG中进行配置
# t. E* _$ t1 A/ U我现在的配置为7 n- _9 {2 x0 B* i

. t' n  n# r- a6 r9 M. \9 Y/*5 V1 {- Z% R' X  c% W
*  ======== Operating System Configuration ========
; l& ]+ `! v) p: i/ D */% z, G, A  v, Y( n8 ~+ y
2 y6 \$ r/ x% B
/* no rts heap */
6 {2 D# Z: H- c5 [% ^* |( [% CProgram.heap = 0;% o* I3 _7 l* ~3 c1 r* F
Program.argSize = 100;  /* minimum size */
: J/ a4 a- A- B5 V, x3 I! FProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
0 {4 {) N8 F8 }# Q0 G. |5 ?' B& H" c9 _, g5 Z  ~
/* create a default heap */
" `' B/ s7 y. S$ Uvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');0 V9 y# S+ Y: y" k, b; g* i
var heapMemParams = new HeapMem.Params();
. G/ _8 |" ]) jheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大$ S$ Y# a( V6 {. q" b
4 D+ s: _4 V& X' @0 e0 U5 \
var Memory = xdc.useModule('xdc.runtime.Memory');
3 U) ?3 J. R2 y, O( `" G$ pMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
. D. k; {; N( X2 P  P) w9 U' Q  z0 C
/* configure System module */& {8 R0 |9 R9 H; u7 D: m2 _
var SysMin = xdc.useModule('xdc.runtime.SysMin');
) `9 _1 v8 @! hSysMin.bufSize = 0x1000;- G( }9 ]$ `' o' Q& R
SysMin.flushAtExit = false;1 O" n$ H/ }0 Y# t0 Y
1 Y$ k3 y# r) f' V
var System = xdc.useModule('xdc.runtime.System');
9 S9 W; ^+ V! F1 `! _System.SupportProxy = SysMin;  J" q! o3 ]! B6 Q+ |& e

' v& a8 K1 \4 h+ f' \  c1 ^4 b/* configure SysBios to use the lower half of Timer 1 */9 e' s- b2 p8 ~8 _/ c% N7 Z$ m
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
( c4 r( }# ?  m  x) F+ i; avar Clock = xdc.useModule('ti.sysbios.knl.Clock');
: X  ~* @2 Y6 f% _0 _: R  q# nTimer.timerSettings[1].master = true;) f( S3 Z9 H; M
Timer.defaultHalf = Timer.Half_LOWER;" E  m1 X$ {4 |  B5 B
Clock.timerId = 1;6 _$ O. a* E5 z( Q
! l& {9 s$ X9 J4 O4 b7 _3 P( c1 i

/ u$ ^% X+ g0 s. @/ i/*
# x$ m& M# g: E% a( G( A: ^, I *  ======== Miscellaneous Configuration ========( t3 |' {% O/ d/ j0 J
*/; W) z: |/ A# a; u

1 n1 g/ i7 s3 S% L/* set default diags mask */
5 y; u# x6 ?+ R! P* |# l5 [0 avar Diags = xdc.useModule('xdc.runtime.Diags');0 g+ m: W9 `9 X7 i3 `' u
var Defaults = xdc.useModule('xdc.runtime.Defaults');
# \7 z) I9 ?1 m7 D1 A0 Q" _; W: B, W( Y2 Y  L9 I+ A' N
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;/ w3 G$ a5 L; c3 P8 s0 }
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;- D& l7 p0 R9 Y# F9 S1 F! w
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;2 z1 x7 @/ p0 T5 ?
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
3 ]$ P8 K  J7 q2 u9 Y$ ]( H9 c! NDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
4 S6 v' a, [/ ~% E' |' z! L0 J- C0 \Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
8 n$ O# D- Z$ O2 yDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;# U8 H& K  e+ z
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
9 z2 m  V! Y0 W# N9 lDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
7 n7 V* z' C3 N& I1 K. `Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
6 s$ |0 w% r: kDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
* n7 @9 X9 ~" o4 `  J% ]9 w% dDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;+ p- f& p; F' Q: ~0 H7 D
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;' ]* l; ^& n7 q) Y: T
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;8 l, G, M" A  }  f& w
, Z! p: Y& p% W3 f# l5 T/ M
/* override diags mask for selected modules */
* R0 s) I( }, w1 c9 h, I3 R9 Fxdc.useModule('xdc.runtime.Main');  U8 @& b3 k8 \  j. z# Y* _% O: ^
Diags.setMaskMeta($ m3 r" Q% L+ r6 k3 v$ I9 y4 h& a! |  p
    "xdc.runtime.Main",6 `! Y* p8 f- ^" j' z
    Diags.ENTRY | Diags.EXIT | Diags.INFO,9 B7 a! u; J6 B; U4 r2 _5 O
    Diags.RUNTIME_ON" ^! g3 S% v# ~
);: x4 \  w6 U# B0 U

$ B2 N5 |% G4 v- C8 t: [& Gvar Registry = xdc.useModule('xdc.runtime.Registry');
( a. k  ~6 P8 x- zRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;+ n: }2 S5 v+ o# b( y
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;) l- ]+ I+ M; g4 I1 R% F" A
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;: |: {4 ]6 n# t( _- ?
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
6 I0 o, }+ y% }' j+ D5 d3 H3 b# r- [, A# H! k) U0 {0 Q
/* create a logger instance */
- X9 |$ v/ l7 v7 p3 jvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
& V0 M) Z" \/ e  a' b3 ]' Cvar loggerBufP = new LoggerBuf.Params();
& I1 ~( x& S) LloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
" F  O- A9 t$ m' w8 ^6 KloggerBufP.bufType = LoggerBuf.BufType_FIXED;: @6 b3 Q0 G% N. {: L6 w
) w  c5 P/ q( C5 A
var appLogger = LoggerBuf.create(loggerBufP);( ~; l0 q7 m2 d& l5 V
appLogger.instance.name = "AppLog_Core1";3 E; t: f: |1 _6 W  r1 Z
Defaults.common$.logger = appLogger;
, n# p5 x6 |7 K: M0 y9 }Memory.defaultHeapSize = 0x8192;    6 @! A) v9 t3 \7 W
Idle.idleFxns[0] = "&LEDStatus";
' a& b( G% O: t; s. ^, MCache.initSize.l2Size = Cache.L2Size_32K;. X/ U, _  p5 j1 O# C% a4 R
9 t  ^1 i- Y& N$ _1 I
回复 支持 反对

使用道具 举报

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 */( c4 n; v2 O+ b' r
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
8 J6 k/ w% R  A" P4 T( B! vvar heapMemParams = new HeapMem.Params();6 _2 Y6 e; ^$ ]8 G
heapMemParams.size = 0x4000;: y% I" J' E6 H

1 Q, u% Z$ H; Kvar Memory = xdc.useModule('xdc.runtime.Memory');$ J6 z; j1 Q: o$ B
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
# N9 n" c, s" Z9 \. I( h/ U- w  @0 Z0 m( c
我大约calloc  每次共计大小为5K*16bits,* o; E" k, `" Q  @5 F, `
而默认配置才0x4000、需要改大。
# `/ b8 O# D: G% u, I! Z  R+ |% n$ ~. p7 o; z) @7 E
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */: Z  i6 T. y. f4 ^( K* x
Program.heap = 0;8 K, U" y3 g+ P. e; Q
Program.argSize = 100;  /* minimum size */8 H! O# c* s! Z6 q. r
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-6 09:05 , Processed in 0.041103 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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