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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构! |7 o/ I% r2 c# r3 Z

1 R& o* ?/ f1 X+ ^; A. O) U    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256( j# M# e' _5 j

5 ]/ R% o9 J3 p4 B其他程序段。。。。。
# @4 t! X- S' Q) n; {
# l# I1 ~& c/ {$ w) g7 z. ]   free(x_d);4 ~  ^/ H$ L) s' n( I

6 e" C$ H+ s8 \6 E7 }8 D" C' w使用DSP侧单独调试功能,验证动态申请没有问题,
8 J9 P& ]: Y- M. _- @9 e1 C& U) J  w% Y5 c  s$ W  w
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。7 ^! E; T( U$ h2 x3 r
2 H  D( |, _. M; R2 L$ H( |- p

- G4 E  h" k3 w* n7 m/ V3 R
& f2 `: d: c9 y! v$ ^' C8 A4 [) I* V
/ o  g, b/ y; d, d& Y$ s
  G( S1 Y* V% ~" Q3 ]( d" {
' x& x: D! P6 ~1 c4 H- p
0 c& n* w8 n  x$ u# p( `& l* B

  @/ O0 s& n! E' W# w: d; K, a" p4 d+ P% v) o3 W) u- P5 E" g8 e0 `( A
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
  |8 t/ Q" J5 }7 r+ j6 w" a我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
8 Y6 C7 N6 L- G5 V- {0 G(不过疑惑的是,为何单独DSP仿真就没有问题呢?)1 Q( Q( U# F, q* Z  c' z! S

5 Z& M" V0 ~$ b是不是需要在DSP.CFG中进行配置6 i1 D, ]7 o" q4 K, n9 J) ^( T
我现在的配置为8 K! g. p6 V6 }0 @) l# L( A# v

2 S: l* _5 |/ f) H/*. T" v, o+ V5 b, H5 k( ?' G
*  ======== Operating System Configuration ========
! y& W' ]5 H! s */8 N3 J& C6 d* T1 I

/ K8 Y7 K' l3 u$ z2 _( W; {. E0 X/* no rts heap */
2 g4 w, ~4 \+ z# J4 SProgram.heap = 0;5 e; R: k$ [; X( l( v
Program.argSize = 100;  /* minimum size */0 }" v  x6 f; C% P( B2 ]
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
" j" Q0 K8 y6 l# G) L% D! O, a* E6 t4 L3 g8 P; D: G  K, U8 O
/* create a default heap */
4 Z: j! [5 W9 v* |* n. [var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
$ M' [9 w$ l  N% t+ L2 Zvar heapMemParams = new HeapMem.Params();
9 ^  n  ]* b  ^; n! UheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
+ U& d# B  N. d* J4 N6 X0 E: V+ C: V
var Memory = xdc.useModule('xdc.runtime.Memory');% o! ?3 _; B5 L; p# k9 I% M, R
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
% V. _8 K# g) t& y
" ]& z) G3 x% U. r/* configure System module */3 N1 D* ]) A" b! m$ y/ c
var SysMin = xdc.useModule('xdc.runtime.SysMin');
8 v6 \3 f0 _7 ^/ D! e' e% R) PSysMin.bufSize = 0x1000;$ d- U; G% }# ~8 F
SysMin.flushAtExit = false;. I3 @7 _, D6 Y

+ Y( f; O* M& ovar System = xdc.useModule('xdc.runtime.System');
3 T" k/ E6 y: N% `System.SupportProxy = SysMin;
2 M3 U1 ?6 ~) D- T6 a5 L( W: N" e. f( S
/* configure SysBios to use the lower half of Timer 1 */3 B! i) P% Z  T0 x4 f' h. e
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');6 ?- }" l) T' s8 m" `8 K
var Clock = xdc.useModule('ti.sysbios.knl.Clock');; l! q$ r1 B  o: d" g, T
Timer.timerSettings[1].master = true;
0 X) e) P, h) t, ?. RTimer.defaultHalf = Timer.Half_LOWER;
- N: O/ W7 t1 B* DClock.timerId = 1;8 v4 Z$ S' B: j; G' _7 t6 N+ Y/ e
1 ~3 b2 d1 d3 g1 S$ v3 B6 E% e

/ |) r9 A& N5 K7 f  a/*+ {+ u8 q; h( \# |* i! \
*  ======== Miscellaneous Configuration ========1 f- ^- J$ ]& f9 U6 o6 I' Q* e% t
*/
; [0 O! s' i3 H
2 w+ a* ^8 C) {" F2 z/* set default diags mask */
( d- V) {8 Y4 B  p0 }- S, bvar Diags = xdc.useModule('xdc.runtime.Diags');+ K) X& A, P2 v
var Defaults = xdc.useModule('xdc.runtime.Defaults');! _; `) p; i/ Q

* e* ^0 B, \5 V3 ~" A3 ~. i  J( |Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;+ D  U. j5 ]2 @. J& L8 W# D4 A. f
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
6 I# Z9 m% i3 c9 n/ W5 U3 cDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
" [  n4 I5 q  F' `' ~1 j' L4 JDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */- ^  x9 W9 A  S$ z( d
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */6 N; h* j$ x4 Z$ N0 q, P9 K
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;+ k/ K9 y9 B# J3 v0 \  o7 t5 G
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
! `- y" E$ ^; UDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;5 R2 F( U- p; w* Q; c7 u- P
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
8 u  F1 F( w. u9 C. ~. C# w) yDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
8 f8 @- v( x- P  nDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
  V: f, F* x5 o! uDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;9 t* G$ O$ H( S$ B9 N
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
2 {, e9 X6 c9 s. A, G+ wDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;  A4 h/ a) d# ^- v: g' b& z

) E$ T6 o* G3 {. O4 G/* override diags mask for selected modules */
- J1 y, l: \) k/ f% L, \  e% _xdc.useModule('xdc.runtime.Main');$ O: h& G2 X1 ]
Diags.setMaskMeta(( y) l5 K+ m' Y% Y0 ~
    "xdc.runtime.Main",' w; n" ^0 ~" h$ j
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
0 e0 w+ k# q6 }! W2 _    Diags.RUNTIME_ON" j, B  n7 J! V
);
6 n; d( v! p' p1 a0 C; F4 G' ?9 G& z& F9 q; f5 {( b4 h
var Registry = xdc.useModule('xdc.runtime.Registry');' m" ~( h$ [$ B" M: x
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;0 t7 F& M! g+ H4 w# r2 Y1 T% j
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;3 p* f$ P' M+ c$ H# P! ?% ~: P' S
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
6 S5 R& P. ^' l; YRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;, r1 g. h, y5 g5 T
0 l$ r2 x9 C3 T8 P/ k) J& e% P! ^! P! ]
/* create a logger instance */8 Y$ F8 @2 F. K% Y: z
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
) V$ A6 r7 r) g/ {/ X# Q& ?var loggerBufP = new LoggerBuf.Params();) V3 C7 V/ m! X. b8 D2 f! K! m
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
0 s5 x8 y7 M8 N3 J4 g. c% nloggerBufP.bufType = LoggerBuf.BufType_FIXED;6 z0 I8 H- Z- N+ U% r. b
2 l) h3 f: T1 a
var appLogger = LoggerBuf.create(loggerBufP);
- M" a  \# Y6 A" cappLogger.instance.name = "AppLog_Core1";
3 S  g( ^$ P7 r/ J+ s: }Defaults.common$.logger = appLogger;+ x" s( I# n- {5 ]# E# t9 ]3 w
Memory.defaultHeapSize = 0x8192;   
+ i* i" I% P/ NIdle.idleFxns[0] = "&LEDStatus";
4 G  Q3 h% u" d3 @8 g" \Cache.initSize.l2Size = Cache.L2Size_32K;
0 A+ ]2 U6 T& Y
# w5 L) s5 }/ ~* r+ U, }7 y. q
回复 支持 反对

使用道具 举报

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 */
/ ^6 @7 e6 x* o9 F; o5 K- Gvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
0 v! d0 c& P( g+ |- tvar heapMemParams = new HeapMem.Params();# b' k( O) x7 b4 S# I
heapMemParams.size = 0x4000;
$ I+ V2 N+ S+ i+ {, V" X
5 K# J  g6 g3 z9 G7 Tvar Memory = xdc.useModule('xdc.runtime.Memory');# y, m5 J0 }" W% ?7 Z$ l  u8 ]
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
8 v7 W2 d, o: M9 u* x7 C/ Z- O' N0 O$ ~- R% X( }9 Z0 {
我大约calloc  每次共计大小为5K*16bits,
" r/ h$ g+ R4 B$ G  X+ k  }: J- f. a而默认配置才0x4000、需要改大。9 ]  A8 d' M* e0 ~5 p, J5 }( W1 Z. \
6 Y/ e4 [0 L5 t
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */7 R2 L/ I# p% ?
Program.heap = 0;
2 Q- T( @4 o  E$ N* i: ~& VProgram.argSize = 100;  /* minimum size */
7 v5 R$ }! R  v9 xProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-28 22:12 , Processed in 0.044677 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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