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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构- X. t) K# k# [7 {$ i
( g& p8 I/ b' Y* B
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
  E5 W( H  C9 D& T7 n" [
6 c0 `( A8 ~0 O$ q7 p6 y3 M其他程序段。。。。。9 S" B( n* D' j
- D! ~! t2 w. g% k" Q( F8 v6 t: e
   free(x_d);
& j9 G" A4 Z2 ?; W9 V% b0 R& j
使用DSP侧单独调试功能,验证动态申请没有问题,
! \; r: ^9 h$ A! t, o% o, U. P# O! @& x* f3 y
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。+ f8 _" D* ]$ }; D" e- w
( j' b( E6 I. v& O& S
3 M2 E; ^. R4 v# R( J$ W

9 y- ]3 e. w3 ]5 I* e
6 G+ f; }" W3 D, _. H$ f+ c. s+ I% ~

* F4 |% P  C6 y1 }4 \7 V- e8 ?
/ a& `8 |1 `- v
' P2 _% _! A1 n# A5 @- D8 O! ]' F7 ~$ f( `$ O9 j8 r

6 V, `: f+ G/ O& S5 M0 }
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */$ ?2 [' [7 l, H9 z1 J, Y* a; m% w
Program.heap = 0;4 S; K3 L+ m- i; g2 o9 z
Program.argSize = 100;  /* minimum size */5 r1 ]* z7 M+ F, _7 ?
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
1 [6 w4 U4 I: r3 R! J" ^7 V/ ovar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
1 k5 o( a# c0 K9 M: G+ n; hvar heapMemParams = new HeapMem.Params();( K5 H  S8 D. o! W: T5 r
heapMemParams.size = 0x4000;
. d7 Q  q2 u9 P% o+ d8 i6 [
. A1 k, E/ s* y2 evar Memory = xdc.useModule('xdc.runtime.Memory');
; z- f+ L- X# ^5 ^& J( GMemory.defaultHeapInstance = HeapMem.create(heapMemParams);$ k5 ]- U; W5 f0 _- x
1 P/ X$ R2 Z/ p7 ], u
我大约calloc  每次共计大小为5K*16bits,
) e- n8 V, l4 S3 Y" ]/ W" g( a9 y/ Z而默认配置才0x4000、需要改大。. {# \5 u- f" s' q0 Y+ m9 u

; T3 d5 A- I/ q  M3 b
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
- e! u( {0 r, P8 |我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
! \( L2 K3 @; {4 m(不过疑惑的是,为何单独DSP仿真就没有问题呢?)* N- U$ f: _% B5 l
$ b  I$ ^+ t' y$ t3 h
是不是需要在DSP.CFG中进行配置( b! ^# O: h! ~% [  _
我现在的配置为, d/ G- }) b. x6 D* ?

6 F8 k5 K! D" h+ k/*
8 J4 u- u+ {2 d5 ^, `$ N. @* r *  ======== Operating System Configuration ========
* I' U& D. l! i+ a, h */# {5 G/ s. L3 _+ ]1 m! u) r

4 d6 [: ]' V6 k1 q3 Y, _/* no rts heap */
9 B6 ?+ c: c# b+ H9 m; t5 A; gProgram.heap = 0;* M- C  U  J7 I9 V1 r' B- y+ b
Program.argSize = 100;  /* minimum size */8 [5 X2 u1 Q' ^9 M
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
8 }5 o# o2 w5 @# o% J- l/ F
+ ?1 E4 i! |( g2 W, w$ l5 z9 f0 a; Y/* create a default heap */
1 U& t2 F5 O3 t6 ^var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');/ w! ~4 p; t. g: m: k" l
var heapMemParams = new HeapMem.Params();' E- O' w: R% A" }: o
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大1 A) a; D/ w! ?, m: V. a/ N! N/ D
( b) Y; j+ c( G9 X
var Memory = xdc.useModule('xdc.runtime.Memory');
, G0 W1 |: C" X$ V8 oMemory.defaultHeapInstance = HeapMem.create(heapMemParams);! F: |& E% @7 U# Y( z9 K' I( {

- v% n* u) _: w6 d( b/* configure System module */
3 Y. n0 o$ e8 u# Avar SysMin = xdc.useModule('xdc.runtime.SysMin');7 n6 a1 q7 i) y4 t0 o) G" s6 G6 p( L
SysMin.bufSize = 0x1000;
  X2 _- P& s0 C! J2 c" w  B# N+ CSysMin.flushAtExit = false;
) d6 ?2 l0 V0 j) X
/ B; A+ W. T, [) s  a& ~var System = xdc.useModule('xdc.runtime.System');7 t, z% L6 r% R' v# E
System.SupportProxy = SysMin;
" M$ x+ {" b; c8 h
3 U3 J4 B+ V& ~( x5 B5 n. r/* configure SysBios to use the lower half of Timer 1 */
( n0 G  C: @0 u8 w4 d6 d1 ^var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
$ j/ H$ y, t  y0 m6 q4 `6 {var Clock = xdc.useModule('ti.sysbios.knl.Clock');
6 A3 }* D! \( q; v3 G  |7 NTimer.timerSettings[1].master = true;
! g/ Q! @/ G5 q9 NTimer.defaultHalf = Timer.Half_LOWER;3 r7 U5 T6 i7 k' ]$ v% Z0 [* \
Clock.timerId = 1;7 h: Q$ _, }' g* T/ |/ M4 t
( O7 f3 T3 X% e* T
: u( Y/ a5 G4 F; E: G, d
/*
  ?9 i  ^% f$ A% l8 U2 h *  ======== Miscellaneous Configuration ========
$ o- z! X+ l1 Y */
: E, ?' c- c; A7 [3 _: c0 B: E7 L& a  p6 h! P
/* set default diags mask */
% S& T9 `8 R6 a& j2 H. @3 }5 rvar Diags = xdc.useModule('xdc.runtime.Diags');: y5 u5 G) P+ Q: c% B
var Defaults = xdc.useModule('xdc.runtime.Defaults');
' C$ p. v2 V9 K1 k8 I
& }2 I6 X! t; b1 s( bDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
: p6 ~( J) M5 Q! @$ B- d: v: KDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;4 {1 n2 }! L6 @6 A+ P# G8 m, u8 M7 }
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;" A2 B5 r1 ^! ?9 D2 ~5 |2 _
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */- M* H/ X: ^: o/ p  ?
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
  O9 h* Q5 A+ d6 ], i* {: KDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;) F- q  D# H* Z) b. P
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
$ Y* j6 J* B6 D  F# Y. v: ~+ \Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;5 w- T3 K: r' f! I8 T( N/ ~4 x
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
  ]  `3 _' P0 UDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;  h! k0 ~+ B  ]; A: T
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
" M4 Q* J) G0 P+ ]. ]' d3 `5 kDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
  j) [$ d& v* e9 CDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
) {( y. }8 j$ M* ADefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
* ]# r, L  h( M& ?' e
" S+ X3 h: T: r/ a1 W, K( `# @/* override diags mask for selected modules */
: \9 g7 I6 A$ T; L; f9 h" txdc.useModule('xdc.runtime.Main');- R' n; q: L- _; |7 z, p! C1 J
Diags.setMaskMeta(5 K& X' `; q# @) l( {
    "xdc.runtime.Main",* R0 M1 F8 u8 ~/ R- s1 l/ l
    Diags.ENTRY | Diags.EXIT | Diags.INFO,. @8 ~* |$ b, H
    Diags.RUNTIME_ON# |2 F& j% h) k( z: B& h
);
  F  }  L% l4 D  V% q& b. p$ o! A, l8 n  |
var Registry = xdc.useModule('xdc.runtime.Registry');1 l$ r  o) [% O
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
" g- K) U' e5 J$ QRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;) B: N0 x$ W8 I
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;; P, B; n1 {# n9 l3 a- Y0 o
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
* U3 _# U/ S. ^: t& ]3 p, T" b1 H2 N2 Z: _
/* create a logger instance */
# S0 \/ h& |( r8 t( F5 dvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
1 `9 L2 ~4 _$ k, l' a+ g$ kvar loggerBufP = new LoggerBuf.Params();" l8 s- B- p1 s
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */% L- X  x; Z, a- O1 m
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
. \! U0 B- {/ m
' x3 O  T/ E  ~( y* hvar appLogger = LoggerBuf.create(loggerBufP);# P3 j3 _0 N2 c& H
appLogger.instance.name = "AppLog_Core1";
% h( V% ~% R( g+ V' l. \Defaults.common$.logger = appLogger;
9 W  ?- P+ b# l7 jMemory.defaultHeapSize = 0x8192;    $ B  Y% R' r6 j5 k9 P
Idle.idleFxns[0] = "&LEDStatus";1 A3 H$ Q) k* ~" W5 g& g' }
Cache.initSize.l2Size = Cache.L2Size_32K;
" Y/ Y! m) K2 a8 D! n' Z
0 J. l: X/ x/ V( m( c  {$ `: k
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-18 16:49 , Processed in 0.041308 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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