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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
% b/ [* r- ~" S, j
8 i4 V6 R' s+ d    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256* p" j/ V% T9 {. J
2 @6 S' f, V3 v' V7 V/ U: R7 c, l1 _
其他程序段。。。。。& I4 a; f# h8 o7 c' ]6 H: [/ c

9 e' k8 r* Q( F( g% A8 G, [/ K   free(x_d);
! h0 f1 a7 Q" t% @. `  G' n) r. h, I; X8 w8 T2 w
使用DSP侧单独调试功能,验证动态申请没有问题,
- F  u' R: \5 [* c2 S) ~; a! o+ O- V3 j3 M$ r9 [
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。, Y5 l- m6 }! h" r1 l

' _& ^$ x0 X# Z; @9 e3 [& S9 t3 P# `6 K$ M  }! m9 _

5 k- k* @- [% W1 ]& _$ H! s
3 i7 m6 j. `  O" C; S+ d7 U: f
& s, l& D& \  z" k/ G; r1 c( |- u1 x5 Y$ |; x

" d# o" ^( I9 V" Y' h# Y$ F) t1 x+ J! Q* |" k( [) U# Y

8 f5 k5 _$ S2 b, F. F+ r4 w( T- e0 `: O. ^: |; U
分享到:  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 */5 E7 M" }; z9 X. T4 _' X0 J
Program.heap = 0;
4 x/ O, ~* S! h2 s( ^Program.argSize = 100;  /* minimum size */
: ]" x6 d7 t0 @" R) hProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */  U! E- z2 N0 j( @6 O- I
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');) |' ^/ `5 P' U7 B5 ]
var heapMemParams = new HeapMem.Params();6 Z/ I' j9 }% |! @) K9 f
heapMemParams.size = 0x4000;" y5 y4 k) C$ z. O9 P
* j! J$ V, a5 O
var Memory = xdc.useModule('xdc.runtime.Memory');
" [" d! A8 F2 Q9 a  Y7 pMemory.defaultHeapInstance = HeapMem.create(heapMemParams);& m7 X4 ~: S9 M1 g% m
9 f+ Q8 U" ?' c" x2 ^
我大约calloc  每次共计大小为5K*16bits,$ w# z  k8 |8 B: [3 ~
而默认配置才0x4000、需要改大。
: f! s; ~" h( S+ n  j* d" }6 i7 I  C6 W0 B  x
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
4 m* \' h7 J( E我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
, u/ F4 n! v9 T2 @4 U! ~; O0 \+ C& g(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
5 W( I1 ^* T3 Q6 v

/ B* ?0 w" c; E& ~1 {6 b' u( |  F* i是不是需要在DSP.CFG中进行配置; u% [/ j. _* m6 n' v) J/ C
我现在的配置为# r  D+ b  Z1 y( t) U
# b, b. ]3 w9 [' z9 P; U. T+ k
/*
% Y5 k9 E4 ]/ T+ L4 }. }/ b *  ======== Operating System Configuration ========
5 S0 w2 S$ q9 x4 S! U: n% {, y */3 y+ K' L  l0 p8 S& }- @$ s
4 c. P) S& w0 h- D$ j! Q0 ^" N
/* no rts heap */
3 q. j7 r1 c* D  j' \% J, wProgram.heap = 0;
/ ?+ h! c( X9 c: i, OProgram.argSize = 100;  /* minimum size */9 ]/ ]" I2 T0 O. n3 d- ?7 F
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
4 O" ~+ @! t: O1 p& r1 b: T5 q6 u* i3 e  G* G. R
/* create a default heap */9 i- C; Q7 ^7 E7 D$ \  T/ [
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
' G0 U4 O% b- T, m6 e. l: }- ivar heapMemParams = new HeapMem.Params();
5 R0 I/ U  i  K% f' pheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大/ f$ B0 G# i3 y" J* S
0 ]* ^! @: V% ~3 g
var Memory = xdc.useModule('xdc.runtime.Memory');. }  y" ?$ `1 ~0 b
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);# c% B: y+ n3 A  P
0 `) L6 y$ H2 Y4 a/ {- X
/* configure System module */
  @' I1 q5 [7 x* r3 n$ wvar SysMin = xdc.useModule('xdc.runtime.SysMin');
$ V2 P2 W9 z* V: D# X* ]SysMin.bufSize = 0x1000;
4 |% o) F. k$ D" KSysMin.flushAtExit = false;4 O. r) Z8 G4 \) [3 n

$ L6 G) f+ x7 P3 |. [var System = xdc.useModule('xdc.runtime.System');
2 E1 e% R3 C. M2 _System.SupportProxy = SysMin;' \8 i! Q- ?3 \! y+ d3 Q% P! Q! M7 ?

, ~3 |0 I! [& ]( v; f8 }! r8 y; k/* configure SysBios to use the lower half of Timer 1 */7 k8 p# c- ^& [( F9 S
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');% s6 L% p" {/ L7 N
var Clock = xdc.useModule('ti.sysbios.knl.Clock');% M& |4 _8 p" c7 f" Z
Timer.timerSettings[1].master = true;5 n0 r: R# O: H5 r: z% Y$ b
Timer.defaultHalf = Timer.Half_LOWER;
4 c+ ]5 S( {$ ZClock.timerId = 1;
( h, s; _6 F' J% Z4 O$ M9 j! W# G9 P  S6 _9 K/ t

! X5 `2 q4 N) C, z/*
2 Y" V4 w5 t! H/ X% F: I *  ======== Miscellaneous Configuration ========
, t# g4 Y7 e' C( q2 `1 r */
+ u7 [! h: ^  ~7 _
/ A& w, e6 R8 }/* set default diags mask */
' e9 A* p2 ^' p9 N- Zvar Diags = xdc.useModule('xdc.runtime.Diags');
  K' _1 R% L" t; J% ?5 Tvar Defaults = xdc.useModule('xdc.runtime.Defaults');
# [" H. h7 r4 d5 o5 H+ j8 P) b5 i  O" Y6 t, o
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;6 i/ e8 s( m  \8 \/ r6 d% f
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
! [  v7 B; s: n" A4 l  Y0 \3 oDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;  R1 I: y% O' }! J
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */( c8 m  d( G( Y
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
# m0 P" `, M: @; y0 O* IDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
; N* L8 W& L' R+ ?Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;5 _% U7 Z# p. y' o4 a' s' B2 ?
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;4 M( P' t0 l* q9 M( d
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;1 X: ?) l- h, [# K; A
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;5 G( c/ D! q0 O# h) y
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
" H/ `. u, n6 @& E" f+ xDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
( b$ x" I- }6 r0 f) i6 d& n3 N$ DDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
2 T$ M! B2 G' l. ~" x, GDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
1 l4 F2 _2 y% X( p7 n5 B: i: a" m' D; `7 c7 Z
/* override diags mask for selected modules */
$ Y. k( |. X" ~  t4 \xdc.useModule('xdc.runtime.Main');; s6 M% d% e, N4 y9 [2 E; b
Diags.setMaskMeta(8 S' W$ n! N# z
    "xdc.runtime.Main"," e/ H2 h# p: Q" f) z1 }
    Diags.ENTRY | Diags.EXIT | Diags.INFO,5 [: w* q9 `5 v3 u8 d: `
    Diags.RUNTIME_ON
2 Z" q8 H) K* z$ Q$ t);
9 k! Y4 m. M  N! \1 Q
) u! @5 r0 |0 k8 Mvar Registry = xdc.useModule('xdc.runtime.Registry');, Y! q' b  B0 Z" H
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;# N/ m: y: y  O6 A# q4 g
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;' a1 V4 h5 v: h
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
3 F3 K* f/ a- _; c; XRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
' a! I% j0 u/ p! e/ P8 l1 B4 H
; o% L. \' M8 H) ?  p' p5 t/* create a logger instance */
. m! w2 v1 G/ T  o% B8 pvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');4 v% L  Y" c( ^* w3 _" X' c1 v
var loggerBufP = new LoggerBuf.Params();
! I/ R3 ]$ E) j6 E7 nloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */" e0 g4 E, w0 O* z7 Y+ }
loggerBufP.bufType = LoggerBuf.BufType_FIXED;* s! v" K( d6 ]7 a" o; Z; L6 y

2 ?% V% d$ N1 |: d: Yvar appLogger = LoggerBuf.create(loggerBufP);" H) A, E7 n! n4 n/ Q  p
appLogger.instance.name = "AppLog_Core1";
) V# F# _6 F/ l2 C" g  g  |Defaults.common$.logger = appLogger;1 H' N0 |  Y' a) c- v4 [; A
Memory.defaultHeapSize = 0x8192;   
2 }$ M: z7 [( A5 W! g2 d6 Z7 M1 W+ i& XIdle.idleFxns[0] = "&LEDStatus";7 e9 V. Z; P( }
Cache.initSize.l2Size = Cache.L2Size_32K;
$ Y6 i* G* l) R  {2 l4 d: @6 c# Z1 v7 {0 [
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-25 07:28 , Processed in 0.041589 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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