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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
5 a" \: y$ Q& X6 P4 v6 A: i, n+ Y. X) Y4 L  j' g4 V& H4 r
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256% w! H9 l. w. U& M/ I
5 w% H: ~: D: z0 c1 `$ W; i
其他程序段。。。。。8 u7 n' F4 M& T

# U/ z( V7 D! [% N+ J" i   free(x_d);
- {% V1 y  K" p* u" B
1 F9 G# S0 ~7 z" c使用DSP侧单独调试功能,验证动态申请没有问题,
2 C5 B8 X* y  |$ O5 b* h( W) _6 ?5 @
. F# s; X) }; G6 M- I% Y  s但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。" L- l3 Z  K1 k$ C

* r$ X6 _& [* l# l. o) x% n/ m0 _  U) c
, [( g; o& {: a6 z: s

: \9 Q* X3 G' e8 ]3 R" X* S& z( P7 Z  ?  \  L7 L- l& Z

" T0 Z" h9 @1 s7 B/ Q0 |5 [. B8 s$ [: N' j: y

+ S4 }& L: ~; ?1 @8 ~8 Z- p* A, a2 p9 n% y/ w' Z- x" ^. S+ V
# g# @. y0 |1 u& Q/ V- u
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明) S) h6 ?& x9 U2 E! d
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下9 x* N' h# v8 l+ N- ^8 @$ z
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
8 `; F, M/ v6 h; y1 O/ W
& {6 }% I2 h- \8 N
是不是需要在DSP.CFG中进行配置
9 x5 g8 \2 E' G( k  B  J  A我现在的配置为
$ m0 N' @, i4 X" u6 \; ^
$ N& i- d5 I; @, |# f' V* W1 [# M/*" H+ Q  x, K# j4 s0 e3 n6 W$ ^
*  ======== Operating System Configuration ========
5 p! T. E9 P2 `' C. f, ~ */
# ?$ D) [- n& R; p+ T& \! R! A6 v+ s2 J8 {7 u
/* no rts heap */* v1 E, C) F3 K5 i9 M. S0 C2 z
Program.heap = 0;8 k" U) a" u0 T- e. r% w+ T1 B
Program.argSize = 100;  /* minimum size */: P# {5 R9 U) T, d( @: L% e) b  b
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
; _3 a5 T( O# D7 A8 k% ?1 p" R
7 e6 ]* m4 q5 b/* create a default heap */; Z. f8 o' h" \: q8 m+ {' i( E
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');8 ^3 q* K  g& T
var heapMemParams = new HeapMem.Params();; G; l- M4 X4 a% |& n4 p* Z, f
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大: W8 R! @2 q) E! i

) B  A6 h6 j4 b% U& r/ W, d" K
var Memory = xdc.useModule('xdc.runtime.Memory');
+ x; n* I) R6 h; A( o, ?) Q+ ZMemory.defaultHeapInstance = HeapMem.create(heapMemParams);6 r( y; A9 `' e6 P6 B/ M
- Z7 a! J9 S, ?, u
/* configure System module */
# b5 g$ z& v  D3 [0 P- Mvar SysMin = xdc.useModule('xdc.runtime.SysMin');
! N% ?; }/ h, ZSysMin.bufSize = 0x1000;+ a# R: l1 s7 }4 o6 T4 g  n( x
SysMin.flushAtExit = false;2 d0 _% h  H7 N, R- B! b  U

5 r+ ^* P* u5 z: u1 l( W5 Ovar System = xdc.useModule('xdc.runtime.System');8 `/ m3 E3 f, }7 f: y: |# G
System.SupportProxy = SysMin;: h: B4 O& M9 ]/ H9 f. j
5 q7 r, @2 c2 H& T$ i
/* configure SysBios to use the lower half of Timer 1 */4 F7 Z' J+ e" R6 U: l! C
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');) b% w! X9 q( f3 `9 l$ G% Y6 m
var Clock = xdc.useModule('ti.sysbios.knl.Clock');$ Y; d9 W7 F) r
Timer.timerSettings[1].master = true;
8 ~; C7 P. ~/ M" V6 B+ zTimer.defaultHalf = Timer.Half_LOWER;4 }/ Q; z2 L6 z. E( j- K& f
Clock.timerId = 1;
$ Y# Q% g( ~+ d" Z# f! F# G9 m& X( e

; I- n( h3 P; _# I/ Q/ K* ~7 s4 k0 c' ~/*
. D! M5 c0 L" T* M% ~( B/ A *  ======== Miscellaneous Configuration ========
0 g% b) H* a$ ^- {5 H4 {! z */! F- P7 n- h+ `+ M! \* ?

8 j, _( V- w: z0 R5 G, [3 L- K/* set default diags mask */- O: h6 ?; E, `0 `& k
var Diags = xdc.useModule('xdc.runtime.Diags');! ~$ N4 l0 I8 N& T6 N0 ?
var Defaults = xdc.useModule('xdc.runtime.Defaults');' F& u* q& |9 r% N7 j2 P
6 C9 C" I+ W$ C" i) o
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;# T% \0 q. T% C- o' Y9 X
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
! k" [9 M; j; gDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;; m' ^; _- f& g" G( c
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */' x4 C; {: T# j
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
; r+ P2 [- h; DDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
( s* s; s& l# n  q. f8 ODefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
( ^+ ^5 T+ ?! ]! c7 e6 G; MDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;) Z/ j6 @: i( F1 N; z
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
) p) T' [4 p" q8 UDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;5 z0 P4 s9 [: u  b9 e
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;: X: Q2 K: l5 |! H
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;9 m7 D" f4 S: N
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
( ^" m& s3 s6 H! `+ J4 U2 PDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
$ j% Q, z! n$ V2 N1 ]& |1 ?
2 [! S' l( R: s; [3 e/* override diags mask for selected modules */
! ~+ K+ ~/ y/ Y' bxdc.useModule('xdc.runtime.Main');& q+ I: v4 I  o$ r; T2 [
Diags.setMaskMeta(
3 Z* z% Q" z; K: W    "xdc.runtime.Main",! h& k) G& e- `. X9 I
    Diags.ENTRY | Diags.EXIT | Diags.INFO,; C2 S2 W5 }& `
    Diags.RUNTIME_ON8 e  }/ g, Y; v, n+ U4 i6 Y. ?3 _
);+ O: i" W' P9 `/ p2 n7 q
5 B" N2 f9 G. D+ b5 f
var Registry = xdc.useModule('xdc.runtime.Registry');, k: W- L. Z& t, v1 `
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
! z5 b, S! Y  N3 C6 }/ Y( LRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
, L; p$ a+ ~- Q- {. F9 o( g0 @Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;$ V. ^, J1 `4 s
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;- s$ p% n2 N+ I- P
: i" D8 [' V* l. u# Z
/* create a logger instance */, i8 \% ~6 J3 ^4 B# p0 [
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');2 T: [3 O! `% R. l/ w
var loggerBufP = new LoggerBuf.Params();. [7 y5 j% V1 O* r# d7 ]" a2 }
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */+ E5 h- j' T( Q* e4 I5 y' I
loggerBufP.bufType = LoggerBuf.BufType_FIXED;) p# f' }' V$ X+ F9 a+ k1 Y
& s1 q" w/ b1 j
var appLogger = LoggerBuf.create(loggerBufP);# j( ]/ J' f* w3 R
appLogger.instance.name = "AppLog_Core1";
/ V1 C0 o9 T2 M0 jDefaults.common$.logger = appLogger;& l" }' p+ _6 `& h
Memory.defaultHeapSize = 0x8192;    & a* G/ r7 O- h) @- |' J. h" t4 A
Idle.idleFxns[0] = "&LEDStatus";
1 x: _6 ]+ Z$ y1 x/ T( G1 z' E$ ~$ vCache.initSize.l2Size = Cache.L2Size_32K;
4 P( `- o! E9 u# [* e% }
" A/ q% K/ x/ O
回复 支持 反对

使用道具 举报

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 */0 a0 v* h- g' _6 S7 B, V
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');; L# L3 P5 M" L/ w1 x* q# d5 Q/ x
var heapMemParams = new HeapMem.Params();9 I  `" R7 k8 R' O  B6 N
heapMemParams.size = 0x4000;+ f; n+ P. k4 `) s
: R, g' z: Z% R6 A2 {0 _9 X- ?" J
var Memory = xdc.useModule('xdc.runtime.Memory');& g) G7 Y. L  t7 ]
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
8 W3 R1 l! Q* V" @0 y% w3 X; [. [& O
我大约calloc  每次共计大小为5K*16bits,
0 G) @5 H  C" }" D  u而默认配置才0x4000、需要改大。' n. Z8 F. d/ T: ]9 `7 x

& _/ n5 ~0 z! b% }: `4 I
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */2 G, @5 h  p& m% q% I, ~) x
Program.heap = 0;
8 H' @* `, V) j, J7 e& eProgram.argSize = 100;  /* minimum size */8 ~0 w% i9 y! t! I" ^, D) C( M
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-6 06:05 , Processed in 0.043261 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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