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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
$ B: \! I9 P$ c" S- ^1 \4 F1 R! P6 {( x" t8 S
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2566 J/ v! [7 L8 I9 g( d
4 o5 Y- V5 A2 m& W( Z" n! }
其他程序段。。。。。
! w# f4 ~* }6 p5 C# u- F 0 x: c+ r4 _8 X( ?. E7 \
   free(x_d);7 J: }# q' S$ _* @' A
# V  \9 u# _& L. r& J
使用DSP侧单独调试功能,验证动态申请没有问题,
$ U# @1 [; i9 G' a, E
7 ?1 ^5 R  @( W5 D/ L. ]但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
8 `% C; j; P* S. k! V$ h

) A" ]& S& m7 w8 l& {" Y! j3 x2 N! ^5 p. ]

$ Q  d  h# R  G4 _4 i; g* M+ K/ Q& D

+ D: C  f* q/ z7 X* K
1 b3 v- i) ]2 v% t+ @: x
# N" d4 ]2 _7 @0 n  R  D2 _8 M' |$ s5 }$ M6 X( f( W

9 F' z2 M5 g  H+ x9 o
# ~+ z! p/ p0 D, _1 n
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
3 N0 _& e1 a# ]8 p" {我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
; M4 {0 N/ c/ U7 v7 B- @3 f& W8 e4 ^(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
& d8 r! L  X. C, c
2 K0 [9 [' j1 }8 C9 f
是不是需要在DSP.CFG中进行配置
; ]$ `! h' \6 V; \! k& k2 K: Q我现在的配置为: f) s- O& m! {/ m

5 N. w4 w/ h! Q0 P  ?; g/*
2 N1 o  b3 m+ K *  ======== Operating System Configuration ========
/ k$ h8 m% K* v( {- R: f# C6 } */2 F2 Y! G. W) f6 `+ z) r( d
8 m$ i6 J: m& m3 X! G& ~
/* no rts heap */
/ v  \' x: s0 b7 M' G, VProgram.heap = 0;: Y" Y+ v! a, v; b7 J; Y8 m+ K
Program.argSize = 100;  /* minimum size */$ A' t& R, f3 Q* z! h, ^7 I
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
- Q/ u# ^! v6 u9 K5 u( Q6 l0 t4 x6 _& Q" \9 P& }. X# J
/* create a default heap */
% a0 B3 N8 |5 V7 z9 V( v1 zvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
: c8 s. |0 K# z& Z: V+ Wvar heapMemParams = new HeapMem.Params();& y( l( e" a; o8 N
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
  ~- g6 m% }) n5 J5 X: t/ N  m( R7 }6 R
var Memory = xdc.useModule('xdc.runtime.Memory');
2 M5 B2 e( {/ q* W( o4 c1 LMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
0 y2 s5 A3 S, o7 `: ?
+ t$ A4 {0 I9 P5 f& p  c4 j8 {5 N/* configure System module */
5 L( L9 M& l( x: x6 p5 E6 `var SysMin = xdc.useModule('xdc.runtime.SysMin');: u# q0 S  |8 U! V  [1 }) T0 i
SysMin.bufSize = 0x1000;  L; c. S( x* t
SysMin.flushAtExit = false;, f+ i3 Q& v, x. i

. [: n+ y9 I) k& a# o& Fvar System = xdc.useModule('xdc.runtime.System');
- q5 Q: k) v0 B# F" m# ~3 V+ {System.SupportProxy = SysMin;: i) c/ q+ |: v$ \
- r* @4 k% o1 }% M2 g
/* configure SysBios to use the lower half of Timer 1 */4 N4 v9 N3 Y) C4 t
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
1 Z& `1 c' |- t: W- Uvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
" {+ a* e  v+ i& Z6 W' T# U9 _Timer.timerSettings[1].master = true;
, a! b# H( G; i3 ~/ \Timer.defaultHalf = Timer.Half_LOWER;
" H  Z4 `, a" k  X% ^3 k# lClock.timerId = 1;
0 Z5 G1 B/ O, r2 J' D7 n  o/ w/ y+ o' c3 ]! r2 D7 |* p
5 L: ]( _5 ?  ?
/*$ @+ r, q: E' @- C
*  ======== Miscellaneous Configuration ========9 u; Z4 p7 p- e* M# L
*/
5 v9 X5 a  x; G! n+ Q- N, T+ G/ n( W# l2 x
/* set default diags mask */6 N( B  W' i6 q* a+ j+ {, P7 q! W' {
var Diags = xdc.useModule('xdc.runtime.Diags');( w7 Q7 a, U+ Z# h
var Defaults = xdc.useModule('xdc.runtime.Defaults');, U) D4 h3 P) y) k0 z  V
- L2 ^2 h' X, H
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
. r7 G; e2 }5 y) Z4 P$ [7 VDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
- H) U2 J2 x. W' K, C/ n  }Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
! \; j$ C6 B; Z5 ^5 }" [Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */( v. m- v' P7 ~: [% W' G% b
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
) H8 M5 c8 j7 J6 Y: N% h2 `* cDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;: A7 J1 _6 E" ^& }$ e8 n$ ^
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
. ~* `- O0 l6 @) d# O, [* A# ODefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
0 k1 ]5 [* _  S6 k) K3 Y0 J0 [9 tDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
; O2 ?8 v. ?; e& tDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;- C3 j0 u  f+ l8 d
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
. J$ b' J6 ~" \. tDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
0 K) i( f6 x( y/ a( t" UDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
, m0 h4 ^" S* \, B1 G: GDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
( Z" y2 V2 V9 _4 q4 F& ^6 J7 Z3 x+ F$ f: {% M( M# L
/* override diags mask for selected modules */
4 n# M) j- f0 T# Zxdc.useModule('xdc.runtime.Main');9 g( e& K) ?+ B9 w4 P( X
Diags.setMaskMeta(
, g/ v, _/ a. }* a; l) r    "xdc.runtime.Main",. f9 W9 m# a- V* r7 O1 ^+ L8 H6 E
    Diags.ENTRY | Diags.EXIT | Diags.INFO,8 Y  K) @7 Y( u5 M( {2 Y
    Diags.RUNTIME_ON
& m' _* G) q; t* w, K- E5 o);# ]4 }3 B5 Y+ q8 i. N7 j2 k6 }

# Q& `, C' k4 n1 r/ Ovar Registry = xdc.useModule('xdc.runtime.Registry');. p/ d' ^) r; `1 h* m- @1 T- R
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;+ Y' g  i+ m$ }* O. M4 X( x0 N4 t
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;6 G5 k% E* @# X  r1 z& u
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
8 H4 M" ^7 z1 {% c8 U6 e9 X" KRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
2 D- |; s, _3 l: Y" H
3 K! y( b5 ?) {. d/ ~$ Y8 A% H/* create a logger instance */
# Q& o/ @3 S( r, K" dvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');- {  v; S7 S; s, a5 ]
var loggerBufP = new LoggerBuf.Params();
" s- N! l5 b) e* iloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */6 h+ L* m! M5 Y% H0 B
loggerBufP.bufType = LoggerBuf.BufType_FIXED;- D4 V! v5 b# q, m$ G) M
+ J: q* N; {3 B
var appLogger = LoggerBuf.create(loggerBufP);+ d6 I  @6 w8 e4 u  H8 I
appLogger.instance.name = "AppLog_Core1";
. u- M6 q: v5 ?7 ]* A$ [6 z) u+ `0 ]Defaults.common$.logger = appLogger;6 M3 C4 |; j/ j, ]* F2 L% s  e
Memory.defaultHeapSize = 0x8192;   
  W7 R8 I0 a2 g$ y7 }& O8 B% uIdle.idleFxns[0] = "&LEDStatus";
# b7 l) o7 ^- v2 U$ q' U$ u' UCache.initSize.l2Size = Cache.L2Size_32K;
, `: m' Q- t9 e$ f* Y$ _7 f- U( _; X5 `, H. C+ T$ ~; V" ^. J
回复 支持 反对

使用道具 举报

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 */
! U$ g( Z: F$ |5 kvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');2 `1 o( W  ^" K3 t
var heapMemParams = new HeapMem.Params();) R* D  c1 \% ]# ]
heapMemParams.size = 0x4000;
) A7 B2 f3 q: Z% L0 d$ @) F0 J) @( J
var Memory = xdc.useModule('xdc.runtime.Memory');. Y! _, _3 Z4 a1 K6 ]( x
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
# w+ O! e' P7 _( i7 u* O2 a) X5 G5 O7 L! V
我大约calloc  每次共计大小为5K*16bits,
* M" b/ [* |9 G4 Y6 [: A而默认配置才0x4000、需要改大。; n8 O3 @7 H7 U* `9 B  j
2 j" c. \( V3 R
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
) b% m( r) B# Y0 J9 F) zProgram.heap = 0;
8 Z7 w+ v$ q5 x9 QProgram.argSize = 100;  /* minimum size */1 j3 J8 M: ?$ m2 S
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-17 01:59 , Processed in 0.046221 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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