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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构" w+ o; \! V4 V2 O' r
, k. O: n5 t$ Z  M) ^6 r
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2568 B$ z& u5 `: q- n; G/ c
, Y) w; i6 M6 d. J+ j
其他程序段。。。。。
3 A$ p! h  n* U7 N% ~: ]
* l+ |7 f& B# `- q   free(x_d);4 N; @4 t$ b# \; c

; S2 m0 r3 W" }, I4 Y) d8 a: X! i使用DSP侧单独调试功能,验证动态申请没有问题,
% L* E' d$ e/ ^" A! |! Y/ G! F$ `$ k; q
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
! s4 x9 I* ?' Y' e7 Z

2 `6 X! p2 x# a( z( g4 H# z  z8 `( s2 o# |. c( x- K; J
8 {6 C& h7 i( c6 b, g+ L
1 m/ u0 U. v+ v0 l+ F( x5 c

+ k3 h6 f9 l) c$ s
& ]# q( q/ Q' ]7 {, J2 t
# \' B3 \9 e$ Q: O- ~
( Q3 _7 J  ]+ \* S$ R' Z' w. S' s3 i$ R. {

# H1 v5 X8 k/ |4 z4 _3 T7 }
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
: B  L3 a  M' s" G; ?" D+ A3 `我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下* b) \  T; R; \" }
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
, f1 _; ?. @3 j" K( S/ A; t

6 |% y: J- c; s/ ?/ n+ I是不是需要在DSP.CFG中进行配置; ?! z1 Q$ R! [5 }8 Q) P. V* z
我现在的配置为
5 ?. y) P1 I5 @+ F
( @6 G% j- n  z9 A+ Z/*: o, K6 V1 ~# d# d$ l7 J2 Z% t
*  ======== Operating System Configuration ========. O" d) T  y4 p. l
*/* w) e; o0 n4 z  s" v. [
& s2 x# h7 \$ \, D' Z% o
/* no rts heap */
# S) R, L. Y. Y* X+ @) y5 {Program.heap = 0;
  K4 Z+ p3 g) {) t8 ^Program.argSize = 100;  /* minimum size */4 E" I" l( v0 Q( D- V
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大8 y" o4 n1 |( y; J0 K+ D

5 U+ n2 e7 ]' v/* create a default heap */( q( t, O0 w5 F' C4 M1 I  N$ Z+ p6 d
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');4 i+ |; {/ _+ x) \# ]; E- a
var heapMemParams = new HeapMem.Params();& l$ h2 y, C: K& k# c5 N
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大- W5 Y5 y. D; e6 ^

+ R: w, B& z8 v' v* e
var Memory = xdc.useModule('xdc.runtime.Memory');& n0 d2 u0 D2 I# e0 f
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);/ }3 b0 D; V+ D  C
: {+ c' J0 B: |& U) x3 j7 Q5 o
/* configure System module */7 G2 N( d/ o4 E# a' U# `9 Y
var SysMin = xdc.useModule('xdc.runtime.SysMin');
) x' D$ L, K3 \7 tSysMin.bufSize = 0x1000;0 j* R3 _! a1 F* R  v; w& ?
SysMin.flushAtExit = false;
. }; b+ h* z: u
) ]: S' {7 @2 w% O  ~var System = xdc.useModule('xdc.runtime.System');) \2 r# f  B: r1 z
System.SupportProxy = SysMin;
# c' y5 ~1 o( I- U) b4 j  i
# p, G$ D9 A4 y/ _/* configure SysBios to use the lower half of Timer 1 */
' ~8 B4 \/ H1 j2 Q6 nvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');  q. s6 X, r$ ]6 q# a! W8 p5 r
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
. a7 Q: @2 B4 @, F4 ?Timer.timerSettings[1].master = true;
- o5 ]7 M* C# d5 H6 S; ETimer.defaultHalf = Timer.Half_LOWER;
. y5 w, x& Y* _# D& n$ a' \/ IClock.timerId = 1;8 f* ]! r1 T, G6 E! k3 h

2 K( K% @5 l1 c/ P( r2 [. T( ^8 m: g5 A5 @3 A% O! M
/*
, o! S$ _4 R- \3 a; P4 d: ~ *  ======== Miscellaneous Configuration ========1 q* s* x3 H: S& v9 y+ k
*/
+ c6 E- @) }0 {. T. A( |; u. x% J8 s0 j
/* set default diags mask */; f/ n# ~2 ]1 `9 \
var Diags = xdc.useModule('xdc.runtime.Diags');
2 S( |; S- H# ?+ ?' A  ivar Defaults = xdc.useModule('xdc.runtime.Defaults');* Q: ~7 Q$ i/ I, Y2 ]: `
- p& p' R0 g& e) f" ?6 {
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;) |- l  w/ y3 I* h% J
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;; Z8 P9 P- y7 C. L
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;; ~: L! P* y8 r. `
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */2 J! f: g: A! {& d  h3 P6 |
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
3 S9 u1 {$ i/ }. K$ ~; xDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;2 l, Q2 h3 J% ?  T: x) u% F
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
3 U, `- V- z: GDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
* A5 f+ b! L& e( f/ b' LDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;& n( b9 ]6 e, @/ p0 S% }
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;0 D1 E" j2 [9 ^0 f4 ~8 i; f8 |% _
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;1 J) c/ c: w1 ?3 {, B
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
/ O8 j3 F+ q6 E( `, P' w: PDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;, S# W: p  `) a/ e
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
" _: U7 C+ z& ]1 F( K
$ b1 a* e' T( H9 E/* override diags mask for selected modules */; w6 W9 A. R* e8 H
xdc.useModule('xdc.runtime.Main');! y& }% n: L9 e, ]% g* V. r2 Z
Diags.setMaskMeta(
% h9 m5 D3 C9 v6 p, n0 U7 x6 P    "xdc.runtime.Main",
0 i; c, {( n7 A8 d% A# L% R1 ?: u% L    Diags.ENTRY | Diags.EXIT | Diags.INFO,8 s( f  b; E! ~$ w$ i/ H3 D
    Diags.RUNTIME_ON
0 A/ `( A+ K4 j2 g" I);
3 k7 g; i- z5 t( n$ Z6 u) k$ L+ @5 E" G* U. L( ~
var Registry = xdc.useModule('xdc.runtime.Registry');
  l) i5 x. U4 g% Q) lRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;8 c1 M/ P5 c4 e/ F% a; r
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
" O8 ]3 z( z  q: Q8 yRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;4 s$ o3 y$ @0 e6 y
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;$ n3 `/ q2 v% k' r; E6 o
8 V+ F' v5 s$ ~$ [
/* create a logger instance */* I( E% ^8 q" S4 H( B+ ?8 ?7 v. b
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
) E  K! G% t, G: j/ h  A5 }var loggerBufP = new LoggerBuf.Params();
" [7 `; M& p/ B) ologgerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */3 Z. Y$ N) ~/ n/ O3 t2 e# P
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
' s( H% \, }* {! E4 w4 v/ }9 h% d: d5 k9 Q
var appLogger = LoggerBuf.create(loggerBufP);
5 r) y( L4 Y1 Q- S' i& e# u  D: c# jappLogger.instance.name = "AppLog_Core1";
) ?$ _- i% S# h5 j. O- gDefaults.common$.logger = appLogger;
# l& e5 ]5 u1 U6 r5 o7 ~  ~Memory.defaultHeapSize = 0x8192;   
5 N) V& W% M# y) O* h4 @, aIdle.idleFxns[0] = "&LEDStatus";
8 @# s3 J* X  m+ xCache.initSize.l2Size = Cache.L2Size_32K;
5 C- i9 r: |+ h8 V) c& a1 r0 A1 B: n" n4 d
回复 支持 反对

使用道具 举报

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 */* E7 H$ ]. u& r* P, C; Z
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');& I: _& y' l1 x6 h
var heapMemParams = new HeapMem.Params();
0 _% K8 c3 Q5 H4 P7 n8 MheapMemParams.size = 0x4000;
" x2 u8 a  F% h0 N. p, Y4 a% r
" K9 |8 h6 T& N; a3 uvar Memory = xdc.useModule('xdc.runtime.Memory');
# W- G9 m) \9 o+ YMemory.defaultHeapInstance = HeapMem.create(heapMemParams);. L; G, M4 I  ~* A
! [" Z8 b8 {/ K* o9 E6 T- b" R& ~
我大约calloc  每次共计大小为5K*16bits,
' ~/ N, b+ K/ \. L7 |, f5 y4 J+ s而默认配置才0x4000、需要改大。
. h4 E% a/ y& J7 x+ e8 U0 m2 Z2 ]) e
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */# v% t8 \. G" f& m- I
Program.heap = 0;
; K! A4 f% s3 xProgram.argSize = 100;  /* minimum size */1 {0 H/ E6 x4 l- \
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-6 00:19 , Processed in 0.044141 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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